From ab417d2fe7679a79bf402cc53ffc98ea813f7167 Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Tue, 8 Sep 2020 09:07:59 +0200 Subject: [PATCH 001/143] use text() instead of html() --- .../jquery/jquery-extensions.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js index 44c2bdad27..645e7a7259 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js @@ -35,7 +35,7 @@ //change text if ($buttonInnerSpan.length && $button.attr('data-busy-text')) { $button.data('buttonOriginalText', $buttonInnerSpan.html()); - $buttonInnerSpan.html($button.attr('data-busy-text')); + $buttonInnerSpan.text($button.attr('data-busy-text')); } $button.addClass('button-busy'); @@ -55,7 +55,7 @@ //restore text if ($buttonInnerSpan.length && $button.data('buttonOriginalText')) { - $buttonInnerSpan.html($button.data('buttonOriginalText')); + $buttonInnerSpan.text($button.data('buttonOriginalText')); } $button.removeClass('button-busy'); From e25cd9c0fe5e2ccaf8b781d3bc05e9c681f8c0c2 Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Tue, 8 Sep 2020 09:42:44 +0200 Subject: [PATCH 002/143] Use TagBuilder to create HTML elements --- .../Button/AbpButtonTagHelperServiceBase.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperServiceBase.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperServiceBase.cs index 419aff7c08..ab35dbe804 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperServiceBase.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperServiceBase.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Razor.TagHelpers; using System; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; @@ -43,7 +44,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button return; } - output.Content.AppendHtml($" "); + var icon = new TagBuilder("i"); + icon.AddCssClass(GetIconClass(context, output)); + output.Content.AppendHtml(icon); } protected virtual string GetIconClass(TagHelperContext context, TagHelperOutput output) @@ -64,7 +67,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button return; } - output.Content.AppendHtml($"{TagHelper.Text}"); + var span = new TagBuilder("span"); + span.InnerHtml.Append(TagHelper.Text); + output.Content.AppendHtml(span); } protected virtual void AddDisabled(TagHelperContext context, TagHelperOutput output) From a352bbda8f3a6b3101067158577ba0d79ac53060 Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Wed, 9 Sep 2020 15:31:30 +0200 Subject: [PATCH 003/143] Use IHtmlGenerator / TagBuilder in necessary tag helpers --- .../TagHelpers/AbpTagHelperService.cs | 10 +++ .../AbpBreadcrumbItemTagHelperService.cs | 22 +++-- .../AbpCarouselItemTagHelperService.cs | 30 ++++--- .../Carousel/AbpCarouselTagHelperService.cs | 87 ++++++++++++++----- .../AbpAccordionItemTagHelperService.cs | 50 +++++++---- .../Collapse/AbpAccordionTagHelperService.cs | 14 ++- .../Modal/AbpModalFooterTagHelperService.cs | 83 +++++++++++++----- .../Modal/AbpModalHeaderTagHelperService.cs | 11 +-- .../Modal/AbpModalTagHelperService.cs | 16 +++- .../Nav/AbpNavbarToggleTagHelperService.cs | 30 +++++-- .../AbpPaginationTagHelperService.cs | 16 ++-- .../Popover/AbpPopoverTagHelperService.cs | 17 ++-- .../Tab/AbpTabDropdownTagHelperService.cs | 33 ++++--- .../Tab/AbpTabLinkTagHelperService.cs | 29 +++++-- .../TagHelpers/Tab/AbpTabTagHelperService.cs | 72 ++++++++++++--- .../Tooltip/AbpTooltipTagHelperService.cs | 12 ++- 16 files changed, 395 insertions(+), 137 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs index 53c56295ce..356e8c5191 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs @@ -5,6 +5,7 @@ using System.Linq; using System.Reflection; using System.Text.Encodings.Web; using System.Threading.Tasks; +using Microsoft.AspNetCore.Html; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form; @@ -51,5 +52,14 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers Process(context, output); return Task.CompletedTask; } + + protected string RenderHtml(IHtmlContent content) + { + using (var writer = new StringWriter()) + { + content.WriteTo(writer, HtmlEncoder.Default); + return writer.ToString(); + } + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs index 1d6204373a..64f6db5657 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs @@ -1,6 +1,7 @@ -using System.Collections.Generic; -using System.Text.Encodings.Web; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; +using System.Collections.Generic; +using System.Text.Encodings.Web; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; @@ -14,6 +15,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb { _encoder = encoder; } + public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "li"; @@ -23,7 +25,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb var list = context.GetValue>(BreadcrumbItemsContent); - output.Content.SetHtmlContent(GetInnerHtml(context, output)); + ProcessContent(context, output); list.Add(new BreadcrumbItem { @@ -34,15 +36,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb output.SuppressOutput(); } - protected virtual string GetInnerHtml(TagHelperContext context, TagHelperOutput output) + protected virtual void ProcessContent(TagHelperContext context, TagHelperOutput output) { if (string.IsNullOrWhiteSpace(TagHelper.Href)) { output.Attributes.Add("aria-current", "page"); - return TagHelper.Title; + output.Content.Append(TagHelper.Title); } - return "" + TagHelper.Title + ""; - } + else + { + var link = new TagBuilder("a"); + link.Attributes.Add("href", TagHelper.Href); + link.InnerHtml.Append(TagHelper.Title); + output.Content.AppendHtml(link); + } + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs index 5a4bafd47d..3d4d33eae3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs @@ -1,7 +1,7 @@ -using System.Collections.Generic; -using System.Text; -using System.Text.Encodings.Web; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; +using System.Collections.Generic; +using System.Text.Encodings.Web; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; @@ -42,8 +42,12 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel protected virtual void SetInnerImgTag(TagHelperContext context, TagHelperOutput output) { - var imgTag ="\"""; - output.Content.SetHtmlContent(imgTag); + var img = new TagBuilder("img"); + img.AddCssClass("d-block w-100"); + img.Attributes.Add("src", TagHelper.Src); + img.Attributes.Add("alt", TagHelper.Alt); + + output.Content.SetHtmlContent(img); } protected virtual void SetActive(TagHelperContext context, TagHelperOutput output) @@ -61,14 +65,18 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel return; } - var html = new StringBuilder(""); + var title = new TagBuilder("h5"); + title.InnerHtml.Append(TagHelper.CaptionTitle); + + var caption = new TagBuilder("p"); + caption.InnerHtml.Append(TagHelper.Caption); - html.AppendLine("
"); - html.AppendLine("
"+TagHelper.CaptionTitle+"
"); - html.AppendLine("

" + TagHelper.Caption + "

"); - html.AppendLine("
"); + var wrapper = new TagBuilder("div"); + wrapper.AddCssClass("carousel-caption d-none d-md-block"); + wrapper.InnerHtml.AppendHtml(title); + wrapper.InnerHtml.AppendHtml(caption); - output.PostContent.SetHtmlContent(html.ToString()); + output.PostContent.SetHtmlContent(wrapper); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs index c92e08365e..83fc057797 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs @@ -1,15 +1,25 @@ -using System; +using Localization.Resources.AbpUi; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.Extensions.Localization; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel { public class AbpCarouselTagHelperService : AbpTagHelperService { + protected IStringLocalizer L { get; } + + public AbpCarouselTagHelperService(IStringLocalizer localizer) + { + L = localizer; + } + public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; @@ -58,18 +68,45 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel return; } - var html = new StringBuilder(""); - - html.AppendLine(""); - html.AppendLine(""); - html.AppendLine("Previous"); - html.AppendLine(""); - html.AppendLine(""); - html.AppendLine(""); - html.AppendLine("Next"); - html.AppendLine(""); - - output.PostContent.SetHtmlContent(html.ToString()); + // create 'previous' item + var prevIcon = new TagBuilder("span"); + prevIcon.AddCssClass("carousel-control-prev-icon"); + prevIcon.Attributes.Add("aria-hidden", "true"); + + var prevText = new TagBuilder("span"); + prevText.AddCssClass("sr-only"); + prevText.InnerHtml.Append(L["Previous"].Value); + + var prevAnchor = new TagBuilder("a"); + prevAnchor.AddCssClass("carousel-control-prev"); + prevAnchor.Attributes.Add("href", "#" + TagHelper.Id); + prevAnchor.Attributes.Add("role", "button"); + prevAnchor.Attributes.Add("data-slide", "prev"); + + prevAnchor.InnerHtml.AppendHtml(prevIcon); + prevAnchor.InnerHtml.AppendHtml(prevText); + + // create 'next' item + var nextIcon = new TagBuilder("span"); + nextIcon.AddCssClass("carousel-control-next-icon"); + nextIcon.Attributes.Add("aria-hidden", "true"); + + var nextText = new TagBuilder("span"); + nextText.AddCssClass("sr-only"); + nextText.InnerHtml.Append(L["Next"].Value); + + var nextAnchor = new TagBuilder("a"); + nextAnchor.AddCssClass("carousel-control-next"); + nextAnchor.Attributes.Add("href", "#" + TagHelper.Id); + nextAnchor.Attributes.Add("role", "button"); + nextAnchor.Attributes.Add("data-slide", "next"); + + nextAnchor.InnerHtml.AppendHtml(nextIcon); + nextAnchor.InnerHtml.AppendHtml(nextText); + + // append post content + output.PostContent.AppendHtml(prevAnchor); + output.PostContent.AppendHtml(nextAnchor); } protected virtual void SetIndicators(TagHelperContext context, TagHelperOutput output, List itemList) @@ -79,20 +116,24 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel return; } - var html = new StringBuilder("
    "); + var list = new TagBuilder("ol"); + list.AddCssClass("carousel-indicators"); for (var i = 0; i < itemList.Count; i++) { - html.AppendLine( - "
  1. " : "") + - "
  2. "); + var listItem = new TagBuilder("li"); + listItem.Attributes.Add("data-target", "#" + TagHelper.Id); + listItem.Attributes.Add("data-slide-to", i.ToString()); + + if (itemList[i].Active) + { + listItem.AddCssClass("active"); + } + + list.InnerHtml.AppendHtml(listItem); } - html.AppendLine("
"); - output.PreContent.SetHtmlContent(html.ToString()); + output.PreContent.SetHtmlContent(list); } protected virtual void SetOneItemAsActive(TagHelperContext context, TagHelperOutput output, List itemList) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs index 74365b0c8a..358b9d3054 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs @@ -1,7 +1,8 @@ -using System; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Razor.TagHelpers; +using System; using System.Collections.Generic; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse @@ -17,7 +18,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse var html = GetAccordionHeaderItem(context, output) + GetAccordionContentItem(context, output, innerContent); var tabHeaderItems = context.GetValue>(AccordionItems); - tabHeaderItems.Add(html); output.SuppressOutput(); @@ -25,23 +25,43 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse protected virtual string GetAccordionHeaderItem(TagHelperContext context, TagHelperOutput output) { - return "
" + Environment.NewLine + - "
" + Environment.NewLine + - " " + Environment.NewLine + - "
" + Environment.NewLine + - "
" + Environment.NewLine; + var button = new TagBuilder("button"); + button.AddCssClass("btn btn-link"); + button.Attributes.Add("type", "button"); + button.Attributes.Add("data-toggle", "collapse"); + button.Attributes.Add("data-target", "#" + GetContentId()); + button.Attributes.Add("aria-expanded", "true"); + button.Attributes.Add("aria-controls", GetContentId()); + button.InnerHtml.Append(TagHelper.Title); + + var h5 = new TagBuilder("h5"); + h5.AddCssClass("mb-0"); + h5.InnerHtml.AppendHtml(button); + + var header = new TagBuilder("div"); + header.AddCssClass("card-header"); + header.Attributes.Add("id", GetHeadingId()); + header.InnerHtml.AppendHtml(h5); + + return RenderHtml(header); } protected virtual string GetAccordionContentItem(TagHelperContext context, TagHelperOutput output, string content) { var show = (TagHelper.Active ?? false) ? " show" : ""; - return "
" + Environment.NewLine + - "
" + Environment.NewLine + - content + Environment.NewLine + - "
" + Environment.NewLine + - "
" + Environment.NewLine; + + var cardBody = new TagBuilder("div"); + cardBody.AddCssClass("card-body"); + cardBody.InnerHtml.AppendHtml(content); + + var wrapper = new TagBuilder("div"); + wrapper.AddCssClass("collapse" + show); + wrapper.Attributes.Add("id", GetContentId()); + wrapper.Attributes.Add("aria-labelledby", GetHeadingId()); + wrapper.Attributes.Add("data-parent", "#" + AbpAccordionParentIdPlaceholder); + wrapper.InnerHtml.AppendHtml(cardBody); + + return RenderHtml(wrapper); } protected virtual string GetHeadingId() diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs index 20e62604a9..91e1ece4c5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs @@ -1,14 +1,22 @@ -using System; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Razor.TagHelpers; +using System; using System.Collections.Generic; using System.Text; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse { public class AbpAccordionTagHelperService : AbpTagHelperService { + protected IHtmlGenerator HtmlGenerator { get; } + + public AbpAccordionTagHelperService(IHtmlGenerator htmlGenerator) + { + HtmlGenerator = htmlGenerator; + } + public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { SetRandomIdIfNotProvided(); @@ -32,7 +40,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse var html = new StringBuilder(""); foreach (var item in items) { - var content = item.Replace(AbpAccordionParentIdPlaceholder, TagHelper.Id); + var content = item.Replace(AbpAccordionParentIdPlaceholder, HtmlGenerator.Encode(TagHelper.Id)); html.AppendLine( "
" + Environment.NewLine + diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs index 38cac85a6d..d87d0d681c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs @@ -1,10 +1,10 @@ -using System.Text; -using Localization.Resources.AbpUi; +using Localization.Resources.AbpUi; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.Extensions.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; -namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { public class AbpModalFooterTagHelperService : AbpTagHelperService { @@ -22,37 +22,78 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal if (TagHelper.Buttons != AbpModalButtons.None) { - output.PostContent.SetHtmlContent(CreateContent()); + ProcessButtons(context, output); } - ProcessButtonsAlignment(output); - } - - protected virtual string CreateContent() - { - var sb = new StringBuilder(); - switch (TagHelper.Buttons) - { + ProcessButtonsAlignment(output); + } + + protected virtual void ProcessButtons(TagHelperContext context, TagHelperOutput output) + { + switch (TagHelper.Buttons) + { case AbpModalButtons.Cancel: - sb.AppendLine(""); + output.PostContent.AppendHtml(GetCancelButton()); break; case AbpModalButtons.Close: - sb.AppendLine(""); + output.PostContent.AppendHtml(GetCloseButton()); break; case AbpModalButtons.Save: - sb.AppendLine(""); + output.PostContent.AppendHtml(GetSaveButton()); break; case AbpModalButtons.Save | AbpModalButtons.Cancel: - sb.AppendLine(""); - sb.AppendLine(""); + output.PostContent.AppendHtml(GetSaveButton()); + output.PostContent.AppendHtml(GetCancelButton()); break; case AbpModalButtons.Save | AbpModalButtons.Close: - sb.AppendLine(""); - sb.AppendLine(""); - break; + output.PostContent.AppendHtml(GetSaveButton()); + output.PostContent.AppendHtml(GetCloseButton()); + break; } + } + + protected virtual string GetSaveButton() + { + var icon = new TagBuilder("i"); + icon.AddCssClass("fa"); + icon.AddCssClass("fa-check"); + + var span = new TagBuilder("span"); + span.InnerHtml.Append(_localizer["Save"]); + + var button = new TagBuilder("button"); + button.Attributes.Add("type", "submit"); + button.AddCssClass("btn"); + button.AddCssClass("btn-primary"); + button.Attributes.Add("data-busy-text", _localizer["SavingWithThreeDot"]); + button.InnerHtml.AppendHtml(icon); + button.InnerHtml.AppendHtml(span); + + return RenderHtml(button); + } + + protected virtual string GetCloseButton() + { + var button = new TagBuilder("button"); + button.Attributes.Add("type", "button"); + button.Attributes.Add("data-dismiss", "modal"); + button.AddCssClass("btn"); + button.AddCssClass("btn-secondary"); + button.InnerHtml.Append(_localizer["Close"]); + + return RenderHtml(button); + } + + protected virtual string GetCancelButton() + { + var button = new TagBuilder("button"); + button.Attributes.Add("type", "button"); + button.Attributes.Add("data-dismiss", "modal"); + button.AddCssClass("btn"); + button.AddCssClass("btn-secondary"); + button.InnerHtml.Append(_localizer["Cancel"]); - return sb.ToString(); + return RenderHtml(button); } protected virtual void ProcessButtonsAlignment(TagHelperOutput output) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs index 79cddd1f53..8b4118d52b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs @@ -1,5 +1,6 @@ -using System.Text; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; +using System.Text; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal @@ -16,11 +17,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal protected virtual string CreatePreContent() { - var sb = new StringBuilder(); - - sb.AppendLine("
" + TagHelper.Title + "
"); + var title = new TagBuilder("h5"); + title.AddCssClass("modal-title"); + title.InnerHtml.Append(TagHelper.Title); - return sb.ToString(); + return RenderHtml(title); } protected virtual string CreatePostContent() diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs index 3524b27d35..a314322dfe 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs @@ -1,11 +1,19 @@ -using System.Linq; -using System.Text; +using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; +using System.Linq; +using System.Text; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { public class AbpModalTagHelperService : AbpTagHelperService - { + { + protected IHtmlGenerator HtmlGenerator { get; } + + public AbpModalTagHelperService(IHtmlGenerator htmlGenerator) + { + HtmlGenerator = htmlGenerator; + } + public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = null; @@ -17,7 +25,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { var sb = new StringBuilder(); - var attritubutes = output.Attributes.Select(a => " " + a.Name + "=\"" + a.Value + "\" ").ToList(); + var attritubutes = output.Attributes.Select(a => " " + HtmlGenerator.Encode(a.Name) + "=\"" + HtmlGenerator.Encode(a.Value) + "\" ").ToList(); var attritubutesAsJoin = string.Join(" ", attritubutes.ToArray()); sb.AppendLine("
"); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Nav/AbpNavbarToggleTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Nav/AbpNavbarToggleTagHelperService.cs index 1b53894ac2..df48452c40 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Nav/AbpNavbarToggleTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Nav/AbpNavbarToggleTagHelperService.cs @@ -1,11 +1,21 @@ -using System; +using Localization.Resources.AbpUi; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.Extensions.Localization; +using System; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Nav { public class AbpNavbarToggleTagHelperService : AbpTagHelperService { + protected IStringLocalizer L { get; } + + public AbpNavbarToggleTagHelperService(IStringLocalizer stringLocalizer) + { + L = stringLocalizer; + } + public override void Process(TagHelperContext context, TagHelperOutput output) { SetRandomNameIfNotProvided(); @@ -18,10 +28,20 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Nav protected virtual void SetToggleButton(TagHelperContext context, TagHelperOutput output) { - output.PreElement.SetHtmlContent( - ""); + var span = new TagBuilder("span"); + span.AddCssClass("navbar-toggler-icon"); + + var button = new TagBuilder("button"); + button.AddCssClass("navbar-toggler"); + button.Attributes.Add("type", "button"); + button.Attributes.Add("data-toggle", "collapse"); + button.Attributes.Add("data-target", "#" + TagHelper.Id); + button.Attributes.Add("aria-controls", TagHelper.Id); + button.Attributes.Add("aria-expanded", "false"); + button.Attributes.Add("aria-label", L["ToggleNavigation"].Value); + button.InnerHtml.AppendHtml(span); + + output.PreElement.SetHtmlContent(button); } protected virtual void SetRandomNameIfNotProvided() diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs index 9c37e77767..71f3bfe247 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Pagination/AbpPaginationTagHelperService.cs @@ -1,13 +1,13 @@ -using System; -using System.Linq; -using System.Text; -using System.Text.Encodings.Web; -using System.Threading.Tasks; -using Localization.Resources.AbpUi; +using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Mvc.TagHelpers; using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.Extensions.Localization; +using System; +using System.Linq; +using System.Text; +using System.Text.Encodings.Web; +using System.Threading.Tasks; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; @@ -134,7 +134,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination SetHrefAttribute(currentPage, attributeList); - tagHelperOutput.Content.SetHtmlContent(localizer[localizationKey]); + tagHelperOutput.Content.SetContent(localizer[localizationKey]); var renderedHtml = tagHelperOutput.Render(_encoder); @@ -166,7 +166,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Pagination var localizer = _stringLocalizerFactory.Create(typeof(AbpUiResource)); var pagerInfo = (TagHelper.ShowInfo ?? false) ? - "
" + localizer["PagerInfo{0}{1}{2}", TagHelper.Model.ShowingFrom, TagHelper.Model.ShowingTo, TagHelper.Model.TotalItemsCount] + "
\r\n" + "
" + _encoder.Encode(localizer["PagerInfo{0}{1}{2}", TagHelper.Model.ShowingFrom, TagHelper.Model.ShowingTo, TagHelper.Model.TotalItemsCount]) + "
\r\n" : ""; return diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs index 7ecb351290..18e058ab7c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs @@ -1,11 +1,18 @@ -using System; -using System.Linq; +using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; +using System.Linq; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover { public class AbpPopoverTagHelperService : AbpTagHelperService - { + { + protected IHtmlGenerator HtmlGenerator { get; } + + public AbpPopoverTagHelperService(IHtmlGenerator htmlGenerator) + { + HtmlGenerator = htmlGenerator; + } + public override void Process(TagHelperContext context, TagHelperOutput output) { if (!TagHelper.Disabled ?? true) @@ -44,8 +51,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover dataPlacementAsHtml = dataPlacementAsHtml.Replace("default", "top"); } var titleAttribute = output.Attributes.FirstOrDefault(at => at.Name == "title"); - var titleAsHtml = titleAttribute == null ? "" : "title=\"" + titleAttribute.Value + "\" "; - var preElementHtml = ""; + var titleAsHtml = titleAttribute == null ? "" : "title=\"" + HtmlGenerator.Encode(titleAttribute.Value) + "\" "; + var preElementHtml = ""; var postElementHtml = ""; output.PreElement.SetHtmlContent(preElementHtml); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs index fb724af9c8..f244a750b0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs @@ -1,7 +1,8 @@ -using System; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Razor.TagHelpers; +using System; using System.Collections.Generic; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab @@ -31,14 +32,26 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab var link = TagHelper.Name; var title = TagHelper.Title; - return "
  • " + - "" + - title + - "" + - "
    " + - AbpTabDropdownItemsActivePlaceholder + - "
    " + - "
  • "; + var anchor = new TagBuilder("a"); + anchor.AddCssClass("nav-link dropdown-toggle"); + anchor.Attributes.Add("id", id); + anchor.Attributes.Add("data-toggle", "dropdown"); + anchor.Attributes.Add("href", "#" + link); + anchor.Attributes.Add("role", "button"); + anchor.Attributes.Add("aria-haspopup", "true"); + anchor.Attributes.Add("aria-expanded", "false"); + anchor.InnerHtml.Append(title); + + var menu = new TagBuilder("div"); + menu.AddCssClass("dropdown-menu"); + menu.InnerHtml.Append(AbpTabDropdownItemsActivePlaceholder); + + var listItem = new TagBuilder("li"); + listItem.AddCssClass("nav-item dropdown"); + listItem.InnerHtml.AppendHtml(anchor); + listItem.InnerHtml.AppendHtml(menu); + + return RenderHtml(listItem); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs index 54a29bf691..cd98e689e0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs @@ -1,6 +1,7 @@ -using System.Collections.Generic; -using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; +using System.Collections.Generic; +using System.Threading.Tasks; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab @@ -30,12 +31,28 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab if (!string.IsNullOrWhiteSpace(TagHelper.ParentDropdownName)) { - return "" + title + ""; + var anchor = new TagBuilder("a"); + anchor.AddCssClass("dropdown-item"); + anchor.Attributes.Add("id", id); + anchor.Attributes.Add("href", href); + anchor.InnerHtml.Append(title); + + return RenderHtml(anchor); } + else + { + var anchor = new TagBuilder("a"); + anchor.AddCssClass("nav-link " + AbpTabItemActivePlaceholder); + anchor.Attributes.Add("id", id); + anchor.Attributes.Add("href", href); + anchor.InnerHtml.Append(title); + + var listItem = new TagBuilder("li"); + listItem.AddCssClass("nav-item"); + listItem.InnerHtml.AppendHtml(anchor); - return "
  • " + - title + - "
  • "; + return RenderHtml(listItem); + } } protected virtual void SetPlaceholderForNameIfNotProvided() diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs index 2de18d0592..337033193a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs @@ -1,7 +1,8 @@ -using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Razor.TagHelpers; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab @@ -34,16 +35,52 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab var attributes = GetTabHeaderAttributes(context, output); var classAttributesAsString = attributes.Where(a=>a.Name == "class").ToList().Select(a=>a.Value).JoinAsString(" "); - var otherAttributesAsString = attributes.Where(a => a.Name != "class").ToList().ToHtmlAttributesAsString(); + var otherAttributes = attributes.Where(a => a.Name != "class").ToList(); if (!string.IsNullOrWhiteSpace(TagHelper.ParentDropdownName)) { - return "" + title + ""; + var anchor = new TagBuilder("a"); + anchor.AddCssClass("dropdown-item " + classAttributesAsString); + anchor.Attributes.Add("id", id); + anchor.Attributes.Add("href", "#" + link); + anchor.Attributes.Add("data-toggle", "tab"); + anchor.Attributes.Add("role", "tab"); + anchor.Attributes.Add("aria-controls", control); + anchor.Attributes.Add("aria-selected", "false"); + + foreach (var attr in otherAttributes) + { + anchor.Attributes.Add(attr.Name, attr.Value.ToString()); + } + + anchor.InnerHtml.Append(title); + + return RenderHtml(anchor); + } + else + { + var anchor = new TagBuilder("a"); + anchor.AddCssClass("nav-link " + classAttributesAsString + " " + AbpTabItemActivePlaceholder); + anchor.Attributes.Add("id", id); + anchor.Attributes.Add("data-toggle", TabItemsDataTogglePlaceHolder); + anchor.Attributes.Add("href", "#" + link); + anchor.Attributes.Add("role", "tab"); + anchor.Attributes.Add("aria-controls", control); + anchor.Attributes.Add("aria-selected", AbpTabItemSelectedPlaceholder); + + foreach (var attr in otherAttributes) + { + anchor.Attributes.Add(attr.Name, attr.Value.ToString()); + } + + anchor.InnerHtml.Append(title); + + var listItem = new TagBuilder("li"); + listItem.AddCssClass("nav-item"); + listItem.InnerHtml.AppendHtml(anchor); + + return RenderHtml(listItem); } - - return "
  • " + - title + - "
  • "; } protected virtual string GetTabContentItem(TagHelperContext context, TagHelperOutput output, string content) @@ -53,11 +90,22 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab var attributes = GetTabContentAttributes(context, output); var classAttributesAsString = attributes.Where(a => a.Name == "class").ToList().Select(a => a.Name).JoinAsString(" "); - var otherAttributesAsString = attributes.Where(a => a.Name != "class").ToList().ToHtmlAttributesAsString(); + var otherAttributes = attributes.Where(a => a.Name != "class").ToList(); + + var wrapper = new TagBuilder("div"); + wrapper.AddCssClass("tab-pane fade " + classAttributesAsString + " " + AbpTabItemShowActivePlaceholder); + wrapper.Attributes.Add("id", id); + wrapper.Attributes.Add("role", "tabpanel"); + wrapper.Attributes.Add("aria-labelledby", headerId); + + foreach (var attr in otherAttributes) + { + wrapper.Attributes.Add(attr.Name, attr.Value.ToString()); + } + + wrapper.InnerHtml.AppendHtml(content); - return "
    " + - content + - "
    "; + return RenderHtml(wrapper); } protected virtual void SetPlaceholderForNameIfNotProvided() diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tooltip/AbpTooltipTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tooltip/AbpTooltipTagHelperService.cs index f95a0097cd..4c14b62de3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tooltip/AbpTooltipTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tooltip/AbpTooltipTagHelperService.cs @@ -1,11 +1,19 @@ using System; using System.Linq; +using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tooltip { public class AbpTooltipTagHelperService : AbpTagHelperService { + protected IHtmlGenerator HtmlGenerator { get; } + + public AbpTooltipTagHelperService(IHtmlGenerator htmlGenerator) + { + HtmlGenerator = htmlGenerator; + } + public override void Process(TagHelperContext context, TagHelperOutput output) { if (IsButtonDisabled(context, output)) @@ -26,8 +34,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tooltip output.PreElement.SetHtmlContent( "" + Environment.NewLine); + "data-placement=\"" + HtmlGenerator.Encode(directory.ToString().ToLowerInvariant()) + + "\" title=\"" + HtmlGenerator.Encode(GetTitle()) + "\">" + Environment.NewLine); output.PostElement.SetHtmlContent(Environment.NewLine + ""); From dd355c093aff47d8ee0da87ed9dba5e1bf1a56e1 Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Wed, 9 Sep 2020 22:46:37 +0200 Subject: [PATCH 004/143] Use IHtmlGenerator / TagBuilder in necessary tag helpers Notes: - Would be nice to completely remove the use of `AbpTagHelperService.RenderHtml` --- .../TagHelpers/AbpTagHelperService.cs | 2 +- .../AbpBreadcrumbTagHelperService.cs | 30 +++---- .../Carousel/AbpCarouselTagHelperService.cs | 12 +-- .../Collapse/AbpAccordionTagHelperService.cs | 23 ++--- .../Form/AbpInputTagHelperService.cs | 36 +++++--- .../Form/AbpRadioInputTagHelperService.cs | 42 ++++++--- .../Form/AbpSelectTagHelperService.cs | 32 ++++--- .../Modal/AbpModalFooterTagHelperService.cs | 26 +++--- .../Modal/AbpModalHeaderTagHelperService.cs | 40 ++++++--- .../Modal/AbpModalTagHelperService.cs | 85 +++++++++---------- .../Popover/AbpPopoverTagHelperService.cs | 44 ++++++---- .../TagHelpers/Tab/AbpTabsTagHelperService.cs | 42 +++++---- .../Tooltip/AbpTooltipTagHelperService.cs | 26 +++--- 13 files changed, 245 insertions(+), 195 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs index 356e8c5191..f70de7a364 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs @@ -53,7 +53,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers return Task.CompletedTask; } - protected string RenderHtml(IHtmlContent content) + protected virtual string RenderHtml(IHtmlContent content) { using (var writer = new StringWriter()) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs index 1d0476c5ad..c28b7c3d71 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs @@ -1,8 +1,8 @@ -using System.Collections.Generic; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Razor.TagHelpers; +using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb { @@ -10,37 +10,31 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb { public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { + output.TagName = "nav"; + output.Attributes.Add("aria-label", "breadcrumb"); + var list = InitilizeFormGroupContentsContext(context, output); await output.GetChildContentAsync(); - SetInnerOlTag(context, output); - SetInnerList(context, output, list); - - output.TagName = "nav"; - output.Attributes.Add("aria-label", "breadcrumb"); - } - - protected virtual void SetInnerOlTag(TagHelperContext context, TagHelperOutput output) - { - output.PreContent.SetHtmlContent("
      "); - output.PostContent.SetHtmlContent("
    "); + ProcessItems(context, output, list); } - protected virtual void SetInnerList(TagHelperContext context, TagHelperOutput output, List list) + protected virtual void ProcessItems(TagHelperContext context, TagHelperOutput output, List list) { SetLastOneActiveIfThereIsNotAny(context, output, list); - var html = new StringBuilder(""); + var listElement = new TagBuilder("ol"); + listElement.AddCssClass("breadcrumb"); foreach (var breadcrumbItem in list) { var htmlPart = SetActiveClassIfActiveAndGetHtml(breadcrumbItem); - html.AppendLine(htmlPart); + listElement.InnerHtml.AppendHtml(htmlPart); } - output.Content.SetHtmlContent(html.ToString()); + output.Content.SetHtmlContent(listElement); } protected virtual List InitilizeFormGroupContentsContext(TagHelperContext context, TagHelperOutput output) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs index 83fc057797..f6c5d841fd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs @@ -5,7 +5,6 @@ using Microsoft.Extensions.Localization; using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Threading.Tasks; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; @@ -32,6 +31,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel await output.GetChildContentAsync(); SetOneItemAsActive(context, output, itemList); + + SetItems(context, output, itemList); SetControls(context, output, itemList); SetIndicators(context, output, itemList); @@ -47,18 +48,17 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel protected virtual void SetItems(TagHelperContext context, TagHelperOutput output, List itemList) { - var itemsHtml = new StringBuilder(""); - itemsHtml.Append("
    "); + var wrapper = new TagBuilder("div"); + wrapper.AddCssClass("carousel-inner"); foreach (var carouselItem in itemList) { SetActiveIfActive(carouselItem); - itemsHtml.AppendLine(carouselItem.Html); + wrapper.InnerHtml.AppendHtml(carouselItem.Html); } - itemsHtml.Append("
    "); - output.Content.SetHtmlContent(itemsHtml.ToString()); + output.Content.SetHtmlContent(wrapper); } protected virtual void SetControls(TagHelperContext context, TagHelperOutput output, List itemList) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs index 91e1ece4c5..7a8e0b0571 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs @@ -1,8 +1,8 @@ -using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; using System; using System.Collections.Generic; -using System.Text; using System.Threading.Tasks; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; @@ -30,26 +30,21 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse await output.GetChildContentAsync(); - var content = GetContent(items); - - output.Content.SetHtmlContent(content); + ProcessItems(context, output, items); } - protected virtual string GetContent(List items) + protected virtual void ProcessItems(TagHelperContext context, TagHelperOutput output, List items) { - var html = new StringBuilder(""); foreach (var item in items) { var content = item.Replace(AbpAccordionParentIdPlaceholder, HtmlGenerator.Encode(TagHelper.Id)); - html.AppendLine( - "
    " + Environment.NewLine + - content - + "
    " + Environment.NewLine - ); - } + var wrapper = new TagBuilder("div"); + wrapper.AddCssClass("card"); + wrapper.InnerHtml.AppendHtml(content); - return html.ToString(); + output.Content.AppendHtml(wrapper); + } } protected virtual List InitilizeFormGroupContentsContext(TagHelperContext context, TagHelperOutput output) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index 58a88c676f..f71f8c030f 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -1,12 +1,13 @@ -using System; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc.TagHelpers; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Razor.TagHelpers; +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Text.Encodings.Web; using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc.TagHelpers; -using Microsoft.AspNetCore.Mvc.ViewFeatures; -using Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; @@ -249,7 +250,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { if (IsOutputHidden(inputTag) || TagHelper.SuppressLabel) { - return ""; + return string.Empty; } if (string.IsNullOrEmpty(TagHelper.Label)) @@ -257,11 +258,16 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return await GetLabelAsHtmlUsingTagHelperAsync(context, output, isCheckbox) + GetRequiredSymbol(context, output); } - var checkboxClass = isCheckbox ? "class=\"custom-control-label\" " : ""; + var label = new TagBuilder("label"); + label.Attributes.Add("for", GetIdAttributeValue(inputTag)); + label.InnerHtml.Append(TagHelper.Label); + + if (isCheckbox) + { + label.AddCssClass("custom-control-label"); + } - return "" + GetRequiredSymbol(context, output); + return RenderHtml(label); } protected virtual string GetRequiredSymbol(TagHelperContext context, TagHelperOutput output) @@ -308,9 +314,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form var idAttr = inputTag.Attributes.FirstOrDefault(a => a.Name == "id"); var localizedText = _tagHelperLocalizer.GetLocalizedText(text, TagHelper.AspFor.ModelExplorer); - return "" + - localizedText + - ""; + var small = new TagBuilder("small"); + small.Attributes.Add("id", idAttr?.Value?.ToString() + "InfoText"); + small.AddCssClass("form-text text-muted"); + + return RenderHtml(small); } protected virtual async Task GetLabelAsHtmlUsingTagHelperAsync(TagHelperContext context, TagHelperOutput output, bool isCheckbox) @@ -426,11 +434,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return inputTag.Attributes.Any(a => a.Name.ToLowerInvariant() == "type" && a.Value.ToString().ToLowerInvariant() == "hidden"); } - protected virtual string GetIdAttributeAsString(TagHelperOutput inputTag) + protected virtual string GetIdAttributeValue(TagHelperOutput inputTag) { var idAttr = inputTag.Attributes.FirstOrDefault(a => a.Name == "id"); - return idAttr != null ? "for=\"" + idAttr.Value + "\"" : ""; + return idAttr != null ? idAttr.Value.ToString() : string.Empty; } protected virtual void AddGroupToFormGroupContents(TagHelperContext context, string propertyName, string html, int order, out bool suppress) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs index bcfa5bd7d1..f3873e3d2e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs @@ -1,12 +1,12 @@ +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.Extensions.Localization; using System; using System.Collections.Generic; using System.Linq; using System.Reflection; using System.Text; -using Microsoft.AspNetCore.Mvc.Rendering; -using Microsoft.AspNetCore.Mvc.ViewFeatures; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Microsoft.Extensions.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form @@ -53,15 +53,35 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form var inlineClass = (TagHelper.Inline ?? false) ? " custom-control-inline" : ""; var id = TagHelper.AspFor.Name + "Radio" + selectItem.Value; var name = TagHelper.AspFor.Name; - var selected = selectItem.Selected ? " checked=\"checked\"" : ""; - var disabled = (TagHelper.Disabled??false) ? " disabled" : ""; - var htmlPart = "
    \r\n" + - " \r\n" + - " \r\n" + - "
    "; + var input = new TagBuilder("input"); + input.AddCssClass("custom-control-input"); + input.Attributes.Add("type", "radio"); + input.Attributes.Add("id", id); + input.Attributes.Add("name", name); + input.Attributes.Add("value", selectItem.Value); + + if (selectItem.Selected) + { + input.Attributes.Add("checked", "checked"); + } + + if (TagHelper.Disabled ?? false) + { + input.Attributes.Add("disabled", "disabled"); + } + + var label = new TagBuilder("label"); + label.AddCssClass("custom-control-label"); + label.Attributes.Add("for", id); + label.InnerHtml.Append(selectItem.Text); + + var wrapper = new TagBuilder("div"); + wrapper.AddCssClass("custom-control custom-radio" + inlineClass); + wrapper.InnerHtml.AppendHtml(input); + wrapper.InnerHtml.AppendHtml(label); - html.AppendLine(htmlPart); + html.AppendLine(RenderHtml(wrapper)); } return html.ToString(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index 21f6c498a9..b5ca866b7a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -1,20 +1,18 @@ -using System; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc.TagHelpers; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.Extensions.Localization; +using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Linq.Dynamic.Core; using System.Text.Encodings.Web; using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc.Rendering; -using Microsoft.AspNetCore.Mvc.TagHelpers; -using Microsoft.AspNetCore.Mvc.ViewFeatures; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Microsoft.Extensions.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; -using Volo.Abp.DynamicProxy; using Volo.Abp.Localization; -using Volo.Abp.Reflection; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { @@ -140,7 +138,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form { if (!string.IsNullOrEmpty(TagHelper.Label)) { - return "" + GetRequiredSymbol(context, output); + var label = new TagBuilder("label"); + label.Attributes.Add("for", GetIdAttributeValue(selectTag)); + label.InnerHtml.Append(TagHelper.Label); + + return RenderHtml(label) + GetRequiredSymbol(context, output); } return await GetLabelAsHtmlUsingTagHelperAsync(context, output) + GetRequiredSymbol(context, output); @@ -199,9 +201,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form var idAttr = inputTag.Attributes.FirstOrDefault(a => a.Name == "id"); var localizedText = _tagHelperLocalizer.GetLocalizedText(text, TagHelper.AspFor.ModelExplorer); - return "" + - localizedText + - ""; + var small = new TagBuilder("small"); + small.Attributes.Add("id", idAttr?.Value?.ToString() + "InfoText"); + small.AddCssClass("form-text text-muted"); + + return RenderHtml(small); } protected virtual List GetSelectItemsFromEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer) @@ -338,11 +342,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form } } - protected virtual string GetIdAttributeAsString(TagHelperOutput inputTag) + protected virtual string GetIdAttributeValue(TagHelperOutput inputTag) { var idAttr = inputTag.Attributes.FirstOrDefault(a => a.Name == "id"); - return idAttr != null ? "for=\"" + idAttr.Value + "\"" : ""; + return idAttr != null ? idAttr.Value.ToString() : string.Empty; } protected virtual void AddGroupToFormGroupContents(TagHelperContext context, string propertyName, string html, int order, out bool suppress) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs index d87d0d681c..d59de3bbcd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs @@ -33,26 +33,26 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal switch (TagHelper.Buttons) { case AbpModalButtons.Cancel: - output.PostContent.AppendHtml(GetCancelButton()); + AddCancelButton(context, output); break; case AbpModalButtons.Close: - output.PostContent.AppendHtml(GetCloseButton()); + AddCloseButton(context, output); break; case AbpModalButtons.Save: - output.PostContent.AppendHtml(GetSaveButton()); + AddSaveButton(context, output); break; case AbpModalButtons.Save | AbpModalButtons.Cancel: - output.PostContent.AppendHtml(GetSaveButton()); - output.PostContent.AppendHtml(GetCancelButton()); + AddSaveButton(context, output); + AddCancelButton(context, output); break; case AbpModalButtons.Save | AbpModalButtons.Close: - output.PostContent.AppendHtml(GetSaveButton()); - output.PostContent.AppendHtml(GetCloseButton()); + AddSaveButton(context, output); + AddCloseButton(context, output); break; } } - protected virtual string GetSaveButton() + protected virtual void AddSaveButton(TagHelperContext context, TagHelperOutput output) { var icon = new TagBuilder("i"); icon.AddCssClass("fa"); @@ -69,10 +69,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal button.InnerHtml.AppendHtml(icon); button.InnerHtml.AppendHtml(span); - return RenderHtml(button); + output.PostContent.AppendHtml(button); } - protected virtual string GetCloseButton() + protected virtual void AddCloseButton(TagHelperContext context, TagHelperOutput output) { var button = new TagBuilder("button"); button.Attributes.Add("type", "button"); @@ -81,10 +81,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal button.AddCssClass("btn-secondary"); button.InnerHtml.Append(_localizer["Close"]); - return RenderHtml(button); + output.PostContent.AppendHtml(button); } - protected virtual string GetCancelButton() + protected virtual void AddCancelButton(TagHelperContext context, TagHelperOutput output) { var button = new TagBuilder("button"); button.Attributes.Add("type", "button"); @@ -93,7 +93,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal button.AddCssClass("btn-secondary"); button.InnerHtml.Append(_localizer["Cancel"]); - return RenderHtml(button); + output.PostContent.AppendHtml(button); } protected virtual void ProcessButtonsAlignment(TagHelperOutput output) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs index 8b4118d52b..a9d13b795a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs @@ -1,38 +1,52 @@ -using Microsoft.AspNetCore.Mvc.Rendering; +using Localization.Resources.AbpUi; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; -using System.Text; +using Microsoft.Extensions.Localization; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { public class AbpModalHeaderTagHelperService : AbpTagHelperService { + protected IStringLocalizer L { get; } + + public AbpModalHeaderTagHelperService(IStringLocalizer localizer) + { + L = localizer; + } + public override void Process(TagHelperContext context, TagHelperOutput output) { output.TagName = "div"; output.Attributes.AddClass("modal-header"); - output.PreContent.SetHtmlContent(CreatePreContent()); - output.PostContent.SetHtmlContent(CreatePostContent()); + + AddTitle(context, output); + AddCloseButton(context, output); } - protected virtual string CreatePreContent() + protected virtual void AddTitle(TagHelperContext context, TagHelperOutput output) { var title = new TagBuilder("h5"); title.AddCssClass("modal-title"); title.InnerHtml.Append(TagHelper.Title); - return RenderHtml(title); + output.PreContent.SetHtmlContent(title); } - protected virtual string CreatePostContent() + protected virtual void AddCloseButton(TagHelperContext context, TagHelperOutput output) { - var sb = new StringBuilder(); - - sb.AppendLine(" "); + var span = new TagBuilder("span"); + span.Attributes.Add("aria-hidden", "true"); + span.InnerHtml.AppendHtml("×"); + + var button = new TagBuilder("button"); + button.AddCssClass("close"); + button.Attributes.Add("type", "button"); + button.Attributes.Add("data-dismiss", "modal"); + button.Attributes.Add("aria-label", L["Close"].Value); + button.InnerHtml.AppendHtml(span); - return sb.ToString(); + output.PostContent.AppendHtml(button); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs index a314322dfe..56c24ea384 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs @@ -1,40 +1,53 @@ -using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; -using System.Linq; using System.Text; - +using System.Threading.Tasks; + namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { public class AbpModalTagHelperService : AbpTagHelperService - { - protected IHtmlGenerator HtmlGenerator { get; } - - public AbpModalTagHelperService(IHtmlGenerator htmlGenerator) - { - HtmlGenerator = htmlGenerator; - } - - public override void Process(TagHelperContext context, TagHelperOutput output) + { + public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { output.TagName = null; - output.PreContent.SetHtmlContent(CreatePreContent(output)); - output.PostContent.SetHtmlContent(CreatePostContent()); - } - protected virtual string CreatePreContent(TagHelperOutput output) - { - var sb = new StringBuilder(); + var childContent = await output.GetChildContentAsync(); - var attritubutes = output.Attributes.Select(a => " " + HtmlGenerator.Encode(a.Name) + "=\"" + HtmlGenerator.Encode(a.Value) + "\" ").ToList(); - var attritubutesAsJoin = string.Join(" ", attritubutes.ToArray()); - - sb.AppendLine("
    "); - sb.AppendLine("
    "); - sb.AppendLine("
    "); - - return sb.ToString(); + Process(context, output, childContent); } + protected virtual void Process(TagHelperContext context, TagHelperOutput output, TagHelperContent content) + { + var modalContent = new TagBuilder("div"); + modalContent.AddCssClass(GetModalContentClasses()); + modalContent.InnerHtml.AppendHtml(content); + + var modalDialog = new TagBuilder("div"); + modalDialog.AddCssClass(GetModalDialogClasses()); + modalDialog.Attributes.Add("role", "document"); + modalDialog.InnerHtml.AppendHtml(modalContent); + + var modal = new TagBuilder("div"); + modal.AddCssClass(GetModalClasses()); + modal.Attributes.Add("tabindex", "-1"); + modal.Attributes.Add("role", "dialog"); + modal.Attributes.Add("aria-hidden", "true"); + + foreach (var attr in output.Attributes) + { + modal.Attributes.Add(attr.Name, attr.Value.ToString()); + } + + if (TagHelper.Static == true) + { + modal.Attributes.Add("data-backdrop", "static"); + } + + modal.InnerHtml.AppendHtml(modalDialog); + + output.Content.SetHtmlContent(modal); + } + protected virtual string GetModalClasses() { return "modal fade"; @@ -63,25 +76,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { return "modal-content"; } - - protected virtual string GetDataAttributes() - { - if (TagHelper.Static == true) - { - return "data-backdrop=\"static\" "; - } - return string.Empty; - } - - protected virtual string CreatePostContent() - { - var sb = new StringBuilder(); - - sb.AppendLine("
    "); - sb.AppendLine("
    "); - sb.AppendLine("
    "); - - return sb.ToString(); - } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs index 18e058ab7c..1d13437d8a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; using System.Linq; @@ -28,38 +29,51 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover SetDisabled(context, output); } } + protected virtual void SetDisabled(TagHelperContext context, TagHelperOutput output) - { - var triggerAsHtml = TagHelper.Dismissible ?? false ? "data-trigger=\"focus\" " : ""; + { + var triggerValue = TagHelper.Dismissible ?? false ? "focus" : ""; if (TagHelper.Hoverable ?? false) { - if (triggerAsHtml.Contains("focus")) + if (triggerValue.Contains("focus")) { - triggerAsHtml = triggerAsHtml.Replace("focus", "focus hover"); + triggerValue = triggerValue.Replace("focus", "focus hover"); } else { - triggerAsHtml = "data-trigger=\"hover\" "; + triggerValue = "hover"; } - } - var dataPlacementAsHtml = "data-placement=\"" + GetDirectory().ToString().ToLowerInvariant() + "\" "; - + } + + var dataPlacement = GetDirectory().ToString().ToLowerInvariant(); // data-placement="default" with data-trigger="focus" causes Cannot read property 'indexOf' of undefined at computeAutoPlacement(bootstrap.bundle.js?_v=637146714627330435:2185) error if (IsDismissibleOrHoverable() && GetDirectory() == PopoverDirectory.Default) { //dataPlacementAsHtml = string.Empty; //bootstrap default placement is right, abp's is top. - dataPlacementAsHtml = dataPlacementAsHtml.Replace("default", "top"); + dataPlacement = dataPlacement.Replace("default", "top"); } + var titleAttribute = output.Attributes.FirstOrDefault(at => at.Name == "title"); - var titleAsHtml = titleAttribute == null ? "" : "title=\"" + HtmlGenerator.Encode(titleAttribute.Value) + "\" "; - var preElementHtml = ""; - var postElementHtml = ""; - output.PreElement.SetHtmlContent(preElementHtml); - output.PostElement.SetHtmlContent(postElementHtml); + var span = new TagBuilder("span"); + span.AddCssClass("d-inline-block"); + span.Attributes.Add("tabindex", "0"); + span.Attributes.Add("data-toggle", "popover"); + span.Attributes.Add("data-content", GetDataContent()); + span.Attributes.Add("data-trigger", triggerValue); + span.Attributes.Add("data-placement", dataPlacement); + + if (titleAttribute != null) + { + span.Attributes.Add("title", titleAttribute.Value.ToString()); + } + + output.PreElement.SetHtmlContent(span.RenderStartTag()); + output.PostElement.SetHtmlContent(span.RenderEndTag()); output.Attributes.Add("style", "pointer-events: none;"); } + protected virtual void SetDataTriggerIfDismissible(TagHelperContext context, TagHelperOutput output) { if (TagHelper.Dismissible ?? false) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs index a28e0c7057..404354c8b2 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs @@ -1,9 +1,11 @@ -using System; +using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Razor.TagHelpers; +using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; -using Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Grid; @@ -11,6 +13,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab { public class AbpTabsTagHelperService : AbpTagHelperService { + protected IHtmlGenerator HtmlGenerator { get; } + + public AbpTabsTagHelperService(IHtmlGenerator htmlGenerator) + { + HtmlGenerator = htmlGenerator; + } + public override async Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { SetRandomNameIfNotProvided(); @@ -61,31 +70,34 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab var navClass = TagHelper.TabStyle == TabStyle.Tab ? " nav-tabs" : " nav-pills"; var verticalClass = GetVerticalPillClassIfVertical(); - var surroundedHeaders = "
      " + Environment.NewLine + - headers + - "
    "; + var listElement = new TagBuilder("ul"); + listElement.AddCssClass("nav" + verticalClass + navClass); + listElement.Attributes.Add("id", id); + listElement.Attributes.Add("role", "tablist"); + listElement.InnerHtml.AppendHtml(headers); - return surroundedHeaders; + return RenderHtml(listElement); } protected virtual string SurroundContents(TagHelperContext context, TagHelperOutput output, string contents) { var id = TagHelper.Name + "Content"; - var surroundedContents = "
    " + Environment.NewLine + - contents + - "
    "; + var wrapper = new TagBuilder("div"); + wrapper.AddCssClass("tab-content"); + wrapper.Attributes.Add("id", id); + wrapper.InnerHtml.AppendHtml(contents); - return surroundedContents; + return RenderHtml(wrapper); } protected virtual string PlaceInsideColumn(string contents, int columnSize) { - var surroundedContents = "
    " + Environment.NewLine + - contents + - "
    "; + var wrapper = new TagBuilder("div"); + wrapper.AddCssClass("col-md-" + columnSize); + wrapper.InnerHtml.AppendHtml(contents); - return surroundedContents; + return RenderHtml(wrapper); } protected virtual void PlaceInsideRow(TagHelperOutput output) @@ -213,7 +225,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab protected virtual string SetTabItemNameIfNotProvided(string content, int index) { - return content.Replace(TabItemNamePlaceHolder, TagHelper.Name + "_" + index); + return content.Replace(TabItemNamePlaceHolder, HtmlGenerator.Encode(TagHelper.Name) + "_" + index); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tooltip/AbpTooltipTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tooltip/AbpTooltipTagHelperService.cs index 4c14b62de3..acef4a0951 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tooltip/AbpTooltipTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tooltip/AbpTooltipTagHelperService.cs @@ -1,19 +1,11 @@ -using System; -using System.Linq; -using Microsoft.AspNetCore.Mvc.ViewFeatures; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; +using System.Linq; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tooltip { public class AbpTooltipTagHelperService : AbpTagHelperService { - protected IHtmlGenerator HtmlGenerator { get; } - - public AbpTooltipTagHelperService(IHtmlGenerator htmlGenerator) - { - HtmlGenerator = htmlGenerator; - } - public override void Process(TagHelperContext context, TagHelperOutput output) { if (IsButtonDisabled(context, output)) @@ -32,12 +24,16 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tooltip var directory = GetDirectory() != TooltipDirectory.Default ? GetDirectory() : TooltipDirectory.Top; output.Attributes.Add("data-placement", directory.ToString().ToLowerInvariant()); - output.PreElement.SetHtmlContent( - "" + Environment.NewLine); + var span = new TagBuilder("span"); + span.AddCssClass("d-inline-block"); + span.Attributes.Add("tabindex", "0"); + span.Attributes.Add("data-toggle", "tooltip"); + span.Attributes.Add("data-placement", directory.ToString().ToLowerInvariant()); + span.Attributes.Add("title", GetTitle()); + + output.PreElement.SetHtmlContent(span.RenderStartTag()); - output.PostElement.SetHtmlContent(Environment.NewLine + ""); + output.PostElement.SetHtmlContent(span.RenderEndTag()); output.Attributes.Add("style", "pointer-events: none;"); } From 4ec1281b00ffdda2893f2fd1f88492540d4c5d72 Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Thu, 10 Sep 2020 10:41:43 +0200 Subject: [PATCH 005/143] reverted some changes to not break class signatures --- .../AbpBreadcrumbTagHelperService.cs | 22 +++-- .../Carousel/AbpCarouselTagHelperService.cs | 2 - .../Collapse/AbpAccordionTagHelperService.cs | 4 +- .../Form/AbpInputTagHelperService.cs | 7 ++ .../Form/AbpSelectTagHelperService.cs | 7 ++ .../Modal/AbpModalHeaderTagHelperService.cs | 13 ++- .../Modal/AbpModalTagHelperService.cs | 80 +++++++++++++------ 7 files changed, 92 insertions(+), 43 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs index c28b7c3d71..59a45ec036 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs @@ -17,24 +17,30 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb await output.GetChildContentAsync(); - ProcessItems(context, output, list); + var listTagBulder = GetOlTagBuilder(); + + SetInnerList(context, output, list, listTagBulder); + + output.Content.SetHtmlContent(listTagBulder); } - protected virtual void ProcessItems(TagHelperContext context, TagHelperOutput output, List list) + protected virtual TagBuilder GetOlTagBuilder() { - SetLastOneActiveIfThereIsNotAny(context, output, list); + var builder = new TagBuilder("ol"); + builder.AddCssClass("breadcrumb"); + return builder; + } - var listElement = new TagBuilder("ol"); - listElement.AddCssClass("breadcrumb"); + protected virtual void SetInnerList(TagHelperContext context, TagHelperOutput output, List list, TagBuilder listTagBuilder) + { + SetLastOneActiveIfThereIsNotAny(context, output, list); foreach (var breadcrumbItem in list) { var htmlPart = SetActiveClassIfActiveAndGetHtml(breadcrumbItem); - listElement.InnerHtml.AppendHtml(htmlPart); + listTagBuilder.InnerHtml.AppendHtml(htmlPart); } - - output.Content.SetHtmlContent(listElement); } protected virtual List InitilizeFormGroupContentsContext(TagHelperContext context, TagHelperOutput output) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs index f6c5d841fd..c3672db7f5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselTagHelperService.cs @@ -31,8 +31,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel await output.GetChildContentAsync(); SetOneItemAsActive(context, output, itemList); - - SetItems(context, output, itemList); SetControls(context, output, itemList); SetIndicators(context, output, itemList); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs index 7a8e0b0571..c7f93e87cc 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionTagHelperService.cs @@ -30,10 +30,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse await output.GetChildContentAsync(); - ProcessItems(context, output, items); + SetContent(context, output, items); } - protected virtual void ProcessItems(TagHelperContext context, TagHelperOutput output, List items) + protected virtual void SetContent(TagHelperContext context, TagHelperOutput output, List items) { foreach (var item in items) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index f71f8c030f..e629572658 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -441,6 +441,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return idAttr != null ? idAttr.Value.ToString() : string.Empty; } + protected virtual string GetIdAttributeAsString(TagHelperOutput inputTag) + { + var id = GetIdAttributeValue(inputTag); + + return !string.IsNullOrWhiteSpace(id) ? "for=\"" + id + "\"" : string.Empty; + } + protected virtual void AddGroupToFormGroupContents(TagHelperContext context, string propertyName, string html, int order, out bool suppress) { var list = context.GetValue>(FormGroupContents) ?? new List(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index b5ca866b7a..d978fe5f5e 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -349,6 +349,13 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form return idAttr != null ? idAttr.Value.ToString() : string.Empty; } + protected virtual string GetIdAttributeAsString(TagHelperOutput inputTag) + { + var id = GetIdAttributeValue(inputTag); + + return !string.IsNullOrWhiteSpace(id) ? "for=\"" + id + "\"" : string.Empty; + } + protected virtual void AddGroupToFormGroupContents(TagHelperContext context, string propertyName, string html, int order, out bool suppress) { var list = context.GetValue>(FormGroupContents) ?? new List(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs index a9d13b795a..7ee1fdd0e9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs @@ -19,21 +19,20 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { output.TagName = "div"; output.Attributes.AddClass("modal-header"); - - AddTitle(context, output); - AddCloseButton(context, output); + output.PreContent.SetHtmlContent(CreatePreContent()); + output.PostContent.SetHtmlContent(CreatePostContent()); } - protected virtual void AddTitle(TagHelperContext context, TagHelperOutput output) + protected virtual string CreatePreContent() { var title = new TagBuilder("h5"); title.AddCssClass("modal-title"); title.InnerHtml.Append(TagHelper.Title); - output.PreContent.SetHtmlContent(title); + return RenderHtml(title); } - protected virtual void AddCloseButton(TagHelperContext context, TagHelperOutput output) + protected virtual string CreatePostContent() { var span = new TagBuilder("span"); span.Attributes.Add("aria-hidden", "true"); @@ -46,7 +45,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal button.Attributes.Add("aria-label", L["Close"].Value); button.InnerHtml.AppendHtml(span); - output.PostContent.AppendHtml(button); + return RenderHtml(button); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs index 56c24ea384..78d664b562 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalTagHelperService.cs @@ -1,4 +1,5 @@ -using Microsoft.AspNetCore.Mvc.Rendering; +using Microsoft.AspNetCore.Html; +using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; using System.Text; using System.Threading.Tasks; @@ -13,40 +14,54 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal var childContent = await output.GetChildContentAsync(); - Process(context, output, childContent); + SetContent(context, output, childContent); } - protected virtual void Process(TagHelperContext context, TagHelperOutput output, TagHelperContent content) + protected virtual void SetContent(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent) { - var modalContent = new TagBuilder("div"); - modalContent.AddCssClass(GetModalContentClasses()); - modalContent.InnerHtml.AppendHtml(content); + var modalContent = GetModalContentElement(context, output, childContent); + var modalDialog = GetModalDialogElement(context, output, modalContent); + var modal = GetModal(context, output, modalDialog); - var modalDialog = new TagBuilder("div"); - modalDialog.AddCssClass(GetModalDialogClasses()); - modalDialog.Attributes.Add("role", "document"); - modalDialog.InnerHtml.AppendHtml(modalContent); - - var modal = new TagBuilder("div"); - modal.AddCssClass(GetModalClasses()); - modal.Attributes.Add("tabindex", "-1"); - modal.Attributes.Add("role", "dialog"); - modal.Attributes.Add("aria-hidden", "true"); + output.Content.SetHtmlContent(modal); + } + + protected virtual TagBuilder GetModalContentElement(TagHelperContext context, TagHelperOutput output, TagHelperContent childContent) + { + var element = new TagBuilder("div"); + element.AddCssClass(GetModalContentClasses()); + element.InnerHtml.SetHtmlContent(childContent); + return element; + } + + protected virtual TagBuilder GetModalDialogElement(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml) + { + var element = new TagBuilder("div"); + element.AddCssClass(GetModalDialogClasses()); + element.Attributes.Add("role", "document"); + element.InnerHtml.SetHtmlContent(innerHtml); + return element; + } + + protected virtual TagBuilder GetModal(TagHelperContext context, TagHelperOutput output, IHtmlContent innerHtml) + { + var element = new TagBuilder("div"); + element.AddCssClass(GetModalClasses()); + element.Attributes.Add("tabindex", "-1"); + element.Attributes.Add("role", "dialog"); + element.Attributes.Add("aria-hidden", "true"); foreach (var attr in output.Attributes) { - modal.Attributes.Add(attr.Name, attr.Value.ToString()); + element.Attributes.Add(attr.Name, attr.Value.ToString()); } - if (TagHelper.Static == true) - { - modal.Attributes.Add("data-backdrop", "static"); - } + SetDataAttributes(element); - modal.InnerHtml.AppendHtml(modalDialog); + element.InnerHtml.SetHtmlContent(innerHtml); - output.Content.SetHtmlContent(modal); - } + return element; + } protected virtual string GetModalClasses() { @@ -76,5 +91,22 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal { return "modal-content"; } + + protected virtual string GetDataAttributes() + { + if (TagHelper.Static == true) + { + return "data-backdrop=\"static\" "; + } + return string.Empty; + } + + protected virtual void SetDataAttributes(TagBuilder builder) + { + if (TagHelper.Static == true) + { + builder.Attributes.Add("data-backdrop", "static"); + } + } } } \ No newline at end of file From c9d18ab484cf96f7ba24e7d9fbff78b591b50770 Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Thu, 10 Sep 2020 15:09:34 +0200 Subject: [PATCH 006/143] reverted some changes to not break class signatures --- .../AbpBreadcrumbItemTagHelperService.cs | 19 ++--- .../Modal/AbpModalFooterTagHelperService.cs | 73 ++++++++++--------- 2 files changed, 47 insertions(+), 45 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs index 64f6db5657..97eef50e79 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs @@ -25,8 +25,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb var list = context.GetValue>(BreadcrumbItemsContent); - ProcessContent(context, output); - + output.Content.SetHtmlContent(GetInnerHtml(context, output)); + list.Add(new BreadcrumbItem { Html = output.Render(_encoder), @@ -36,21 +36,18 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb output.SuppressOutput(); } - protected virtual void ProcessContent(TagHelperContext context, TagHelperOutput output) + protected virtual string GetInnerHtml(TagHelperContext context, TagHelperOutput output) { if (string.IsNullOrWhiteSpace(TagHelper.Href)) { output.Attributes.Add("aria-current", "page"); - output.Content.Append(TagHelper.Title); + return _encoder.Encode(TagHelper.Title); } - else - { - var link = new TagBuilder("a"); - link.Attributes.Add("href", TagHelper.Href); - link.InnerHtml.Append(TagHelper.Title); - output.Content.AppendHtml(link); - } + var link = new TagBuilder("a"); + link.Attributes.Add("href", TagHelper.Href); + link.InnerHtml.Append(TagHelper.Title); + return RenderHtml(link); } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs index d59de3bbcd..fd0ee54e59 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Mvc.Rendering; using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.Extensions.Localization; +using System.Text; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal @@ -22,37 +23,41 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal if (TagHelper.Buttons != AbpModalButtons.None) { - ProcessButtons(context, output); + output.PostContent.SetHtmlContent(CreateContent()); } ProcessButtonsAlignment(output); } - protected virtual void ProcessButtons(TagHelperContext context, TagHelperOutput output) + protected virtual string CreateContent() { + var sb = new StringBuilder(); + switch (TagHelper.Buttons) { case AbpModalButtons.Cancel: - AddCancelButton(context, output); + sb.AppendLine(GetCancelButton()); break; case AbpModalButtons.Close: - AddCloseButton(context, output); + sb.AppendLine(GetCloseButton()); break; case AbpModalButtons.Save: - AddSaveButton(context, output); + sb.AppendLine(GetSaveButton()); break; case AbpModalButtons.Save | AbpModalButtons.Cancel: - AddSaveButton(context, output); - AddCancelButton(context, output); + sb.AppendLine(GetSaveButton()); + sb.AppendLine(GetCancelButton()); break; case AbpModalButtons.Save | AbpModalButtons.Close: - AddSaveButton(context, output); - AddCloseButton(context, output); + sb.AppendLine(GetSaveButton()); + sb.AppendLine(GetCloseButton()); break; } + + return sb.ToString(); } - protected virtual void AddSaveButton(TagHelperContext context, TagHelperOutput output) + protected virtual string GetSaveButton() { var icon = new TagBuilder("i"); icon.AddCssClass("fa"); @@ -61,39 +66,39 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal var span = new TagBuilder("span"); span.InnerHtml.Append(_localizer["Save"]); - var button = new TagBuilder("button"); - button.Attributes.Add("type", "submit"); - button.AddCssClass("btn"); - button.AddCssClass("btn-primary"); - button.Attributes.Add("data-busy-text", _localizer["SavingWithThreeDot"]); - button.InnerHtml.AppendHtml(icon); - button.InnerHtml.AppendHtml(span); + var element = new TagBuilder("button"); + element.Attributes.Add("type", "submit"); + element.AddCssClass("btn"); + element.AddCssClass("btn-primary"); + element.Attributes.Add("data-busy-text", _localizer["SavingWithThreeDot"]); + element.InnerHtml.AppendHtml(icon); + element.InnerHtml.AppendHtml(span); - output.PostContent.AppendHtml(button); + return RenderHtml(element); } - protected virtual void AddCloseButton(TagHelperContext context, TagHelperOutput output) + protected virtual string GetCloseButton() { - var button = new TagBuilder("button"); - button.Attributes.Add("type", "button"); - button.Attributes.Add("data-dismiss", "modal"); - button.AddCssClass("btn"); - button.AddCssClass("btn-secondary"); - button.InnerHtml.Append(_localizer["Close"]); + var element = new TagBuilder("button"); + element.Attributes.Add("type", "button"); + element.Attributes.Add("data-dismiss", "modal"); + element.AddCssClass("btn"); + element.AddCssClass("btn-secondary"); + element.InnerHtml.Append(_localizer["Close"]); - output.PostContent.AppendHtml(button); + return RenderHtml(element); } - protected virtual void AddCancelButton(TagHelperContext context, TagHelperOutput output) + protected virtual string GetCancelButton() { - var button = new TagBuilder("button"); - button.Attributes.Add("type", "button"); - button.Attributes.Add("data-dismiss", "modal"); - button.AddCssClass("btn"); - button.AddCssClass("btn-secondary"); - button.InnerHtml.Append(_localizer["Cancel"]); + var element = new TagBuilder("button"); + element.Attributes.Add("type", "button"); + element.Attributes.Add("data-dismiss", "modal"); + element.AddCssClass("btn"); + element.AddCssClass("btn-secondary"); + element.InnerHtml.Append(_localizer["Cancel"]); - output.PostContent.AppendHtml(button); + return RenderHtml(element); } protected virtual void ProcessButtonsAlignment(TagHelperOutput output) From 384cd057fde0c67281bd347796ab7e8260134d83 Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Thu, 10 Sep 2020 15:10:35 +0200 Subject: [PATCH 007/143] fixed encoding issue --- .../TagHelpers/Popover/AbpPopoverTagHelperService.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs index 1d13437d8a..5ada0dfbc5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelperService.cs @@ -2,7 +2,8 @@ using Microsoft.AspNetCore.Mvc.ViewFeatures; using Microsoft.AspNetCore.Razor.TagHelpers; using System.Linq; - +using System.Web; + namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover { public class AbpPopoverTagHelperService : AbpTagHelperService @@ -65,7 +66,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover if (titleAttribute != null) { - span.Attributes.Add("title", titleAttribute.Value.ToString()); + span.Attributes.Add("title", HttpUtility.HtmlDecode(titleAttribute.Value.ToString())); } output.PreElement.SetHtmlContent(span.RenderStartTag()); From f20fcb1de7a21a57f0444a92468023a5c30fae10 Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Fri, 11 Sep 2020 10:05:31 +0200 Subject: [PATCH 008/143] fixed encoding issue when using data uris --- .../TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs index 3d4d33eae3..c905ac5bed 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Razor.TagHelpers; using System.Collections.Generic; using System.Text.Encodings.Web; +using System.Web; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; @@ -44,7 +45,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel { var img = new TagBuilder("img"); img.AddCssClass("d-block w-100"); - img.Attributes.Add("src", TagHelper.Src); + img.Attributes.Add("src", HttpUtility.HtmlDecode(TagHelper.Src)); img.Attributes.Add("alt", TagHelper.Alt); output.Content.SetHtmlContent(img); From ce9e3a7af2f11109350e2fd661ee377069620892 Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Fri, 11 Sep 2020 10:05:59 +0200 Subject: [PATCH 009/143] fixed typo --- .../TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs index 59a45ec036..4b433ac495 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbTagHelperService.cs @@ -17,11 +17,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb await output.GetChildContentAsync(); - var listTagBulder = GetOlTagBuilder(); + var listTagBuilder = GetOlTagBuilder(); - SetInnerList(context, output, list, listTagBulder); + SetInnerList(context, output, list, listTagBuilder); - output.Content.SetHtmlContent(listTagBulder); + output.Content.SetHtmlContent(listTagBuilder); } protected virtual TagBuilder GetOlTagBuilder() From 0dfee1825dc674b7578e76f9aecd32c08d2dee4a Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Fri, 11 Sep 2020 14:46:05 +0200 Subject: [PATCH 010/143] fixed encoding issue --- .../datatables/datatables-extensions.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js index 8d85f6f6d8..f293ed3079 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js @@ -27,6 +27,10 @@ } }; + var appendEncoded = function ($element, unencoded) { + $element.append($('
    ').text(unencoded).html()); + }; + var _createDropdownItem = function (record, fieldItem) { var $li = $('
  • '); var $a = $(''); @@ -41,7 +45,7 @@ $a.append($("").addClass(fieldItem.iconClass + " mr-1")); } - $a.append(fieldItem.text); + appendEncoded($a, fieldItem.text); } if (fieldItem.action) { @@ -85,9 +89,9 @@ } if (field.text) { - $dropdownButton.append(field.text); + appendEncoded($dropdownButton, field.text); } else { - $dropdownButton.append(localize("DatatableActionDropdownDefaultText")); + appendEncoded($dropdownButton, localize("DatatableActionDropdownDefaultText")); } $dropdownButton From a725b4960f577b6a890cb3487a55f4a225f4674e Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Mon, 14 Sep 2020 09:36:58 +0200 Subject: [PATCH 011/143] escape html by default --- .../abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js index 01b29cdfd7..01d92e0cc6 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js @@ -12,6 +12,12 @@ /* NOTIFICATION *********************************************/ var showNotification = function (type, message, title, options) { + if (!options) { + options = {}; + } + if (options.escapeHtml === undefined) { + options.escapeHtml = true; + } toastr[type](message, title, options); }; From 7c89603ada349337a5cb206930c051982f781f29 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 16 Sep 2020 12:04:51 +0800 Subject: [PATCH 012/143] Use TagBuilderExtensions instead of RenderHtml. --- .../TagHelpers/AbpTagHelperService.cs | 23 +--- .../AbpBreadcrumbItemTagHelperService.cs | 4 +- .../AbpCarouselItemTagHelperService.cs | 5 +- .../AbpAccordionItemTagHelperService.cs | 4 +- .../Form/AbpInputTagHelperService.cs | 4 +- .../Form/AbpRadioInputTagHelperService.cs | 2 +- .../Form/AbpSelectTagHelperService.cs | 10 +- .../Modal/AbpModalFooterTagHelperService.cs | 122 +++++++++--------- .../Modal/AbpModalHeaderTagHelperService.cs | 6 +- .../Tab/AbpTabDropdownTagHelperService.cs | 4 +- .../Tab/AbpTabLinkTagHelperService.cs | 8 +- .../TagHelpers/Tab/AbpTabTagHelperService.cs | 8 +- .../TagHelpers/Tab/AbpTabsTagHelperService.cs | 10 +- .../TagHelpers/TagBuilderExtensions.cs | 23 ++++ 14 files changed, 118 insertions(+), 115 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/TagBuilderExtensions.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs index f70de7a364..b53b2b4d56 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/AbpTagHelperService.cs @@ -1,15 +1,5 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text.Encodings.Web; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Html; -using Microsoft.AspNetCore.Mvc.ViewFeatures; +using System.Threading.Tasks; using Microsoft.AspNetCore.Razor.TagHelpers; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form; -using Volo.Abp.Threading; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers { @@ -52,14 +42,5 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers Process(context, output); return Task.CompletedTask; } - - protected virtual string RenderHtml(IHtmlContent content) - { - using (var writer = new StringWriter()) - { - content.WriteTo(writer, HtmlEncoder.Default); - return writer.ToString(); - } - } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs index 97eef50e79..5f649db448 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Breadcrumb/AbpBreadcrumbItemTagHelperService.cs @@ -47,7 +47,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Breadcrumb var link = new TagBuilder("a"); link.Attributes.Add("href", TagHelper.Href); link.InnerHtml.Append(TagHelper.Title); - return RenderHtml(link); + return link.ToHtmlString(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs index c905ac5bed..d3736a384a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Carousel/AbpCarouselItemTagHelperService.cs @@ -2,7 +2,6 @@ using Microsoft.AspNetCore.Razor.TagHelpers; using System.Collections.Generic; using System.Text.Encodings.Web; -using System.Web; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Extensions; @@ -45,7 +44,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel { var img = new TagBuilder("img"); img.AddCssClass("d-block w-100"); - img.Attributes.Add("src", HttpUtility.HtmlDecode(TagHelper.Src)); + img.Attributes.Add("src", TagHelper.Src); img.Attributes.Add("alt", TagHelper.Alt); output.Content.SetHtmlContent(img); @@ -81,4 +80,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Carousel } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs index 358b9d3054..6e532cb71d 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Collapse/AbpAccordionItemTagHelperService.cs @@ -43,7 +43,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse header.Attributes.Add("id", GetHeadingId()); header.InnerHtml.AppendHtml(h5); - return RenderHtml(header); + return header.ToHtmlString(); } protected virtual string GetAccordionContentItem(TagHelperContext context, TagHelperOutput output, string content) @@ -61,7 +61,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Collapse wrapper.Attributes.Add("data-parent", "#" + AbpAccordionParentIdPlaceholder); wrapper.InnerHtml.AppendHtml(cardBody); - return RenderHtml(wrapper); + return wrapper.ToHtmlString(); } protected virtual string GetHeadingId() diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index e629572658..5bebab0257 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -267,7 +267,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form label.AddCssClass("custom-control-label"); } - return RenderHtml(label); + return label.ToHtmlString(); } protected virtual string GetRequiredSymbol(TagHelperContext context, TagHelperOutput output) @@ -318,7 +318,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form small.Attributes.Add("id", idAttr?.Value?.ToString() + "InfoText"); small.AddCssClass("form-text text-muted"); - return RenderHtml(small); + return small.ToHtmlString(); } protected virtual async Task GetLabelAsHtmlUsingTagHelperAsync(TagHelperContext context, TagHelperOutput output, bool isCheckbox) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs index f3873e3d2e..8d5c704830 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpRadioInputTagHelperService.cs @@ -81,7 +81,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form wrapper.InnerHtml.AppendHtml(input); wrapper.InnerHtml.AppendHtml(label); - html.AppendLine(RenderHtml(wrapper)); + html.AppendLine(wrapper.ToHtmlString()); } return html.ToString(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs index d978fe5f5e..017d58dc17 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpSelectTagHelperService.cs @@ -24,9 +24,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form private readonly IStringLocalizerFactory _stringLocalizerFactory; public AbpSelectTagHelperService( - IHtmlGenerator generator, - HtmlEncoder encoder, - IAbpTagHelperLocalizer tagHelperLocalizer, + IHtmlGenerator generator, + HtmlEncoder encoder, + IAbpTagHelperLocalizer tagHelperLocalizer, IStringLocalizerFactory stringLocalizerFactory) { _generator = generator; @@ -142,7 +142,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form label.Attributes.Add("for", GetIdAttributeValue(selectTag)); label.InnerHtml.Append(TagHelper.Label); - return RenderHtml(label) + GetRequiredSymbol(context, output); + return label.ToHtmlString() + GetRequiredSymbol(context, output); } return await GetLabelAsHtmlUsingTagHelperAsync(context, output) + GetRequiredSymbol(context, output); @@ -205,7 +205,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form small.Attributes.Add("id", idAttr?.Value?.ToString() + "InfoText"); small.AddCssClass("form-text text-muted"); - return RenderHtml(small); + return small.ToHtmlString(); } protected virtual List GetSelectItemsFromEnum(TagHelperContext context, TagHelperOutput output, ModelExplorer explorer) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs index fd0ee54e59..1bc6ab2f3a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalFooterTagHelperService.cs @@ -1,63 +1,63 @@ -using Localization.Resources.AbpUi; +using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Mvc.Rendering; -using Microsoft.AspNetCore.Razor.TagHelpers; -using Microsoft.Extensions.Localization; +using Microsoft.AspNetCore.Razor.TagHelpers; +using Microsoft.Extensions.Localization; using System.Text; -using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; - +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Microsoft.AspNetCore.Razor.TagHelpers; + namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal -{ - public class AbpModalFooterTagHelperService : AbpTagHelperService - { - private readonly IStringLocalizer _localizer; - - public AbpModalFooterTagHelperService(IStringLocalizer localizer) - { - _localizer = localizer; - } - - public override void Process(TagHelperContext context, TagHelperOutput output) - { - output.TagName = "div"; - output.Attributes.AddClass("modal-footer"); - - if (TagHelper.Buttons != AbpModalButtons.None) - { - output.PostContent.SetHtmlContent(CreateContent()); - } - - ProcessButtonsAlignment(output); +{ + public class AbpModalFooterTagHelperService : AbpTagHelperService + { + private readonly IStringLocalizer _localizer; + + public AbpModalFooterTagHelperService(IStringLocalizer localizer) + { + _localizer = localizer; + } + + public override void Process(TagHelperContext context, TagHelperOutput output) + { + output.TagName = "div"; + output.Attributes.AddClass("modal-footer"); + + if (TagHelper.Buttons != AbpModalButtons.None) + { + output.PostContent.SetHtmlContent(CreateContent()); + } + + ProcessButtonsAlignment(output); } - protected virtual string CreateContent() + protected virtual string CreateContent() { var sb = new StringBuilder(); - switch (TagHelper.Buttons) + switch (TagHelper.Buttons) { - case AbpModalButtons.Cancel: - sb.AppendLine(GetCancelButton()); - break; - case AbpModalButtons.Close: - sb.AppendLine(GetCloseButton()); - break; - case AbpModalButtons.Save: - sb.AppendLine(GetSaveButton()); - break; - case AbpModalButtons.Save | AbpModalButtons.Cancel: - sb.AppendLine(GetSaveButton()); - sb.AppendLine(GetCancelButton()); - break; - case AbpModalButtons.Save | AbpModalButtons.Close: - sb.AppendLine(GetSaveButton()); - sb.AppendLine(GetCloseButton()); + case AbpModalButtons.Cancel: + sb.AppendLine(GetCancelButton()); + break; + case AbpModalButtons.Close: + sb.AppendLine(GetCloseButton()); + break; + case AbpModalButtons.Save: + sb.AppendLine(GetSaveButton()); + break; + case AbpModalButtons.Save | AbpModalButtons.Cancel: + sb.AppendLine(GetSaveButton()); + sb.AppendLine(GetCancelButton()); + break; + case AbpModalButtons.Save | AbpModalButtons.Close: + sb.AppendLine(GetSaveButton()); + sb.AppendLine(GetCloseButton()); break; } return sb.ToString(); - } - - protected virtual string GetSaveButton() + } + + protected virtual string GetSaveButton() { var icon = new TagBuilder("i"); icon.AddCssClass("fa"); @@ -74,10 +74,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal element.InnerHtml.AppendHtml(icon); element.InnerHtml.AppendHtml(span); - return RenderHtml(element); - } - - protected virtual string GetCloseButton() + return element.ToHtmlString(); + } + + protected virtual string GetCloseButton() { var element = new TagBuilder("button"); element.Attributes.Add("type", "button"); @@ -86,10 +86,10 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal element.AddCssClass("btn-secondary"); element.InnerHtml.Append(_localizer["Close"]); - return RenderHtml(element); - } - - protected virtual string GetCancelButton() + return element.ToHtmlString(); + } + + protected virtual string GetCancelButton() { var element = new TagBuilder("button"); element.Attributes.Add("type", "button"); @@ -98,9 +98,9 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal element.AddCssClass("btn-secondary"); element.InnerHtml.Append(_localizer["Cancel"]); - return RenderHtml(element); - } - + return element.ToHtmlString(); + } + protected virtual void ProcessButtonsAlignment(TagHelperOutput output) { if (TagHelper.ButtonAlignment == ButtonsAlign.Default) @@ -108,6 +108,6 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal return; } output.Attributes.AddClass("justify-content-" + TagHelper.ButtonAlignment.ToString().ToLowerInvariant()); - } - } -} \ No newline at end of file + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs index 7ee1fdd0e9..7473245e96 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Modal/AbpModalHeaderTagHelperService.cs @@ -29,7 +29,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal title.AddCssClass("modal-title"); title.InnerHtml.Append(TagHelper.Title); - return RenderHtml(title); + return title.ToHtmlString(); } protected virtual string CreatePostContent() @@ -45,7 +45,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Modal button.Attributes.Add("aria-label", L["Close"].Value); button.InnerHtml.AppendHtml(span); - return RenderHtml(button); + return button.ToHtmlString(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs index f244a750b0..8746e4a48b 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabDropdownTagHelperService.cs @@ -51,7 +51,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab listItem.InnerHtml.AppendHtml(anchor); listItem.InnerHtml.AppendHtml(menu); - return RenderHtml(listItem); + return listItem.ToHtmlString(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs index cd98e689e0..1955127114 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabLinkTagHelperService.cs @@ -11,7 +11,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { SetPlaceholderForNameIfNotProvided(); - + var tabHeader = GetTabHeaderItem(context, output); var tabHeaderItems = context.GetValue>(TabItems); @@ -37,7 +37,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab anchor.Attributes.Add("href", href); anchor.InnerHtml.Append(title); - return RenderHtml(anchor); + return anchor.ToHtmlString(); } else { @@ -51,7 +51,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab listItem.AddCssClass("nav-item"); listItem.InnerHtml.AppendHtml(anchor); - return RenderHtml(listItem); + return listItem.ToHtmlString(); } } @@ -63,4 +63,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab } } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs index 337033193a..9080e49d83 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabTagHelperService.cs @@ -55,7 +55,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab anchor.InnerHtml.Append(title); - return RenderHtml(anchor); + return anchor.ToHtmlString(); } else { @@ -79,7 +79,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab listItem.AddCssClass("nav-item"); listItem.InnerHtml.AppendHtml(anchor); - return RenderHtml(listItem); + return listItem.ToHtmlString(); } } @@ -105,7 +105,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab wrapper.InnerHtml.AppendHtml(content); - return RenderHtml(wrapper); + return wrapper.ToHtmlString(); } protected virtual void SetPlaceholderForNameIfNotProvided() @@ -131,4 +131,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab .Select(a=> new TagHelperAttribute(a.Name.Substring(prefix.Length), a.Value)).ToList(); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs index 404354c8b2..92e50990a4 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Tab/AbpTabsTagHelperService.cs @@ -44,7 +44,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab } } - + protected virtual string CombineHeadersAndContents(TagHelperContext context, TagHelperOutput output, string headers, string contents) { var combined = new StringBuilder(); @@ -76,7 +76,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab listElement.Attributes.Add("role", "tablist"); listElement.InnerHtml.AppendHtml(headers); - return RenderHtml(listElement); + return listElement.ToHtmlString(); } protected virtual string SurroundContents(TagHelperContext context, TagHelperOutput output, string contents) @@ -88,7 +88,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab wrapper.Attributes.Add("id", id); wrapper.InnerHtml.AppendHtml(contents); - return RenderHtml(wrapper); + return wrapper.ToHtmlString(); } protected virtual string PlaceInsideColumn(string contents, int columnSize) @@ -97,7 +97,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab wrapper.AddCssClass("col-md-" + columnSize); wrapper.InnerHtml.AppendHtml(contents); - return RenderHtml(wrapper); + return wrapper.ToHtmlString(); } protected virtual void PlaceInsideRow(TagHelperOutput output) @@ -228,4 +228,4 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Tab return content.Replace(TabItemNamePlaceHolder, HtmlGenerator.Encode(TagHelper.Name) + "_" + index); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/TagBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/TagBuilderExtensions.cs new file mode 100644 index 0000000000..cab43b963b --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/TagBuilderExtensions.cs @@ -0,0 +1,23 @@ +using System.IO; +using System.Text.Encodings.Web; +using Microsoft.AspNetCore.Mvc.Rendering; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers +{ + internal static class TagBuilderExtensions + { + public static string ToHtmlString(this TagBuilder tagBuilder) + { + return tagBuilder.ToHtmlString(HtmlEncoder.Default); + } + + public static string ToHtmlString(this TagBuilder tagBuilder, HtmlEncoder htmlEncoder) + { + using (var writer = new StringWriter()) + { + tagBuilder.WriteTo(writer, htmlEncoder); + return writer.ToString(); + } + } + } +} From 6c10b33fef31c9b044c20f1a87ca663582ed0f3a Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Wed, 16 Sep 2020 08:54:10 +0200 Subject: [PATCH 013/143] revert a725b49 --- .../abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js index 01d92e0cc6..01b29cdfd7 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/toastr/abp-toastr.js @@ -12,12 +12,6 @@ /* NOTIFICATION *********************************************/ var showNotification = function (type, message, title, options) { - if (!options) { - options = {}; - } - if (options.escapeHtml === undefined) { - options.escapeHtml = true; - } toastr[type](message, title, options); }; From 3cd00f58f6f484bc69b8728f6a584f1d64826fd4 Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Wed, 16 Sep 2020 09:42:06 +0200 Subject: [PATCH 014/143] added `busy-text-is-html` attribute --- .../TagHelpers/Button/AbpButtonTagHelper.cs | 2 ++ .../Button/AbpButtonTagHelperService.cs | 16 ++++++++++++++-- .../jquery/jquery-extensions.js | 9 +++++++-- .../Pages/Components/Buttons.cshtml | 3 +++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelper.cs index 56143ea059..f7ffa84c39 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelper.cs @@ -19,6 +19,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button public FontIconType IconType { get; set; } = FontIconType.FontAwesome; + public bool BusyTextIsHtml { get; set; } + public AbpButtonTagHelper(AbpButtonTagHelperService service) : base(service) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperService.cs index 63a61fd1f2..fb74d5c1da 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Button/AbpButtonTagHelperService.cs @@ -1,13 +1,14 @@ -using System; -using Localization.Resources.AbpUi; +using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Razor.TagHelpers; using Microsoft.Extensions.Localization; +using System; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button { public class AbpButtonTagHelperService : AbpButtonTagHelperServiceBase { protected const string DataBusyTextAttributeName = "data-busy-text"; + protected const string DataBusyTextIsHtmlAttributeName = "data-busy-text-is-html"; protected IStringLocalizer L { get; } @@ -22,6 +23,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button output.TagName = "button"; AddType(context, output); AddBusyText(context, output); + AddBusyTextIsHtml(context, output); } protected virtual void AddType(TagHelperContext context, TagHelperOutput output) @@ -44,5 +46,15 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Button output.Attributes.SetAttribute(DataBusyTextAttributeName, busyText); } + + protected virtual void AddBusyTextIsHtml(TagHelperContext context, TagHelperOutput output) + { + if (!TagHelper.BusyTextIsHtml) + { + return; + } + + output.Attributes.SetAttribute(DataBusyTextIsHtmlAttributeName, TagHelper.BusyTextIsHtml.ToString().ToLower()); + } } } \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js index 645e7a7259..9c99a20acd 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/jquery/jquery-extensions.js @@ -35,7 +35,12 @@ //change text if ($buttonInnerSpan.length && $button.attr('data-busy-text')) { $button.data('buttonOriginalText', $buttonInnerSpan.html()); - $buttonInnerSpan.text($button.attr('data-busy-text')); + + if ($button.data('busy-text-is-html')) { + $buttonInnerSpan.html($button.attr('data-busy-text')); + } else { + $buttonInnerSpan.text($button.attr('data-busy-text')); + } } $button.addClass('button-busy'); @@ -55,7 +60,7 @@ //restore text if ($buttonInnerSpan.length && $button.data('buttonOriginalText')) { - $buttonInnerSpan.text($button.data('buttonOriginalText')); + $buttonInnerSpan.html($button.data('buttonOriginalText')); } $button.removeClass('button-busy'); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Buttons.cshtml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Buttons.cshtml index e58817d91c..c3aa9c0c92 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Buttons.cshtml +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Buttons.cshtml @@ -295,6 +295,9 @@
  • busy-text: Sets "data-busy-text" attribute. Default value is localization of "ProcessingWithThreeDot" string.
  • +
  • + busy-text-is-html: Sets "data-busy-is-html" attribute. Default value is "false". +
  • \ No newline at end of file From bfc8e1e878b9f1ef6e6fc0a8587724947187207d Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Wed, 16 Sep 2020 09:50:06 +0200 Subject: [PATCH 015/143] `appendEncoded` -> `htmlEncode` --- .../datatables/datatables-extensions.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js index f293ed3079..865eca6292 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared/wwwroot/libs/abp/aspnetcore-mvc-ui-theme-shared/datatables/datatables-extensions.js @@ -27,8 +27,8 @@ } }; - var appendEncoded = function ($element, unencoded) { - $element.append($('
    ').text(unencoded).html()); + var htmlEncode = function (html) { + return $('
    ').text(html).html(); }; var _createDropdownItem = function (record, fieldItem) { @@ -45,7 +45,7 @@ $a.append($("").addClass(fieldItem.iconClass + " mr-1")); } - appendEncoded($a, fieldItem.text); + $a.append(htmlEncode(fieldItem.text)); } if (fieldItem.action) { @@ -89,9 +89,9 @@ } if (field.text) { - appendEncoded($dropdownButton, field.text); + $dropdownButton.append(htmlEncode(fieldItem.text)); } else { - appendEncoded($dropdownButton, localize("DatatableActionDropdownDefaultText")); + $dropdownButton.append(htmlEncode(localize("DatatableActionDropdownDefaultText"))); } $dropdownButton From 7a1820c4130984db5ed5210cc580824f14fd14ed Mon Sep 17 00:00:00 2001 From: Maik Stegemann Date: Wed, 16 Sep 2020 10:46:54 +0200 Subject: [PATCH 016/143] fixed demo page --- .../Pages/Components/Carousel.cshtml | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Carousel.cshtml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Carousel.cshtml index 3763cd2601..4005b9d3d2 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Carousel.cshtml +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Carousel.cshtml @@ -2,6 +2,11 @@ @model Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo.Pages.Components.CarouselsModel @{ ViewData["Title"] = "Carousels"; + + var firstSlide = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjQwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgODAwIDQwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4jaG9sZGVyXzE2MzQzY2ZiNzEyIHRleHQgeyBmaWxsOiM0NDQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtZmFtaWx5OkhlbHZldGljYSwgbW9ub3NwYWNlO2ZvbnQtc2l6ZTo0MHB0IH0gPC9zdHlsZT48L2RlZnM+PGcgaWQ9ImhvbGRlcl8xNjM0M2NmYjcxMiI+PHJlY3Qgd2lkdGg9IjgwMCIgaGVpZ2h0PSI0MDAiIGZpbGw9IiM2NjYiPjwvcmVjdD48Zz48dGV4dCB4PSIyNDcuMjkxNjcxNzUyOTI5NyIgeT0iMjE4LjMiPkZpcnN0IHNsaWRlPC90ZXh0PjwvZz48L2c+PC9zdmc+"; + var secondSlide = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjQwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgODAwIDQwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4jaG9sZGVyXzE2MzQzY2ZiNzEyIHRleHQgeyBmaWxsOiM0NDQ7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtZmFtaWx5OkhlbHZldGljYSwgbW9ub3NwYWNlO2ZvbnQtc2l6ZTo0MHB0IH0gPC9zdHlsZT48L2RlZnM+PGcgaWQ9ImhvbGRlcl8xNjM0M2NmYjcxMiI+PHJlY3Qgd2lkdGg9IjgwMCIgaGVpZ2h0PSI0MDAiIGZpbGw9IiM2NjYiPjwvcmVjdD48Zz48dGV4dCB4PSIyNDcuMjkxNjcxNzUyOTI5NyIgeT0iMjE4LjMiPlNlY29uZCBzbGlkZTwvdGV4dD48L2c+PC9nPjwvc3ZnPg=="; + var thirdSlide = "data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iODAwIiBoZWlnaHQ9IjQwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgODAwIDQwMCIgcHJlc2VydmVBc3BlY3RSYXRpbz0ibm9uZSI+PGRlZnM+PHN0eWxlIHR5cGU9InRleHQvY3NzIj4jaG9sZGVyXzE2MzQzY2ZiNzE0IHRleHQgeyBmaWxsOiMzMzM7Zm9udC13ZWlnaHQ6bm9ybWFsO2ZvbnQtZmFtaWx5OkhlbHZldGljYSwgbW9ub3NwYWNlO2ZvbnQtc2l6ZTo0MHB0IH0gPC9zdHlsZT48L2RlZnM+PGcgaWQ9ImhvbGRlcl8xNjM0M2NmYjcxNCI+PHJlY3Qgd2lkdGg9IjgwMCIgaGVpZ2h0PSI0MDAiIGZpbGw9IiM1NTUiPjwvcmVjdD48Zz48dGV4dCB4PSIyNzYuOTc0OTk4NDc0MTIxMSIgeT0iMjE4LjMiPlRoaXJkIHNsaWRlPC90ZXh0PjwvZz48L2c+PC9zdmc+"; + } @section styles { @@ -31,11 +36,10 @@
    - - - - + + +
    @@ -76,9 +80,9 @@
    - - - + + +
    @@ -127,9 +131,9 @@
    - - - + + +
    @@ -183,7 +187,7 @@
    - +
    @@ -234,9 +238,9 @@
    - - - + + +
    From cc4ddb3962ed9bf8908d4b8a0f2a7606f95dcbe4 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 17 Sep 2020 07:00:39 +0300 Subject: [PATCH 017/143] feat: upgrade app template angular version to the latest #5389 --- templates/app/angular/e2e/tsconfig.json | 2 +- templates/app/angular/package.json | 36 +- templates/app/angular/tsconfig.app.json | 2 +- templates/app/angular/tsconfig.base.json | 26 - templates/app/angular/tsconfig.json | 39 +- templates/app/angular/tsconfig.spec.json | 2 +- templates/app/angular/yarn.lock | 1207 +++++++++++----------- 7 files changed, 650 insertions(+), 664 deletions(-) delete mode 100644 templates/app/angular/tsconfig.base.json diff --git a/templates/app/angular/e2e/tsconfig.json b/templates/app/angular/e2e/tsconfig.json index 6b87cc425b..c92199cfd6 100644 --- a/templates/app/angular/e2e/tsconfig.json +++ b/templates/app/angular/e2e/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../tsconfig.base.json", + "extends": "../tsconfig.json", "compilerOptions": { "outDir": "../out-tsc/e2e", "module": "commonjs", diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index 0afed93663..995333ef68 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -17,40 +17,40 @@ "@abp/ng.setting-management": "~3.1.2", "@abp/ng.tenant-management": "~3.1.2", "@abp/ng.theme.basic": "~3.1.2", - "@angular/animations": "~10.0.10", - "@angular/common": "~10.0.10", - "@angular/compiler": "~10.0.10", - "@angular/core": "~10.0.10", - "@angular/forms": "~10.0.10", - "@angular/platform-browser": "~10.0.10", - "@angular/platform-browser-dynamic": "~10.0.10", - "@angular/router": "~10.0.10", - "rxjs": "~6.5.4", + "@angular/animations": "~10.1.1", + "@angular/common": "~10.1.1", + "@angular/compiler": "~10.1.1", + "@angular/core": "~10.1.1", + "@angular/forms": "~10.1.1", + "@angular/platform-browser": "~10.1.1", + "@angular/platform-browser-dynamic": "~10.1.1", + "@angular/router": "~10.1.1", + "rxjs": "~6.6.0", "tslib": "^2.0.0", "zone.js": "~0.10.2" }, "devDependencies": { "@abp/ng.schematics": "~3.1.2", - "@angular-devkit/build-angular": "~0.1000.6", - "@angular-devkit/build-ng-packagr": "~0.1000.6", - "@angular/cli": "~10.0.6", - "@angular/compiler-cli": "~10.0.10", - "@angular/language-service": "~10.0.10", + "@angular-devkit/build-angular": "~0.1001.1", + "@angular-devkit/build-ng-packagr": "~0.1001.1", + "@angular/cli": "~10.1.1", + "@angular/compiler-cli": "~10.1.1", + "@angular/language-service": "~10.1.1", "@types/jasmine": "~3.5.0", "@types/jasminewd2": "~2.0.3", "@types/node": "^12.11.1", - "codelyzer": "^5.1.2", - "jasmine-core": "~3.5.0", + "codelyzer": "^6.0.0", + "jasmine-core": "~3.6.0", "jasmine-spec-reporter": "~5.0.0", "karma": "~5.0.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", - "karma-jasmine": "~3.3.0", + "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.5.0", "ng-packagr": "^10.0.0", "protractor": "~7.0.0", "ts-node": "~8.3.0", "tslint": "~6.1.0", - "typescript": "~3.9.5" + "typescript": "~4.0.2" } } diff --git a/templates/app/angular/tsconfig.app.json b/templates/app/angular/tsconfig.app.json index 81e534ed7b..29f5f5864e 100644 --- a/templates/app/angular/tsconfig.app.json +++ b/templates/app/angular/tsconfig.app.json @@ -1,5 +1,5 @@ { - "extends": "./tsconfig.base.json", + "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/app", "types": [] diff --git a/templates/app/angular/tsconfig.base.json b/templates/app/angular/tsconfig.base.json deleted file mode 100644 index 7a5bf82308..0000000000 --- a/templates/app/angular/tsconfig.base.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "module": "esnext", - "moduleResolution": "node", - "importHelpers": true, - "target": "es2015", - "typeRoots": ["node_modules/@types"], - "lib": ["es2018", "dom"], - "paths": { - "@proxy": ["src/app/proxy/index.ts"], - "@proxy/*": ["src/app/proxy/*"] - } - }, - "angularCompilerOptions": { - "fullTemplateTypeCheck": true, - "strictInjectionParameters": true, - "enableIvy": true - } -} diff --git a/templates/app/angular/tsconfig.json b/templates/app/angular/tsconfig.json index 7e00e70771..7a5bf82308 100644 --- a/templates/app/angular/tsconfig.json +++ b/templates/app/angular/tsconfig.json @@ -1,17 +1,26 @@ -/* - This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScript’s language server to improve development experience. - It is not intended to be used to perform a compilation. - - To learn more about this file see: https://angular.io/config/solution-tsconfig. -*/ { - "files": [], - "references": [ - { - "path": "./tsconfig.app.json" - }, - { - "path": "./tsconfig.spec.json" + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "module": "esnext", + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "typeRoots": ["node_modules/@types"], + "lib": ["es2018", "dom"], + "paths": { + "@proxy": ["src/app/proxy/index.ts"], + "@proxy/*": ["src/app/proxy/*"] } - ] -} \ No newline at end of file + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true, + "enableIvy": true + } +} diff --git a/templates/app/angular/tsconfig.spec.json b/templates/app/angular/tsconfig.spec.json index 1db2e6ee9c..6400fde7d5 100644 --- a/templates/app/angular/tsconfig.spec.json +++ b/templates/app/angular/tsconfig.spec.json @@ -1,5 +1,5 @@ { - "extends": "./tsconfig.base.json", + "extends": "./tsconfig.json", "compilerOptions": { "outDir": "./out-tsc/spec", "types": [ diff --git a/templates/app/angular/yarn.lock b/templates/app/angular/yarn.lock index 21aac67a2d..06f1ac1597 100644 --- a/templates/app/angular/yarn.lock +++ b/templates/app/angular/yarn.lock @@ -109,111 +109,112 @@ dependencies: just-compare "^1.3.0" -"@angular-devkit/architect@0.1000.8": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1000.8.tgz#dac11e07877145056ca6d22319f2a859bab6720d" - integrity sha512-2AqPbiEugtPxNz4MGhLh+imUVelhW9h1cdJs2AbxZosIxftPb5DNDQUSAwVmRGp4CtcXVrlvcDwc0f4Fw1aiIA== - dependencies: - "@angular-devkit/core" "10.0.8" - rxjs "6.5.5" - -"@angular-devkit/build-angular@~0.1000.6": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1000.8.tgz#28744499b59d85e6d16b27f3ee09e4d86c5770fe" - integrity sha512-wwDN2oadQvYPL7lDmvGsoWQjW++0ZnxWk1QVlABGhBSIs8Uxs26Hjd5YNUSsvJavBkqb1UZIOilqzb4dig5MIA== - dependencies: - "@angular-devkit/architect" "0.1000.8" - "@angular-devkit/build-optimizer" "0.1000.8" - "@angular-devkit/build-webpack" "0.1000.8" - "@angular-devkit/core" "10.0.8" - "@babel/core" "7.9.6" - "@babel/generator" "7.9.6" - "@babel/plugin-transform-runtime" "7.9.6" - "@babel/preset-env" "7.9.6" - "@babel/runtime" "7.9.6" - "@babel/template" "7.8.6" - "@jsdevtools/coverage-istanbul-loader" "3.0.3" - "@ngtools/webpack" "10.0.8" - ajv "6.12.3" - autoprefixer "9.8.0" +"@angular-devkit/architect@0.1001.1": + version "0.1001.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1001.1.tgz#ec17baf535160199dd7497a931ea60b185d82bfc" + integrity sha512-2jRO7L/k9gNxHVJxPoUMVvtf/KzsSXNT7akbAbb8CkBJxjx3NC3Y9NssPD9E78kyiXogO6IvkwyalBGrWvOPBQ== + dependencies: + "@angular-devkit/core" "10.1.1" + rxjs "6.6.2" + +"@angular-devkit/build-angular@~0.1001.1": + version "0.1001.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1001.1.tgz#b896f5f32defa2750ca166c39ce28c700a21ef73" + integrity sha512-61Ix8oXAdWfu2GSoD76n2vR2HxRYBoh5QrAqmxyMi9++0VrHw6myoVBXfeJ3PzdVkWy7oNMgFPCb3XQGTD73Ow== + dependencies: + "@angular-devkit/architect" "0.1001.1" + "@angular-devkit/build-optimizer" "0.1001.1" + "@angular-devkit/build-webpack" "0.1001.1" + "@angular-devkit/core" "10.1.1" + "@babel/core" "7.11.1" + "@babel/generator" "7.11.0" + "@babel/plugin-transform-runtime" "7.11.0" + "@babel/preset-env" "7.11.0" + "@babel/runtime" "7.11.2" + "@babel/template" "7.10.4" + "@jsdevtools/coverage-istanbul-loader" "3.0.5" + "@ngtools/webpack" "10.1.1" + autoprefixer "9.8.6" babel-loader "8.1.0" browserslist "^4.9.1" - cacache "15.0.3" + cacache "15.0.5" caniuse-lite "^1.0.30001032" circular-dependency-plugin "5.2.0" copy-webpack-plugin "6.0.3" core-js "3.6.4" - css-loader "3.5.3" + css-loader "4.2.2" cssnano "4.1.10" file-loader "6.0.0" find-cache-dir "3.3.1" glob "7.1.6" - jest-worker "26.0.0" + jest-worker "26.3.0" karma-source-map-support "1.4.0" - less-loader "6.1.0" - license-webpack-plugin "2.2.0" + less-loader "6.2.0" + license-webpack-plugin "2.3.0" loader-utils "2.0.0" - mini-css-extract-plugin "0.9.0" + mini-css-extract-plugin "0.10.0" minimatch "3.0.4" - open "7.0.4" - parse5 "4.0.0" + open "7.2.0" + parse5 "6.0.1" + parse5-htmlparser2-tree-adapter "6.0.1" pnp-webpack-plugin "1.6.4" - postcss "7.0.31" + postcss "7.0.32" postcss-import "12.0.1" postcss-loader "3.0.0" raw-loader "4.0.1" - regenerator-runtime "0.13.5" + regenerator-runtime "0.13.7" resolve-url-loader "3.1.1" rimraf "3.0.2" - rollup "2.10.9" - rxjs "6.5.5" - sass "1.26.5" - sass-loader "8.0.2" + rollup "2.26.5" + rxjs "6.6.2" + sass "1.26.10" + sass-loader "10.0.1" semver "7.3.2" source-map "0.7.3" - source-map-loader "1.0.0" + source-map-loader "1.0.2" source-map-support "0.5.19" speed-measure-webpack-plugin "1.3.3" style-loader "1.2.1" - stylus "0.54.7" + stylus "0.54.8" stylus-loader "3.0.2" - terser "4.7.0" - terser-webpack-plugin "3.0.1" + terser "5.3.0" + terser-webpack-plugin "4.1.0" tree-kill "1.2.2" - webpack "4.43.0" + webpack "4.44.1" webpack-dev-middleware "3.7.2" webpack-dev-server "3.11.0" webpack-merge "4.2.2" webpack-sources "1.4.3" webpack-subresource-integrity "1.4.1" - worker-plugin "4.0.3" + worker-plugin "5.0.0" -"@angular-devkit/build-ng-packagr@~0.1000.6": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.1000.8.tgz#092805975248203043f0fbaf7a723be90bcdcbf0" - integrity sha512-sif0JkCjghhtHpxFfb2fJ6MnlyJXxhaWxswxnFSNQd9uLEr101AC7Ep0aDRnSJ2JUoSk1nlZnVtDqYUYAYexWw== +"@angular-devkit/build-ng-packagr@~0.1001.1": + version "0.1001.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.1001.1.tgz#c200d780e8071ae42c481f525c4a5540bff845b5" + integrity sha512-KX5GuQvQypUpR+qF9qHzNC49GrHx6wsu+AoIily72xTU7+gri0pO2KxQ6aSQiGRENHtvfKYOxMUoeZUvlD2sBA== dependencies: - "@angular-devkit/architect" "0.1000.8" - rxjs "6.5.5" + "@angular-devkit/architect" "0.1001.1" + rxjs "6.6.2" -"@angular-devkit/build-optimizer@0.1000.8": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1000.8.tgz#55023cf9e16813cc01b255e99fabb92426eeb632" - integrity sha512-esODHuTGEEMx1SmLUq03VAMly8gZUd1vRuvZeKS5HqKwDg8ZzcI7/25BuuUSlyST+6BEdjo2gnmagQnG0VBdQw== +"@angular-devkit/build-optimizer@0.1001.1": + version "0.1001.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1001.1.tgz#9c765189c3ce62e361be5f77f03bb6648a9597e3" + integrity sha512-ZjIK0YuE1lQ5X1YM+WAxuuJ5g/g7F97YXlDXEo8wsfIia6dAW4gI7Q8f+lgoqxBwgmxuYEyd4DFHNZZqnH3smQ== dependencies: loader-utils "2.0.0" source-map "0.7.3" - tslib "2.0.0" + tslib "2.0.1" + typescript "4.0.2" webpack-sources "1.4.3" -"@angular-devkit/build-webpack@0.1000.8": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1000.8.tgz#048bd8e2db19b42cb3913dd2959dcd2589e5ec10" - integrity sha512-y/U+dV5N8W7KECncGSKQWoUH/DFNZCseczyl6LAd8bc0fMr8Z0TAIe8OXj+5CSRRdejWfRIxGtNWM+L2kTCU8A== +"@angular-devkit/build-webpack@0.1001.1": + version "0.1001.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1001.1.tgz#606e30fe170e3af29e2721b2d33c66956ec5f7b8" + integrity sha512-Qm8xhv/1WtAAwX10x6plji4cCnwX0jSmjAQUAkOlpz8iRxygqqKMHWn8BgeF3QxUuerA4kpnT0ym3c+biQIQCg== dependencies: - "@angular-devkit/architect" "0.1000.8" - "@angular-devkit/core" "10.0.8" - rxjs "6.5.5" + "@angular-devkit/architect" "0.1001.1" + "@angular-devkit/core" "10.1.1" + rxjs "6.6.2" "@angular-devkit/core@10.0.8", "@angular-devkit/core@~10.0.3": version "10.0.8" @@ -226,7 +227,27 @@ rxjs "6.5.5" source-map "0.7.3" -"@angular-devkit/schematics@10.0.8", "@angular-devkit/schematics@~10.0.3": +"@angular-devkit/core@10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.1.1.tgz#96e4f7af4ef17810f6ff87786c83841f466b4122" + integrity sha512-0ZmknL5I177JO+iOz2gDSqHtPK3zGGwyz4ix9IIu172eFRX53sdbl1vDiMikovyvZWx5fXqU3Vazf7CUeGA28w== + dependencies: + ajv "6.12.4" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.6.2" + source-map "0.7.3" + +"@angular-devkit/schematics@10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.1.1.tgz#70e3ff6c25047f4d97d3eb61912e5d1e245b022a" + integrity sha512-4UrBbDkuzGmBN1YDG3+GBJ21C+X29vxO0k2EDGrFFjQROsDeogeyWJoUP789v4JCCz9DHF2TRmdhQiEBctZXMg== + dependencies: + "@angular-devkit/core" "10.1.1" + ora "5.0.0" + rxjs "6.6.2" + +"@angular-devkit/schematics@~10.0.3": version "10.0.8" resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.0.8.tgz#6064d6323a1c9abc195e67ae4c88e373ce36b5e2" integrity sha512-p2PjvrExuzOe/azyOEcBeIgwZIk4D6VeLkJf/KVjhXOVu13pjIXHX7/qWl+IYnbtj3NZGHqXM5Cr8nxsJNIMpw== @@ -235,50 +256,50 @@ ora "4.0.4" rxjs "6.5.5" -"@angular/animations@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-10.0.14.tgz#8e7fa9b26c70cf8e67ec0cc943211eb3957dda8c" - integrity sha512-0BOGQOuaudIG0pq6FAnG55teKM7tEQZdIwdoOf0okhh9n0cFWSWRUjvUxWt25bWswlO+HxELyJioiRUvVSES4g== +"@angular/animations@~10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-10.1.1.tgz#5a2baa8fbf2d647f6c61d0547dd9ac266cb52ae0" + integrity sha512-acVxTTGzA5JEspFNyhZKyr/wgCTCDL13fzz9CxMdMY3vgqgy/PiqmMp54MBI37EqgEOCo+PBJSX9uXxF0HqHTw== dependencies: tslib "^2.0.0" -"@angular/cli@~10.0.6": - version "10.0.8" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-10.0.8.tgz#133f1ea23e622923fd5dae27f5689379cfacaad3" - integrity sha512-unTteffLepsFw7qQulHOLLyLqCpQMOaZo0WO4x6cQGcW2mc0WgwnwBW2JDYMx1U2434t/Q13LqYMPNYWyCGsog== +"@angular/cli@~10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-10.1.1.tgz#3d11ab26383b46af164afb05bb5c5cf0aa0df392" + integrity sha512-u1Dd2Qe4ShFFef8cehaHoEKOrWo6QONj7yJrlvIIyzcnXWUb3jQmyZoILTv759lRdYF0GrgBx5jCKxzok0jTww== dependencies: - "@angular-devkit/architect" "0.1000.8" - "@angular-devkit/core" "10.0.8" - "@angular-devkit/schematics" "10.0.8" - "@schematics/angular" "10.0.8" - "@schematics/update" "0.1000.8" + "@angular-devkit/architect" "0.1001.1" + "@angular-devkit/core" "10.1.1" + "@angular-devkit/schematics" "10.1.1" + "@schematics/angular" "10.1.1" + "@schematics/update" "0.1001.1" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.1" debug "4.1.1" ini "1.3.5" - inquirer "7.1.0" + inquirer "7.3.3" npm-package-arg "8.0.1" npm-pick-manifest "6.1.0" - open "7.0.4" + open "7.2.0" pacote "9.5.12" read-package-tree "5.3.1" rimraf "3.0.2" semver "7.3.2" symbol-observable "1.2.0" - universal-analytics "0.4.20" - uuid "8.1.0" + universal-analytics "0.4.23" + uuid "8.3.0" -"@angular/common@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-10.0.14.tgz#a08228323609a22559590f4295b26f247f7438f4" - integrity sha512-EOAuaMt2HwJF3DtIJ/ksHtnF8Pqh5K2rWISYLEs9R3WNaSGn74kbCODAT4pNhI8P22Ykl3H4FmQUgnDZ3uDAUg== +"@angular/common@~10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-10.1.1.tgz#4f0cdd97af623f58385598cb9eb0fdaa4a964a02" + integrity sha512-RqFUdDU5x6KgFfT2o1fEn2GmxehtqCt9wYfKIaXMtAEPj0LGmc5A/YllxedASnIwlDHxsKL12b0Mc+g3r00zVg== dependencies: tslib "^2.0.0" -"@angular/compiler-cli@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-10.0.14.tgz#0da5f62a3f62b4b36c8fcecf70baaaedbc84ab93" - integrity sha512-WK+S90sjc+3iMo8/CuuAX0RdGFwyA9esqqC5fYG/MDZjKuPuhogiimmR0rY3P1Th7B9di8x012xiILbf4GsGUQ== +"@angular/compiler-cli@~10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-10.1.1.tgz#369a512553b9e0912e30b523028a40d18b18113a" + integrity sha512-xpXIt1l6i2QHIkxezkMt87caRZeAs1ls+MgW4EVx62SGzWLB164BFmJ3nshZX53aX68y0x83RS5JENxlANasPA== dependencies: canonical-path "1.0.0" chokidar "^3.0.0" @@ -294,31 +315,41 @@ tslib "^2.0.0" yargs "15.3.0" -"@angular/compiler@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-10.0.14.tgz#0a766786eaa8817137bda17b7e509efac385582d" - integrity sha512-lYNo6/MmnYAVFoDQDBB6HMFd9zHg3RHXc6hn+wchU0XSWiIsg6WYHbKOb/DyqUEyKebzy0gSKZf7gUeZHtj62Q== +"@angular/compiler@9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.0.0.tgz#87e0bef4c369b6cadae07e3a4295778fc93799d5" + integrity sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ== + +"@angular/compiler@~10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-10.1.1.tgz#0cdb32c279993edbff85792cac7e98226d894de2" + integrity sha512-VJ5eeYBsHR6WzCIKhBsGPYd6zfPNXqD0hD2SAjHqTb/LPnhSPsHGKBzuck+CxvXwChbjKNWzdMPuMAKGahR2ow== dependencies: tslib "^2.0.0" -"@angular/core@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-10.0.14.tgz#000f091e6c17239232120fdca871fdac6b529ebd" - integrity sha512-m+c9g6fA/gE+6K7It01b6r8TEmbuFjUZajQ9gG/pzist0mTBcqfvn0O4h5X+ebnSgw/bbnnp+4PbaXEi1pOWZQ== +"@angular/core@9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.0.0.tgz#227dc53e1ac81824f998c6e76000b7efc522641e" + integrity sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w== + +"@angular/core@~10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-10.1.1.tgz#833fbfc303419e9e635ed7fe4cb21f3bc76b708e" + integrity sha512-3mvsaZJPg5Z8sGBT0OW3ak0T/UmHmlQ0nkWjwnIdPrMbyv5GoAjTR3Zh3cRK57nGV7ScLk4m4B4INzAjoCDqeA== dependencies: tslib "^2.0.0" -"@angular/forms@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-10.0.14.tgz#b6e1a7f872c318039be21b0a11839c8df063f0a3" - integrity sha512-McKh3rXDlAE7qmCnyWKENb2HhqAT+1dsAfChuqs0w8jhKkoRgA00RDFee6dZ6XQCc907DwuV0K8+wC3CvBp35w== +"@angular/forms@~10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-10.1.1.tgz#0ba182e1bddd28831a2a8b21f656612bac3691a8" + integrity sha512-p6bsRNG2ctpo6tTDKCZZcbH/lFy1+0OlS8flFoEpMVwVrCg2PtjdlP76mMcmJjvUWdC/c3ySyrODm2bu2H59FQ== dependencies: tslib "^2.0.0" -"@angular/language-service@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-10.0.14.tgz#b9c33d27dcd11e2bb0c5453df1e7b334a0896a94" - integrity sha512-QQLYUjD0T6u2hLNYXUEUbupAGsz5egmhCAckaQojvXCe3SLL/hQsrK4odrNuspy7TvMB0H5ZNEHGlF6m/WLZ3g== +"@angular/language-service@~10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-10.1.1.tgz#7c027904507a875325fc0db870c809a495eb713e" + integrity sha512-Mg+GUNVPtzSupmjkzIrxzvylM7TGtVP36h61Yd0ixyo7vBcNV+NQ7PTdwfKGVWN0N6PiMuk2/4PA0hW2EokSZg== "@angular/localize@~10.0.10": version "10.0.14" @@ -329,24 +360,24 @@ glob "7.1.2" yargs "15.3.0" -"@angular/platform-browser-dynamic@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.0.14.tgz#4ee2257b2ccb94949f0a8083884020a814b5d47c" - integrity sha512-PPCAiNh/JSuQNKXOhj3a8CTFdVhTgF/EpGtaotnVr/BfbJMeFImKo7m2QQOTsAFaEP2DurSHnofPnMWAfHS2mg== +"@angular/platform-browser-dynamic@~10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.1.1.tgz#b08d329b1b1c072420977776c206ff0adf04039b" + integrity sha512-mYd5ulQ0HYRwbgALegL6W7OlkDLNOlXp3gLLAoNjRfsb4+EocDiR8A4uf1LajL3Qunq3k7XBrcdT1SEQmqu4BQ== dependencies: tslib "^2.0.0" -"@angular/platform-browser@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-10.0.14.tgz#43b9aa7fcd8f312b58f371206df265c31ea13fac" - integrity sha512-DcBZ1wt2TwtXrdcmCTWanAzu2Vxk5Uvioam0UcDxcgXD84T2fHipyfZVn07fMqRvzFQj45tDNAEevFBnGZar4w== +"@angular/platform-browser@~10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-10.1.1.tgz#db04b3cbdfa12229da58588f7f2732ddb787eac5" + integrity sha512-rbI4fu6HRj7b+6MB8HWOdaYmV3CSjOyyrVqWAcNuXfNwZk/KE/OHvLSvQf7dMKnatJARa9bMrZdSQZqPuig1hA== dependencies: tslib "^2.0.0" -"@angular/router@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-10.0.14.tgz#e8942e93a8154e1be749e1f9d79afa5f7b5b9cb9" - integrity sha512-VWzaNyPZDY99TMszV1GlXJgVOxXsjhJrsv3mIcjaz1dfdlKOeKTVDLdnyXfP9CkwE3PRmvG7eSXppIj6nn9BpQ== +"@angular/router@~10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-10.1.1.tgz#a9bed93b4d6fac602c5a7fa618be2653cbc7af03" + integrity sha512-f9OI9k6OKzraBsh5/HeG8H7ubi3r+Sveu7sRIBvvzeoUj0uFHRkB2IDIxQHJWBBWUPyPmyvWCJVigUvcJyyarw== dependencies: tslib "^2.0.0" @@ -357,7 +388,7 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.9.6": +"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== @@ -366,6 +397,28 @@ invariant "^2.2.4" semver "^5.5.0" +"@babel/core@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" + integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.1" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.0" + "@babel/types" "^7.11.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" @@ -387,28 +440,6 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" - integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.6" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.6" - "@babel/parser" "^7.9.6" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.6" - "@babel/types" "^7.9.6" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - "@babel/core@^7.7.5": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" @@ -431,17 +462,16 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" - integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ== +"@babel/generator@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" + integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== dependencies: - "@babel/types" "^7.9.6" + "@babel/types" "^7.11.0" jsesc "^2.5.1" - lodash "^4.17.13" source-map "^0.5.0" -"@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.8.3", "@babel/generator@^7.9.6": +"@babel/generator@^7.11.0", "@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.8.3": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== @@ -465,7 +495,7 @@ "@babel/helper-explode-assignable-expression" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-compilation-targets@^7.9.6": +"@babel/helper-compilation-targets@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== @@ -476,6 +506,18 @@ levenary "^1.1.1" semver "^5.5.0" +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/helper-create-regexp-features-plugin@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" @@ -524,21 +566,21 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-member-expression-to-functions@^7.10.4": +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== dependencies: "@babel/types" "^7.11.0" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.8.3": +"@babel/helper-module-imports@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== dependencies: "@babel/types" "^7.10.4" -"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0", "@babel/helper-module-transforms@^7.9.0": +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== @@ -627,7 +669,7 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helpers@^7.10.4", "@babel/helpers@^7.8.3", "@babel/helpers@^7.9.6": +"@babel/helpers@^7.10.4", "@babel/helpers@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== @@ -645,12 +687,12 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.8.3", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": +"@babel/parser@^7.10.4", "@babel/parser@^7.11.1", "@babel/parser@^7.11.5", "@babel/parser@^7.8.3": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== -"@babel/plugin-proposal-async-generator-functions@^7.8.3": +"@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== @@ -659,7 +701,15 @@ "@babel/helper-remap-async-to-generator" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-dynamic-import@^7.8.3": +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== @@ -667,7 +717,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.8.3": +"@babel/plugin-proposal-export-namespace-from@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" + integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== @@ -675,7 +733,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" + integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== @@ -683,7 +749,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@^7.8.3": +"@babel/plugin-proposal-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== @@ -691,7 +757,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.9.6": +"@babel/plugin-proposal-object-rest-spread@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== @@ -700,7 +766,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.10.4" -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== @@ -708,7 +774,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.9.0": +"@babel/plugin-proposal-optional-chaining@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== @@ -717,7 +783,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== @@ -732,6 +806,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" @@ -739,6 +820,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-json-strings@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" @@ -746,6 +834,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" @@ -753,7 +848,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.0": +"@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -781,21 +876,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.8.3": +"@babel/plugin-transform-arrow-functions@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.8.3": +"@babel/plugin-transform-async-to-generator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== @@ -804,21 +899,21 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.10.4" -"@babel/plugin-transform-block-scoped-functions@^7.8.3": +"@babel/plugin-transform-block-scoped-functions@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.8.3": +"@babel/plugin-transform-block-scoping@^7.10.4": version "7.11.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-classes@^7.9.5": +"@babel/plugin-transform-classes@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== @@ -832,21 +927,21 @@ "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.8.3": +"@babel/plugin-transform-computed-properties@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.9.5": +"@babel/plugin-transform-destructuring@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== @@ -854,14 +949,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-duplicate-keys@^7.8.3": +"@babel/plugin-transform-duplicate-keys@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.8.3": +"@babel/plugin-transform-exponentiation-operator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== @@ -869,14 +964,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-for-of@^7.9.0": +"@babel/plugin-transform-for-of@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.8.3": +"@babel/plugin-transform-function-name@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== @@ -884,21 +979,21 @@ "@babel/helper-function-name" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.8.3": +"@babel/plugin-transform-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.8.3": +"@babel/plugin-transform-member-expression-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.9.6": +"@babel/plugin-transform-modules-amd@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== @@ -907,7 +1002,7 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.9.6": +"@babel/plugin-transform-modules-commonjs@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== @@ -917,7 +1012,7 @@ "@babel/helper-simple-access" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.9.6": +"@babel/plugin-transform-modules-systemjs@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== @@ -927,7 +1022,7 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.9.0": +"@babel/plugin-transform-modules-umd@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== @@ -935,21 +1030,21 @@ "@babel/helper-module-transforms" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.10.4" -"@babel/plugin-transform-new-target@^7.8.3": +"@babel/plugin-transform-new-target@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-object-super@^7.8.3": +"@babel/plugin-transform-object-super@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== @@ -957,7 +1052,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.10.4" -"@babel/plugin-transform-parameters@^7.10.4", "@babel/plugin-transform-parameters@^7.9.5": +"@babel/plugin-transform-parameters@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== @@ -965,45 +1060,45 @@ "@babel/helper-get-function-arity" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.8.3": +"@babel/plugin-transform-property-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.8.7": +"@babel/plugin-transform-regenerator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.8.3": +"@babel/plugin-transform-reserved-words@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-runtime@7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.6.tgz#3ba804438ad0d880a17bca5eaa0cdf1edeedb2fd" - integrity sha512-qcmiECD0mYOjOIt8YHNsAP1SxPooC/rDmfmiSK9BNY72EitdSc7l44WTEklaWuFtbOEBjNhWWyph/kOImbNJ4w== +"@babel/plugin-transform-runtime@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz#e27f78eb36f19448636e05c33c90fd9ad9b8bccf" + integrity sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.8.3": +"@babel/plugin-transform-shorthand-properties@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-spread@^7.8.3": +"@babel/plugin-transform-spread@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== @@ -1011,7 +1106,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" -"@babel/plugin-transform-sticky-regex@^7.8.3": +"@babel/plugin-transform-sticky-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== @@ -1019,7 +1114,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-regex" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.8.3": +"@babel/plugin-transform-template-literals@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== @@ -1027,14 +1122,21 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.8.4": +"@babel/plugin-transform-typeof-symbol@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-regex@^7.8.3": +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== @@ -1042,67 +1144,75 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/preset-env@7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.6.tgz#df063b276c6455ec6fcfc6e53aacc38da9b0aea6" - integrity sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ== +"@babel/preset-env@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" + integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== dependencies: - "@babel/compat-data" "^7.9.6" - "@babel/helper-compilation-targets" "^7.9.6" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.9.6" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.9.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/compat-data" "^7.11.0" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.9.5" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.9.5" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.9.0" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.9.6" - "@babel/plugin-transform-modules-commonjs" "^7.9.6" - "@babel/plugin-transform-modules-systemjs" "^7.9.6" - "@babel/plugin-transform-modules-umd" "^7.9.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.9.5" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.9.6" - browserslist "^4.11.1" + "@babel/types" "^7.11.0" + browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" levenary "^1.1.1" @@ -1119,30 +1229,14 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/runtime@7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" - integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.8.4": +"@babel/runtime@7.11.2", "@babel/runtime@^7.8.4": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/template@^7.10.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6": +"@babel/template@7.10.4", "@babel/template@^7.10.4", "@babel/template@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== @@ -1151,7 +1245,7 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.6": +"@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0", "@babel/traverse@^7.11.5", "@babel/traverse@^7.8.3": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== @@ -1166,7 +1260,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.6": +"@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.4.4", "@babel/types@^7.8.3": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== @@ -1185,16 +1279,16 @@ resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== -"@jsdevtools/coverage-istanbul-loader@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.3.tgz#102e414b02ae2f0b3c7fd45a705601e1fd4867c5" - integrity sha512-TAdNkeGB5Fe4Og+ZkAr1Kvn9by2sfL44IAHFtxlh1BA1XJ5cLpO9iSNki5opWESv3l3vSHsZ9BNKuqFKbEbFaA== +"@jsdevtools/coverage-istanbul-loader@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz#2a4bc65d0271df8d4435982db4af35d81754ee26" + integrity sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA== dependencies: convert-source-map "^1.7.0" - istanbul-lib-instrument "^4.0.1" - loader-utils "^1.4.0" + istanbul-lib-instrument "^4.0.3" + loader-utils "^2.0.0" merge-source-map "^1.1.0" - schema-utils "^2.6.4" + schema-utils "^2.7.0" "@ng-bootstrap/ng-bootstrap@^7.0.0": version "7.0.0" @@ -1203,14 +1297,13 @@ dependencies: tslib "^2.0.0" -"@ngtools/webpack@10.0.8": - version "10.0.8" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-10.0.8.tgz#c818415a150ff6d578b25311b97859220b9d5a10" - integrity sha512-Qv4v7O4VGeWuXjRThd/mdC2I4cJOgQ7kDrVN7vkDB2EW5xtRB+/4hghvFeO3bD11FLuFvCxBMb0HbwyKoVQgEQ== +"@ngtools/webpack@10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-10.1.1.tgz#28c907f58ec352bc983eeca97205757c8660ed65" + integrity sha512-OByWcvyJy4S4bxVcRCNVMRIyK4+j6XZPDI2K2vS6DZ6Bg/GUnabHMTCS+50RSAYvoaF2Gh0qCCXCA6QbGrSSDw== dependencies: - "@angular-devkit/core" "10.0.8" - enhanced-resolve "4.1.1" - rxjs "6.5.5" + "@angular-devkit/core" "10.1.1" + enhanced-resolve "4.3.0" webpack-sources "1.4.3" "@ngx-validate/core@^0.0.11": @@ -1310,26 +1403,26 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@schematics/angular@10.0.8": - version "10.0.8" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-10.0.8.tgz#af730827b2de6cab7561157a8772250eb5f277e1" - integrity sha512-KNO61UGtiKMQSG+NbusqLtwLbxId0y+xpXJt9PKFwi+vaViOO+YzOPREfiFCuQ7q6X8SmNlrMj6sZ34E2YN1pQ== +"@schematics/angular@10.1.1": + version "10.1.1" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-10.1.1.tgz#96c9aefa12273795688e60f5e420b7397967620e" + integrity sha512-U+5CfLlMqgkfRWZpmA3yzr+Axj1D42k0+tkfuaBrJTJUf5j7+JyULONPvzUh4Pi1c4EZJt+RuCE+AxtUZO/hug== dependencies: - "@angular-devkit/core" "10.0.8" - "@angular-devkit/schematics" "10.0.8" + "@angular-devkit/core" "10.1.1" + "@angular-devkit/schematics" "10.1.1" + jsonc-parser "2.3.0" -"@schematics/update@0.1000.8": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1000.8.tgz#3b745ec14e92cfd1f7d16f9a4c3864e1f12249c9" - integrity sha512-xHuj6ME3PNTsVUrpftd98LF3WHPM0NU25GcT/n0E/j0/52yDTiaPS3wUnYSK8ZSv4Et4hcyGx7f/LEXAoOKJXw== +"@schematics/update@0.1001.1": + version "0.1001.1" + resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1001.1.tgz#2cb2c539827b550cc9dbd36098a3ecee8c8a9d95" + integrity sha512-71PyE0pTW2u3PPkNBdCXO0gH9pwTgZCfsHNNOWsIsslDDHYHGknJagN0JM/X1YAJ0nVZPgvMC0GSJ/xtIoCZmA== dependencies: - "@angular-devkit/core" "10.0.8" - "@angular-devkit/schematics" "10.0.8" + "@angular-devkit/core" "10.1.1" + "@angular-devkit/schematics" "10.1.1" "@yarnpkg/lockfile" "1.1.0" ini "1.3.5" npm-package-arg "^8.0.0" pacote "9.5.12" - rxjs "6.5.5" semver "7.3.2" semver-intersect "1.4.0" @@ -1731,7 +1824,7 @@ ajv@6.12.3: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: +ajv@6.12.4, ajv@^6.1.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4: version "6.12.4" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.4.tgz#0614facc4522127fa713445c6bfd3ebd376e2234" integrity sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ== @@ -1826,10 +1919,10 @@ anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -app-root-path@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" - integrity sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA== +app-root-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" + integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== aproba@^1.1.1: version "1.2.0" @@ -2002,20 +2095,7 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@9.8.0: - version "9.8.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz#68e2d2bef7ba4c3a65436f662d0a56a741e56511" - integrity sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001061" - chalk "^2.4.2" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.30" - postcss-value-parser "^4.1.0" - -autoprefixer@^9.6.5: +autoprefixer@9.8.6, autoprefixer@^9.6.5: version "9.8.6" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== @@ -2304,7 +2384,7 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.12.0, browserslist@^4.7.0, browserslist@^4.8.5, browserslist@^4.9.1: +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.7.0, browserslist@^4.8.5, browserslist@^4.9.1: version "4.14.1" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.1.tgz#cb2b490ba881d45dc3039078c7ed04411eaf3fa3" integrity sha512-zyBTIHydW37pnb63c7fHFXUG6EcqWOqoMdDx6cdyaDFriZ20EoVxcE95S54N+heRqY8m8IUgB5zYta/gCwSaaA== @@ -2375,22 +2455,22 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@15.0.3: - version "15.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.3.tgz#2225c2d1dd8e872339950d6a39c051e0e9334392" - integrity sha512-bc3jKYjqv7k4pWh7I/ixIjfcjPul4V4jme/WbjvwGS5LzoPL/GzXr4C5EgPNLO/QEZl9Oi61iGitYEdwcrwLCQ== +cacache@15.0.5, cacache@^15.0.4, cacache@^15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== dependencies: + "@npmcli/move-file" "^1.0.1" chownr "^2.0.0" fs-minipass "^2.0.0" glob "^7.1.4" infer-owner "^1.0.4" - lru-cache "^5.1.1" + lru-cache "^6.0.0" minipass "^3.1.1" minipass-collect "^1.0.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.2" mkdirp "^1.0.3" - move-file "^2.0.0" p-map "^4.0.0" promise-inflight "^1.0.1" rimraf "^3.0.2" @@ -2419,29 +2499,6 @@ cacache@^12.0.0, cacache@^12.0.2: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^15.0.3, cacache@^15.0.4: - version "15.0.5" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" - integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== - dependencies: - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.0" - tar "^6.0.2" - unique-filename "^1.1.1" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -2504,11 +2561,16 @@ camelcase@5.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" integrity sha512-faqwZqnWxbxn+F1d399ygeamQNy3lPp/H9H6rNrqYh4FSVCtcY+3cub1MxA8o9mDd55mM8Aghuu/kuyYA6VTsA== -camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: +camelcase@5.3.1, camelcase@^5.0.0: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== +camelcase@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" + integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -2519,7 +2581,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001061, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001124: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001124: version "1.0.30001124" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001124.tgz#5d9998190258e11630d674fc50ea8e579ae0ced2" integrity sha512-zQW8V3CdND7GHRH6rxm6s59Ww4g/qGWTheoboW9nfeMg7sUoopIfKCcNZUjwYRCOrvereh3kwDpZj4VLQ7zGtA== @@ -2562,7 +2624,7 @@ chalk@^3.0.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.0.0: +chalk@^4.0.0, chalk@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== @@ -2684,15 +2746,15 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-spinners@^2.2.0: +cli-spinners@^2.2.0, cli-spinners@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.4.0.tgz#c6256db216b878cfba4720e719cec7cf72685d7f" integrity sha512-sJAofoarcm76ZGpuooaO0eDy8saEy+YoZBLjC4h8srt4jeBnkYeOgqxgsJQTpyt2LjI5PTfLJHSL+41Yu4fEJA== -cli-width@^2.0.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" - integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== cliui@^5.0.0: version "5.0.0" @@ -2712,15 +2774,6 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -2747,20 +2800,25 @@ coa@^2.0.2: chalk "^2.4.1" q "^1.1.2" -codelyzer@^5.1.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-5.2.2.tgz#d0530a455784e6bea0b6d7e97166c73c30a5347f" - integrity sha512-jB4FZ1Sx7kZhvZVdf+N2BaKTdrrNZOL0Bj10RRfrhHrb3zEvXjJvvq298JPMJAiyiCS/v4zs1QlGU0ip7xGqeA== +codelyzer@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-6.0.0.tgz#50c98581cc2890e0e9a9f93878dc317115d836ed" + integrity sha512-edJIQCIcxD9DhVSyBEdJ38AbLikm515Wl91t5RDGNT88uA6uQdTm4phTWfn9JhzAI8kXNUcfYyAE90lJElpGtA== dependencies: - app-root-path "^2.2.1" + "@angular/compiler" "9.0.0" + "@angular/core" "9.0.0" + app-root-path "^3.0.0" aria-query "^3.0.0" axobject-query "2.0.2" css-selector-tokenizer "^0.7.1" cssauron "^1.4.0" damerau-levenshtein "^1.0.4" + rxjs "^6.5.3" semver-dsl "^1.0.1" source-map "^0.5.7" sprintf-js "^1.1.2" + tslib "^1.10.0" + zone.js "~0.10.3" collection-visit@^1.0.0: version "1.0.0" @@ -3102,24 +3160,23 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" -css-loader@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.3.tgz#95ac16468e1adcd95c844729e0bb167639eb0bcf" - integrity sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw== +css-loader@4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.2.2.tgz#b668b3488d566dc22ebcf9425c5f254a05808c89" + integrity sha512-omVGsTkZPVwVRpckeUnLshPp12KsmMSLqYxs12+RzM9jRR5Y+Idn/tBffjXRvOE+qW7if24cuceFJqYR5FmGBg== dependencies: - camelcase "^5.3.1" + camelcase "^6.0.0" cssesc "^3.0.0" icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.27" + loader-utils "^2.0.0" + postcss "^7.0.32" postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" + postcss-modules-local-by-default "^3.0.3" postcss-modules-scope "^2.2.0" postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.3" - schema-utils "^2.6.6" - semver "^6.3.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^7.3.2" css-parse@~2.0.0: version "2.0.0" @@ -3344,7 +3401,7 @@ debug@4.1.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: dependencies: ms "^2.1.1" -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: +debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== @@ -3720,16 +3777,7 @@ engine.io@~3.4.0: engine.io-parser "~2.2.0" ws "^7.1.2" -enhanced-resolve@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enhanced-resolve@^4.1.0: +enhanced-resolve@4.3.0, enhanced-resolve@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== @@ -4759,13 +4807,6 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.5.2.tgz#af6d628dccfb463b7364d97f715e4b74b8c8c2b8" - integrity sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag== - dependencies: - safer-buffer ">= 2.1.2 < 3" - iconv-lite@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" @@ -4902,21 +4943,21 @@ injection-js@^2.2.1: dependencies: tslib "^1.9.3" -inquirer@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" - integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== +inquirer@7.3.3: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== dependencies: ansi-escapes "^4.2.1" - chalk "^3.0.0" + chalk "^4.1.0" cli-cursor "^3.1.0" - cli-width "^2.0.0" + cli-width "^3.0.0" external-editor "^3.0.3" figures "^3.0.0" - lodash "^4.17.15" + lodash "^4.17.19" mute-stream "0.0.8" run-async "^2.4.0" - rxjs "^6.5.3" + rxjs "^6.6.0" string-width "^4.1.0" strip-ansi "^6.0.0" through "^2.3.6" @@ -5298,7 +5339,7 @@ istanbul-lib-coverage@^3.0.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^4.0.1: +istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== @@ -5336,7 +5377,7 @@ istanbul-reports@^3.0.2: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jasmine-core@^3.5.0: +jasmine-core@^3.6.0, jasmine-core@~3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.6.0.tgz#491f3bb23941799c353ceb7a45b38a950ebc5a20" integrity sha512-8uQYa7zJN8hq9z+g8z1bqCfdC8eoDAeVnM5sfqs7KHv9/ifoJ500m018fpFc7RDaO6SWCLCXwo/wPSNcdYTgcw== @@ -5346,11 +5387,6 @@ jasmine-core@~2.8.0: resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= -jasmine-core@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-3.5.0.tgz#132c23e645af96d85c8bca13c8758b18429fc1e4" - integrity sha512-nCeAiw37MIMA9w9IXso7bRaLl+c/ef3wnxsoSAlYrzS+Ot0zTG6nU8G/cIfGkqpkjX2wNaIW9RFG0TwIFnG6bA== - jasmine-spec-reporter@~5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/jasmine-spec-reporter/-/jasmine-spec-reporter-5.0.2.tgz#b61288ab074ad440dc2477c4d42840b0e74a6b95" @@ -5372,15 +5408,7 @@ jasminewd2@^2.1.0: resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= -jest-worker@26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.0.0.tgz#4920c7714f0a96c6412464718d0c58a3df3fb066" - integrity sha512-pPaYa2+JnwmiZjK9x7p9BoZht+47ecFCDFA/CJxspHzeDvQcfVBLWzCiWyo+EGrSiQMWZtCFo9iSvMZnAAo8vw== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - -jest-worker@^26.0.0: +jest-worker@26.3.0, jest-worker@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== @@ -5466,7 +5494,7 @@ json5@^2.1.0, json5@^2.1.2: dependencies: minimist "^1.2.5" -jsonc-parser@^2.3.0: +jsonc-parser@2.3.0, jsonc-parser@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.0.tgz#7c7fc988ee1486d35734faaaa866fadb00fa91ee" integrity sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA== @@ -5545,12 +5573,12 @@ karma-jasmine-html-reporter@^1.5.0: resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.5.4.tgz#669f33d694d88fce1b0ccfda57111de716cb0192" integrity sha512-PtilRLno5O6wH3lDihRnz0Ba8oSn0YUJqKjjux1peoYGwo0AQqrWRbdWk/RLzcGlb+onTyXAnHl6M+Hu3UxG/Q== -karma-jasmine@~3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-3.3.1.tgz#c01b1a2ec973e1531c1f6535e1d7d66b8e4275c2" - integrity sha512-Nxh7eX9mOQMyK0VSsMxdod+bcqrR/ikrmEiWj5M6fwuQ7oI+YEF1FckaDsWfs6TIpULm9f0fTKMjF7XcrvWyqQ== +karma-jasmine@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-4.0.1.tgz#b99e073b6d99a5196fc4bffc121b89313b0abd82" + integrity sha512-h8XDAhTiZjJKzfkoO1laMH+zfNlra+dEQHUAjpn5JV1zCPtOIVWGQjLBrqhnzQa/hrU2XrZwSyBa6XjEBzfXzw== dependencies: - jasmine-core "^3.5.0" + jasmine-core "^3.6.0" karma-source-map-support@1.4.0: version "1.4.0" @@ -5625,17 +5653,22 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== -less-loader@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-6.1.0.tgz#59fd591df408ced89a40fce11a2aea449b005631" - integrity sha512-/jLzOwLyqJ7Kt3xg5sHHkXtOyShWwFj410K9Si9WO+/h8rmYxxkSR0A3/hFEntWudE20zZnWMtpMYnLzqTVdUA== +klona@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + +less-loader@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-6.2.0.tgz#8b26f621c155b342eefc24f5bd6e9dc40c42a719" + integrity sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg== dependencies: clone "^2.1.2" - less "^3.11.1" + less "^3.11.3" loader-utils "^2.0.0" - schema-utils "^2.6.6" + schema-utils "^2.7.0" -less@^3.10.3, less@^3.11.1: +less@^3.10.3, less@^3.11.3: version "3.12.2" resolved "https://registry.yarnpkg.com/less/-/less-3.12.2.tgz#157e6dd32a68869df8859314ad38e70211af3ab4" integrity sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q== @@ -5662,10 +5695,10 @@ levenary@^1.1.1: dependencies: leven "^3.1.0" -license-webpack-plugin@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-2.2.0.tgz#5c964380d7d0e0c27c349d86a6f856c82924590e" - integrity sha512-XPsdL/0brSHf+7dXIlRqotnCQ58RX2au6otkOg4U3dm8uH+Ka/fW4iukEs95uXm+qKe/SBs+s1Ll/aQddKG+tg== +license-webpack-plugin@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-2.3.0.tgz#c00f70d5725ba0408de208acb9e66612cc2eceda" + integrity sha512-JK/DXrtN6UeYQSgkg5q1+pgJ8aiKPL9tnz9Wzw+Ikkf+8mJxG56x6t8O+OH/tAeF/5NREnelTEMyFtbJNkjH4w== dependencies: "@types/webpack-sources" "^0.1.5" webpack-sources "^1.2.0" @@ -5761,6 +5794,13 @@ log-symbols@^3.0.0: dependencies: chalk "^2.4.2" +log-symbols@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + log4js@^6.2.1: version "6.3.0" resolved "https://registry.yarnpkg.com/log4js/-/log4js-6.3.0.tgz#10dfafbb434351a3e30277a00b9879446f715bcb" @@ -5998,10 +6038,10 @@ mimic-response@^3.1.0: resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== -mini-css-extract-plugin@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" - integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== +mini-css-extract-plugin@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz#a0e6bfcad22a9c73f6c882a3c7557a98e2d3d27d" + integrity sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A== dependencies: loader-utils "^1.1.0" normalize-url "1.9.1" @@ -6105,7 +6145,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1, mkdirp@~0.5.x: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -6134,13 +6174,6 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -move-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/move-file/-/move-file-2.0.0.tgz#83ffa309b5d7f69d518b28e1333e2ffadf331e3e" - integrity sha512-cdkdhNCgbP5dvS4tlGxZbD+nloio9GIimP57EjqFhwLcMjnU+XJKAZzlmg/TN/AK1LuNAdTSvm3CPPP4Xkv0iQ== - dependencies: - path-exists "^4.0.0" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -6206,7 +6239,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.1: +neo-async@^2.5.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -6571,10 +6604,10 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -open@7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/open/-/open-7.0.4.tgz#c28a9d315e5c98340bf979fdcb2e58664aa10d83" - integrity sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ== +open@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/open/-/open-7.2.0.tgz#212959bd7b0ce2e8e3676adc76e3cf2f0a2498b4" + integrity sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ== dependencies: is-docker "^2.0.0" is-wsl "^2.1.1" @@ -6600,6 +6633,20 @@ ora@4.0.4: strip-ansi "^6.0.0" wcwidth "^1.0.1" +ora@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.0.0.tgz#4f0b34f2994877b49b452a707245ab1e9f6afccb" + integrity sha512-s26qdWqke2kjN/wC4dy+IQPBIMWBJlSU/0JZhk30ZDBLelW25rv66yutUWARMigpGPzcXHb+Nac5pNhN/WsARw== + dependencies: + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.4.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + original@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" @@ -6640,14 +6687,14 @@ p-finally@^1.0.0: resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" -p-limit@^3.0.1: +p-limit@^3.0.1, p-limit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== @@ -6771,10 +6818,17 @@ parse-json@^5.0.0: json-parse-even-better-errors "^2.3.0" lines-and-columns "^1.1.6" -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== +parse5-htmlparser2-tree-adapter@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" + +parse5@6.0.1, parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== parseqs@0.0.5: version "0.0.5" @@ -7081,7 +7135,7 @@ postcss-modules-extract-imports@^2.0.0: dependencies: postcss "^7.0.5" -postcss-modules-local-by-default@^3.0.2: +postcss-modules-local-by-default@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== @@ -7270,7 +7324,7 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== @@ -7284,16 +7338,7 @@ postcss@7.0.21: source-map "^0.6.1" supports-color "^6.1.0" -postcss@7.0.31: - version "7.0.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.31.tgz#332af45cb73e26c0ee2614d7c7fb02dfcc2bd6dd" - integrity sha512-a937VDHE1ftkjk+8/7nj/mrjtmkn69xxzJgRETXdAUU+IgOYPQNJF17haGWbeDxSyk++HA14UA98FurvPyBJOA== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.29, postcss@^7.0.30, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: +postcss@7.0.32, postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.29, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.32" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== @@ -7628,12 +7673,7 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== -regenerator-runtime@0.13.5: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== - -regenerator-runtime@^0.13.4: +regenerator-runtime@0.13.7, regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -7705,7 +7745,7 @@ repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -request@^2.87.0, request@^2.88.0: +request@^2.87.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -7884,10 +7924,10 @@ rollup-plugin-sourcemaps@^0.6.0: "@rollup/pluginutils" "^3.0.9" source-map-resolve "^0.6.0" -rollup@2.10.9: - version "2.10.9" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.10.9.tgz#17dcc6753c619efcc1be2cf61d73a87827eebdf9" - integrity sha512-dY/EbjiWC17ZCUSyk14hkxATAMAShkMsD43XmZGWjLrgFj15M3Dw2kEkA9ns64BiLFm9PKN6vTQw8neHwK74eg== +rollup@2.26.5: + version "2.26.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.26.5.tgz#5562ec36fcba3eed65cfd630bd78e037ad0e0307" + integrity sha512-rCyFG3ZtQdnn9YwfuAVH0l/Om34BdO5lwCA0W6Hq+bNB21dVEBbCRxhaHOmu1G7OBFDWytbzAC104u7rxHwGjA== optionalDependencies: fsevents "~2.1.2" @@ -7915,20 +7955,27 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rxjs@6.5.5, rxjs@~6.5.4: +rxjs@6.5.5: version "6.5.5" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.5.tgz#c5c884e3094c8cfee31bf27eb87e54ccfc87f9ec" integrity sha512-WfQI+1gohdf0Dai/Bbmk5L5ItH5tYqm3ki2c5GdWhKjalzjg93N3avFjVStyZZz+A2Em+ZxKH5bNghw9UeylGQ== dependencies: tslib "^1.9.0" -rxjs@^6.5.0, rxjs@^6.5.3: +rxjs@6.6.2, rxjs@^6.5.0: version "6.6.2" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.2.tgz#8096a7ac03f2cc4fe5860ef6e572810d9e01c0d2" integrity sha512-BHdBMVoWC2sL26w//BCu3YzKT4s2jip/WhwsGEDmeKYBhKDZeYezVUnHatYB7L85v5xs0BAQmg6BEYJEKxBabg== dependencies: tslib "^1.9.0" +rxjs@^6.5.3, rxjs@^6.6.0, rxjs@~6.6.0: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -7951,25 +7998,18 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -sass-loader@8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" - integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== - dependencies: - clone-deep "^4.0.1" - loader-utils "^1.2.3" - neo-async "^2.6.1" - schema-utils "^2.6.1" - semver "^6.3.0" - -sass@1.26.5: - version "1.26.5" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.5.tgz#2d7aecfbbabfa298567c8f06615b6e24d2d68099" - integrity sha512-FG2swzaZUiX53YzZSjSakzvGtlds0lcbF+URuU9mxOv7WBh7NhXEVDa4kPKN4hN6fC2TkOTOKqiqp6d53N9X5Q== +sass-loader@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.1.tgz#10c0364d8034f22fee25ddcc9eded20f99bbe3b4" + integrity sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ== dependencies: - chokidar ">=2.0.0 <4.0.0" + klona "^2.0.3" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^2.7.0" + semver "^7.3.2" -sass@^1.23.0: +sass@1.26.10, sass@^1.23.0: version "1.26.10" resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.10.tgz#851d126021cdc93decbf201d1eca2a20ee434760" integrity sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw== @@ -7997,7 +8037,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: +schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -8052,7 +8092,7 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.3.2, semver@^7.0.0, semver@^7.1.1: +semver@7.3.2, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== @@ -8081,13 +8121,6 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" - integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== - dependencies: - randombytes "^2.1.0" - serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -8161,13 +8194,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -8341,16 +8367,16 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-loader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.0.0.tgz#240b88575a9b0d27214aeecbd4e7686af95cfa56" - integrity sha512-ZayyQCSCrQazN50aCvuS84lJT4xc1ZAcykH5blHaBdVveSwjiFK8UGMPvao0ho54DTb0Jf7m57uRRG/YYUZ2Fg== +source-map-loader@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.0.2.tgz#b0a6582b2eaa387ede1ecf8061ae0b93c23f9eb0" + integrity sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw== dependencies: data-urls "^2.0.0" - iconv-lite "^0.5.1" + iconv-lite "^0.6.2" loader-utils "^2.0.0" - schema-utils "^2.6.6" - source-map "^0.6.0" + schema-utils "^2.7.0" + source-map "^0.6.1" source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" @@ -8677,21 +8703,7 @@ stylus-loader@3.0.2: lodash.clonedeep "^4.5.0" when "~3.6.x" -stylus@0.54.7: - version "0.54.7" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2" - integrity sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug== - dependencies: - css-parse "~2.0.0" - debug "~3.1.0" - glob "^7.1.3" - mkdirp "~0.5.x" - safer-buffer "^2.1.2" - sax "~1.2.4" - semver "^6.0.0" - source-map "^0.7.3" - -stylus@^0.54.7: +stylus@0.54.8, stylus@^0.54.7: version "0.54.8" resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" integrity sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg== @@ -8785,19 +8797,19 @@ tar@^6.0.2: mkdirp "^1.0.3" yallist "^4.0.0" -terser-webpack-plugin@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-3.0.1.tgz#31928c9330a582fb5ec6f90805337289b85cb8fe" - integrity sha512-eFDtq8qPUEa9hXcUzTwKXTnugIVtlqc1Z/ZVhG8LmRT3lgRY13+pQTnFLY2N7ATB6TKCHuW/IGjoAnZz9wOIqw== +terser-webpack-plugin@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.1.0.tgz#6e9d6ae4e1a900d88ddce8da6a47507ea61f44bc" + integrity sha512-0ZWDPIP8BtEDZdChbufcXUigOYk6dOX/P/X0hWxqDDcVAQLb8Yy/0FAaemSfax3PAA67+DJR778oz8qVbmy4hA== dependencies: - cacache "^15.0.3" + cacache "^15.0.5" find-cache-dir "^3.3.1" - jest-worker "^26.0.0" - p-limit "^2.3.0" + jest-worker "^26.3.0" + p-limit "^3.0.2" schema-utils "^2.6.6" - serialize-javascript "^3.0.0" + serialize-javascript "^4.0.0" source-map "^0.6.1" - terser "^4.6.13" + terser "^5.0.0" webpack-sources "^1.4.3" terser-webpack-plugin@^1.4.3: @@ -8815,16 +8827,16 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006" - integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw== +terser@5.3.0, terser@^5.0.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.0.tgz#c481f4afecdcc182d5e2bdd2ff2dc61555161e81" + integrity sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg== dependencies: commander "^2.20.0" source-map "~0.6.1" source-map-support "~0.5.12" -terser@^4.1.2, terser@^4.6.13: +terser@^4.1.2: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -8833,15 +8845,6 @@ terser@^4.1.2, terser@^4.6.13: source-map "~0.6.1" source-map-support "~0.5.12" -terser@^5.0.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.0.tgz#c481f4afecdcc182d5e2bdd2ff2dc61555161e81" - integrity sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -8986,21 +8989,16 @@ ts-toolbelt@6.15.4: resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.15.4.tgz#f7fad584e197d0f495f77b5e3ee75a8f4c4dd3da" integrity sha512-Ifp2yNo4I8q5UwNARUBMnBiFpv5DEtTbCtS8RCjjLOz+PNcThbjUsPJCK3hRnz0dTygM1Fi3Mgvnt/DoKUTU2g== -tslib@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3" - integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== +tslib@2.0.1, tslib@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" + integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== tslib@^1.10.0, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== -tslib@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" - integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== - tslint@~6.1.0: version "6.1.3" resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" @@ -9077,7 +9075,12 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@~3.9.2, typescript@~3.9.5: +typescript@4.0.2, typescript@~4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" + integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== + +typescript@~3.9.2: version "3.9.7" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== @@ -9144,13 +9147,13 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -universal-analytics@0.4.20: - version "0.4.20" - resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.20.tgz#d6b64e5312bf74f7c368e3024a922135dbf24b03" - integrity sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw== +universal-analytics@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.23.tgz#d915e676850c25c4156762471bdd7cf2eaaca8ac" + integrity sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A== dependencies: - debug "^3.0.0" - request "^2.88.0" + debug "^4.1.1" + request "^2.88.2" uuid "^3.0.0" universalify@^0.1.0: @@ -9260,10 +9263,10 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.1.0.tgz#6f1536eb43249f473abc6bd58ff983da1ca30d8d" - integrity sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg== +uuid@8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" + integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== uuid@^3.0.0, uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" @@ -9321,7 +9324,7 @@ watchpack-chokidar2@^2.0.0: dependencies: chokidar "^2.1.8" -watchpack@^1.6.1: +watchpack@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== @@ -9456,10 +9459,10 @@ webpack-subresource-integrity@1.4.1: dependencies: webpack-sources "^1.3.0" -webpack@4.43.0: - version "4.43.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" - integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== +webpack@4.44.1: + version "4.44.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" + integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0" @@ -9469,7 +9472,7 @@ webpack@4.43.0: ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" + enhanced-resolve "^4.3.0" eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" loader-runner "^2.4.0" @@ -9482,7 +9485,7 @@ webpack@4.43.0: schema-utils "^1.0.0" tapable "^1.1.3" terser-webpack-plugin "^1.4.3" - watchpack "^1.6.1" + watchpack "^1.7.4" webpack-sources "^1.4.1" websocket-driver@0.6.5: @@ -9544,10 +9547,10 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -worker-plugin@4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/worker-plugin/-/worker-plugin-4.0.3.tgz#7c42e600d5931ad154d3d5f187a32446df64db0f" - integrity sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg== +worker-plugin@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/worker-plugin/-/worker-plugin-5.0.0.tgz#113b5fe1f4a5d6a957cecd29915bedafd70bb537" + integrity sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ== dependencies: loader-utils "^1.1.0" @@ -9714,7 +9717,7 @@ yn@^3.0.0: resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== -zone.js@~0.10.2: +zone.js@~0.10.2, zone.js@~0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" integrity sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg== From c0a0b988f13323a797df80465a28e140ed54b3f8 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Fri, 18 Sep 2020 09:16:23 +0800 Subject: [PATCH 018/143] Remove TwoFactorEnabled related UI & Application Service. --- .../Volo/Abp/Identity/IdentityUserCreateOrUpdateDtoBase.cs | 6 ++---- .../Volo/Abp/Identity/IdentityUserDto.cs | 4 +--- .../Volo/Abp/Identity/IdentityUserAppService.cs | 1 - .../Pages/Identity/UserManagement.razor | 6 ------ .../Pages/Identity/Users/CreateModal.cshtml | 5 ++--- .../Pages/Identity/Users/CreateModal.cshtml.cs | 2 -- .../Pages/Identity/Users/EditModal.cshtml | 7 +++---- .../Pages/Identity/Users/EditModal.cshtml.cs | 2 -- .../Volo/Abp/Identity/IdentityUserAppService_Tests.cs | 4 +--- .../Abp/Identity/AspNetCore/ExternalLoginProvider_Tests.cs | 1 - 10 files changed, 9 insertions(+), 29 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateOrUpdateDtoBase.cs b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateOrUpdateDtoBase.cs index 41981b2ca8..e2fe874dbd 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateOrUpdateDtoBase.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserCreateOrUpdateDtoBase.cs @@ -26,8 +26,6 @@ namespace Volo.Abp.Identity [DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPhoneNumberLength))] public string PhoneNumber { get; set; } - public bool TwoFactorEnabled { get; set; } - public bool LockoutEnabled { get; set; } [CanBeNull] @@ -35,7 +33,7 @@ namespace Volo.Abp.Identity protected IdentityUserCreateOrUpdateDtoBase() : base(false) { - + } } -} \ No newline at end of file +} diff --git a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserDto.cs b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserDto.cs index 9f94d7b599..f7291a4e82 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserDto.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application.Contracts/Volo/Abp/Identity/IdentityUserDto.cs @@ -23,12 +23,10 @@ namespace Volo.Abp.Identity public bool PhoneNumberConfirmed { get; set; } - public bool TwoFactorEnabled { get; set; } - public bool LockoutEnabled { get; set; } public DateTimeOffset? LockoutEnd { get; set; } public string ConcurrencyStamp { get; set; } } -} \ No newline at end of file +} diff --git a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs index 74b210066f..070a452218 100644 --- a/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs +++ b/modules/identity/src/Volo.Abp.Identity.Application/Volo/Abp/Identity/IdentityUserAppService.cs @@ -162,7 +162,6 @@ namespace Volo.Abp.Identity (await UserManager.SetPhoneNumberAsync(user, input.PhoneNumber)).CheckErrors(); } - (await UserManager.SetTwoFactorEnabledAsync(user, input.TwoFactorEnabled)).CheckErrors(); (await UserManager.SetLockoutEnabledAsync(user, input.LockoutEnabled)).CheckErrors(); user.Name = input.Name; diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor index ca813229c3..5624e2a573 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/Pages/Identity/UserManagement.razor @@ -104,9 +104,6 @@ @L["DisplayName:LockoutEnabled"] - - @L["DisplayName:TwoFactorEnabled"] - @if (NewUserRoles != null) @@ -175,9 +172,6 @@ @L["DisplayName:LockoutEnabled"] - - @L["DisplayName:TwoFactorEnabled"] - @if (EditUserRoles != null) diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml index b171b785a2..d0b52a345c 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml @@ -26,8 +26,7 @@ - - + @foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties()) { if (propertyInfo.Type.IsEnum) @@ -56,4 +55,4 @@ - \ No newline at end of file + diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs index a868890632..03bbd859cc 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/CreateModal.cshtml.cs @@ -79,8 +79,6 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users [DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPhoneNumberLength))] public string PhoneNumber { get; set; } - public bool TwoFactorEnabled { get; set; } = true; - public bool LockoutEnabled { get; set; } = true; } diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml index 56ac3929f1..ca404c7e67 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml @@ -28,8 +28,7 @@ - - + @foreach (var propertyInfo in ObjectExtensionManager.Instance.GetProperties()) { if (propertyInfo.Type.IsEnum) @@ -46,7 +45,7 @@ value="@propertyInfo.GetInputValueOrNull(Model.UserInfo.ExtraProperties[propertyInfo.Name])" /> } } - + @for (var i = 0; i < Model.Roles.Length; i++) @@ -59,4 +58,4 @@ - \ No newline at end of file + diff --git a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs index a2336c2b8e..29d044f9da 100644 --- a/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs +++ b/modules/identity/src/Volo.Abp.Identity.Web/Pages/Identity/Users/EditModal.cshtml.cs @@ -87,8 +87,6 @@ namespace Volo.Abp.Identity.Web.Pages.Identity.Users [DynamicStringLength(typeof(IdentityUserConsts), nameof(IdentityUserConsts.MaxPhoneNumberLength))] public string PhoneNumber { get; set; } - public bool TwoFactorEnabled { get; set; } - public bool LockoutEnabled { get; set; } } diff --git a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs index a56631b2ae..278ef10ced 100644 --- a/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.Application.Tests/Volo/Abp/Identity/IdentityUserAppService_Tests.cs @@ -98,7 +98,6 @@ namespace Volo.Abp.Identity { UserName = johnNash.UserName, LockoutEnabled = true, - TwoFactorEnabled = true, PhoneNumber = CreateRandomPhoneNumber(), Password = "123qwe4R*", Email = CreateRandomEmail(), @@ -135,7 +134,7 @@ namespace Volo.Abp.Identity { //Get user var johnNash = await _userAppService.GetAsync(_testData.UserJohnId); - + //Act var input = new IdentityUserUpdateDto @@ -144,7 +143,6 @@ namespace Volo.Abp.Identity Surname = "Nash-updated", UserName = johnNash.UserName, LockoutEnabled = true, - TwoFactorEnabled = true, PhoneNumber = CreateRandomPhoneNumber(), Email = CreateRandomEmail(), RoleNames = new[] { "admin", "moderator" }, diff --git a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/ExternalLoginProvider_Tests.cs b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/ExternalLoginProvider_Tests.cs index ee9a56432e..c8d9f37c27 100644 --- a/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/ExternalLoginProvider_Tests.cs +++ b/modules/identity/test/Volo.Abp.Identity.AspNetCore.Tests/Volo/Abp/Identity/AspNetCore/ExternalLoginProvider_Tests.cs @@ -44,7 +44,6 @@ namespace Volo.Abp.Identity.AspNetCore user.Name.ShouldBe("Test Name"); user.Surname.ShouldBe("Test Surname"); user.EmailConfirmed.ShouldBeTrue(); - user.TwoFactorEnabled.ShouldBeFalse(); user.PhoneNumber.ShouldBe("123"); user.PhoneNumberConfirmed.ShouldBeFalse(); user.IsExternal.ShouldBeTrue(); From 28b13768f4d0eee4ad0b6f621051966230c0dca5 Mon Sep 17 00:00:00 2001 From: EngincanV Date: Mon, 21 Sep 2020 11:25:58 +0300 Subject: [PATCH 019/143] CmsKit: rating swagger endpoint fixed --- .../Public/Ratings/IRatingPublicAppService.cs | 6 +----- .../Public/Ratings/RatingPublicAppService.cs | 14 +------------- .../Public/Ratings/RatingPublicController.cs | 7 ------- 3 files changed, 2 insertions(+), 25 deletions(-) diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Ratings/IRatingPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Ratings/IRatingPublicAppService.cs index aa0aba48b4..39d6b01ccb 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Ratings/IRatingPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application.Contracts/Volo/CmsKit/Public/Ratings/IRatingPublicAppService.cs @@ -1,7 +1,5 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; namespace Volo.CmsKit.Public.Ratings @@ -11,8 +9,6 @@ namespace Volo.CmsKit.Public.Ratings Task CreateAsync(string entityType, string entityId, CreateUpdateRatingInput input); Task DeleteAsync(string entityType, string entityId); - - Task GetCurrentUserRatingAsync(string entityType, string entityId); Task> GetGroupedStarCountsAsync(string entityType, string entityId); } diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Ratings/RatingPublicAppService.cs b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Ratings/RatingPublicAppService.cs index 848dbeda28..4341157763 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Ratings/RatingPublicAppService.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.Application/Volo/CmsKit/Public/Ratings/RatingPublicAppService.cs @@ -1,8 +1,6 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; -using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; using Volo.Abp.Authorization; using Volo.Abp.Users; @@ -66,16 +64,6 @@ namespace Volo.CmsKit.Public.Ratings await RatingRepository.DeleteAsync(rating.Id); } - [Authorize] - public virtual async Task GetCurrentUserRatingAsync(string entityType, string entityId) - { - var currentUserId = CurrentUser.GetId(); - - var rating = await RatingRepository.GetCurrentUserRatingAsync(entityType, entityId, currentUserId); - - return ObjectMapper.Map(rating); - } - public virtual async Task> GetGroupedStarCountsAsync(string entityType, string entityId) { diff --git a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Ratings/RatingPublicController.cs b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Ratings/RatingPublicController.cs index e136c4564d..1a10919f8c 100644 --- a/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Ratings/RatingPublicController.cs +++ b/modules/cms-kit/src/Volo.CmsKit.Public.HttpApi/Volo/CmsKit/Public/Ratings/RatingPublicController.cs @@ -34,13 +34,6 @@ namespace Volo.CmsKit.Public.Ratings return RatingPublicAppService.DeleteAsync(entityType, entityId); } - [HttpGet] - [Route("{entityType}/{entityId}")] - public virtual Task GetCurrentUserRatingAsync(string entityType, string entityId) - { - return RatingPublicAppService.GetCurrentUserRatingAsync(entityType, entityId); - } - [HttpGet] [Route("{entityType}/{entityId}")] public virtual Task> GetGroupedStarCountsAsync(string entityType, string entityId) From fc2cb03f1baca5612f78f0099b923a133146d12b Mon Sep 17 00:00:00 2001 From: EngincanV Date: Mon, 21 Sep 2020 11:26:04 +0300 Subject: [PATCH 020/143] Update RatingPublicAppService_Tests.cs --- .../Ratings/RatingPublicAppService_Tests.cs | 37 +++---------------- 1 file changed, 6 insertions(+), 31 deletions(-) diff --git a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Ratings/RatingPublicAppService_Tests.cs b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Ratings/RatingPublicAppService_Tests.cs index c8f2acd950..dabcbb6c91 100644 --- a/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Ratings/RatingPublicAppService_Tests.cs +++ b/modules/cms-kit/test/Volo.CmsKit.Application.Tests/Ratings/RatingPublicAppService_Tests.cs @@ -1,6 +1,5 @@ using System.Linq; using System.Threading.Tasks; -using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using NSubstitute; using Shouldly; @@ -44,7 +43,7 @@ namespace Volo.CmsKit.Ratings UsingDbContext(context => { var ratings = context.Set().Where(x => - x.EntityId == _cmsKitTestData.EntityId1 && x.EntityType == _cmsKitTestData.EntityType1).ToList(); + x.EntityId == _cmsKitTestData.EntityId2 && x.EntityType == _cmsKitTestData.EntityType1).ToList(); ratings .Any(c => c.Id == newRating.Id && c.CreatorId == newRating.CreatorId && @@ -52,16 +51,16 @@ namespace Volo.CmsKit.Ratings .ShouldBeTrue(); }); } - + [Fact] public async Task CreateAsync_Should_Update_If_Rating_Is_Exist() { _currentUser.Id.Returns(_cmsKitTestData.User1Id); var entity = - await _ratingAppService.GetCurrentUserRatingAsync(_cmsKitTestData.EntityType1, - _cmsKitTestData.EntityId1); - + (await _ratingAppService.GetGroupedStarCountsAsync(_cmsKitTestData.EntityType1, + _cmsKitTestData.EntityId1)).FirstOrDefault(); + var updatedEntity = await _ratingAppService.CreateAsync( _cmsKitTestData.EntityType1, _cmsKitTestData.EntityId1, @@ -69,34 +68,10 @@ namespace Volo.CmsKit.Ratings { StarCount = 5 }); - - entity.Id.ShouldBe(updatedEntity.Id); - entity.EntityId.ShouldBe(updatedEntity.EntityId); - entity.EntityType.ShouldBe(updatedEntity.EntityType); + entity.StarCount.ShouldBe(updatedEntity.StarCount); } - [Fact] - public async Task GetCurrentUserRatingAsync() - { - _currentUser.Id.Returns(_cmsKitTestData.User1Id); - - var rating = await _ratingAppService.GetCurrentUserRatingAsync( - _cmsKitTestData.EntityType1, - _cmsKitTestData.EntityId1 - ); - - UsingDbContext(context => - { - var ratings = context.Set().Where(x => - x.EntityId == _cmsKitTestData.EntityId1 && x.EntityType == _cmsKitTestData.EntityType1).ToList(); - - ratings - .Any(c => c.Id == rating.Id && c.EntityId == rating.EntityId && c.EntityType == rating.EntityType) - .ShouldBeTrue(); - }); - } - [Fact] public async Task GetGroupedStarCountsAsync() { From d621e963ed1bb11002cfa253fef8b17a299d5e4c Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 22 Sep 2020 12:41:25 +0300 Subject: [PATCH 021/143] chore: remove two factor checkbox from user creation modal --- .../packages/account/src/lib/models/user.ts | 1 - .../src/lib/proxy/generate-proxy.json | 6975 +++++++++-------- .../lib/components/users/users.component.html | 12 - .../lib/components/users/users.component.ts | 3 +- .../identity/src/lib/proxy/identity/models.ts | 2 - 5 files changed, 3691 insertions(+), 3302 deletions(-) diff --git a/npm/ng-packs/packages/account/src/lib/models/user.ts b/npm/ng-packs/packages/account/src/lib/models/user.ts index 89e307ddc5..5043ec3f02 100644 --- a/npm/ng-packs/packages/account/src/lib/models/user.ts +++ b/npm/ng-packs/packages/account/src/lib/models/user.ts @@ -14,7 +14,6 @@ export interface RegisterResponse { emailConfirmed: boolean; phoneNumber: string; phoneNumberConfirmed: boolean; - twoFactorEnabled: boolean; lockoutEnabled: boolean; lockoutEnd: string; concurrencyStamp: string; diff --git a/npm/ng-packs/packages/feature-management/src/lib/proxy/generate-proxy.json b/npm/ng-packs/packages/feature-management/src/lib/proxy/generate-proxy.json index eb3fe8d564..e022e5ea1f 100644 --- a/npm/ng-packs/packages/feature-management/src/lib/proxy/generate-proxy.json +++ b/npm/ng-packs/packages/feature-management/src/lib/proxy/generate-proxy.json @@ -3,16 +3,16 @@ "featureManagement" ], "modules": { - "leptonThemeManagement": { - "rootPath": "leptonThemeManagement", - "remoteServiceName": "LeptonThemeManagement", + "accountAdmin": { + "rootPath": "accountAdmin", + "remoteServiceName": "AbpAccountAdmin", "controllers": { - "Volo.Abp.LeptonTheme.LeptonThemeSettingsController": { - "controllerName": "LeptonThemeSettings", - "type": "Volo.Abp.LeptonTheme.LeptonThemeSettingsController", + "Volo.Abp.Account.AccountSettingsController": { + "controllerName": "AccountSettings", + "type": "Volo.Abp.Account.AccountSettingsController", "interfaces": [ { - "type": "Volo.Abp.LeptonTheme.Management.ILeptonThemeSettingsAppService" + "type": "Volo.Abp.Account.IAccountSettingsAppService" } ], "actions": { @@ -20,27 +20,27 @@ "uniqueName": "GetAsync", "name": "GetAsync", "httpMethod": "GET", - "url": "api/lepton-theme-management/settings", + "url": "api/account-admin/settings", "supportedVersions": [], "parametersOnMethod": [], "parameters": [], "returnValue": { - "type": "Volo.Abp.LeptonTheme.Management.LeptonThemeSettingsDto", - "typeSimple": "Volo.Abp.LeptonTheme.Management.LeptonThemeSettingsDto" + "type": "Volo.Abp.Account.AccountSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountSettingsDto" } }, "UpdateAsyncByInput": { "uniqueName": "UpdateAsyncByInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/lepton-theme-management/settings", + "url": "api/account-admin/settings", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto, Volo.Abp.LeptonTheme.Management.Application.Contracts", - "type": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", - "typeSimple": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "typeAsString": "Volo.Abp.Account.AccountSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", + "type": "Volo.Abp.Account.AccountSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountSettingsDto", "isOptional": false, "defaultValue": null } @@ -49,8 +49,102 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", - "typeSimple": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "type": "Volo.Abp.Account.AccountSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetLdapAsync": { + "uniqueName": "GetLdapAsync", + "name": "GetLdapAsync", + "httpMethod": "GET", + "url": "api/account-admin/settings/ldap", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Account.AccountLdapSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto" + } + }, + "UpdateLdapAsyncByInput": { + "uniqueName": "UpdateLdapAsyncByInput", + "name": "UpdateLdapAsync", + "httpMethod": "PUT", + "url": "api/account-admin/settings/ldap", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.AccountLdapSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", + "type": "Volo.Abp.Account.AccountLdapSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.AccountLdapSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetTwoFactorAsync": { + "uniqueName": "GetTwoFactorAsync", + "name": "GetTwoFactorAsync", + "httpMethod": "GET", + "url": "api/account-admin/settings/two-factor", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountTwoFactorSettingsDto" + } + }, + "UpdateTwoFactorAsyncByInput": { + "uniqueName": "UpdateTwoFactorAsyncByInput", + "name": "UpdateTwoFactorAsync", + "httpMethod": "PUT", + "url": "api/account-admin/settings/two-factor", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.AccountTwoFactorSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", + "type": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.AccountTwoFactorSettingsDto", + "typeSimple": "Volo.Abp.Account.AccountTwoFactorSettingsDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -67,65 +161,95 @@ } } }, - "saas": { - "rootPath": "saas", - "remoteServiceName": "SaasHost", + "leptonThemeManagement": { + "rootPath": "leptonThemeManagement", + "remoteServiceName": "LeptonThemeManagement", "controllers": { - "Volo.Saas.Host.EditionController": { - "controllerName": "Edition", - "type": "Volo.Saas.Host.EditionController", + "Volo.Abp.LeptonTheme.LeptonThemeSettingsController": { + "controllerName": "LeptonThemeSettings", + "type": "Volo.Abp.LeptonTheme.LeptonThemeSettingsController", "interfaces": [ { - "type": "Volo.Saas.Host.IEditionAppService" + "type": "Volo.Abp.LeptonTheme.Management.ILeptonThemeSettingsAppService" } ], "actions": { - "GetAsyncById": { - "uniqueName": "GetAsyncById", + "GetAsync": { + "uniqueName": "GetAsync", "name": "GetAsync", "httpMethod": "GET", - "url": "api/saas/editions/{id}", + "url": "api/lepton-theme-management/settings", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.LeptonTheme.Management.LeptonThemeSettingsDto", + "typeSimple": "Volo.Abp.LeptonTheme.Management.LeptonThemeSettingsDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/lepton-theme-management/settings", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto, Volo.Abp.LeptonTheme.Management.Application.Contracts", + "type": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "typeSimple": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", + "typeSimple": "Volo.Abp.LeptonTheme.Management.UpdateLeptonThemeSettingsDto", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "Body", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Saas.Host.Dtos.EditionDto", - "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" + "type": "System.Void", + "typeSimple": "System.Void" } - }, + } + } + } + } + }, + "identityServer": { + "rootPath": "identityServer", + "remoteServiceName": "AbpIdentityServer", + "controllers": { + "Volo.Abp.IdentityServer.ApiResourcesController": { + "controllerName": "ApiResources", + "type": "Volo.Abp.IdentityServer.ApiResourcesController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.ApiResource.IApiResourceAppService" + } + ], + "actions": { "GetListAsyncByInput": { "uniqueName": "GetListAsyncByInput", "name": "GetListAsync", "httpMethod": "GET", - "url": "api/saas/editions", + "url": "api/identity-server/api-resources", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Saas.Host.Dtos.GetEditionsInput, Volo.Saas.Host.Application.Contracts", - "type": "Volo.Saas.Host.Dtos.GetEditionsInput", - "typeSimple": "Volo.Saas.Host.Dtos.GetEditionsInput", + "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput", "isOptional": false, "defaultValue": null } @@ -177,49 +301,28 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/saas/editions", + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity-server/api-resources/all", "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.Saas.Host.Dtos.EditionCreateDto, Volo.Saas.Host.Application.Contracts", - "type": "Volo.Saas.Host.Dtos.EditionCreateDto", - "typeSimple": "Volo.Saas.Host.Dtos.EditionCreateDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Saas.Host.Dtos.EditionCreateDto", - "typeSimple": "Volo.Saas.Host.Dtos.EditionCreateDto", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], + "parametersOnMethod": [], + "parameters": [], "returnValue": { - "type": "Volo.Saas.Host.Dtos.EditionDto", - "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto]" } }, - "UpdateAsyncByIdAndInput": { - "uniqueName": "UpdateAsyncByIdAndInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/saas/editions/{id}", + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity-server/api-resources/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -229,14 +332,6 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.Saas.Host.Dtos.EditionUpdateDto, Volo.Saas.Host.Application.Contracts", - "type": "Volo.Saas.Host.Dtos.EditionUpdateDto", - "typeSimple": "Volo.Saas.Host.Dtos.EditionUpdateDto", - "isOptional": false, - "defaultValue": null } ], "parameters": [ @@ -250,12 +345,35 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - }, + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" + } + }, + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity-server/api-resources", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Saas.Host.Dtos.EditionUpdateDto", - "typeSimple": "Volo.Saas.Host.Dtos.EditionUpdateDto", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -264,15 +382,15 @@ } ], "returnValue": { - "type": "Volo.Saas.Host.Dtos.EditionDto", - "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" } }, - "DeleteAsyncById": { - "uniqueName": "DeleteAsyncById", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/saas/editions/{id}", + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity-server/api-resources/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -282,6 +400,14 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "isOptional": false, + "defaultValue": null } ], "parameters": [ @@ -295,42 +421,29 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" } }, - "GetUsageStatistics": { - "uniqueName": "GetUsageStatistics", - "name": "GetUsageStatistics", - "httpMethod": "GET", - "url": "api/saas/editions/statistics/usage-statistic", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Saas.Host.GetEditionUsageStatisticsResult", - "typeSimple": "Volo.Saas.Host.GetEditionUsageStatisticsResult" - } - } - } - }, - "Volo.Saas.Host.TenantController": { - "controllerName": "Tenant", - "type": "Volo.Saas.Host.TenantController", - "interfaces": [ - { - "type": "Volo.Saas.Host.ITenantAppService" - } - ], - "actions": { - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/saas/tenants/{id}", + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity-server/api-resources", "supportedVersions": [], "parametersOnMethod": [ { @@ -350,28 +463,39 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "ModelBinding", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Saas.Host.Dtos.SaasTenantDto", - "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" + "type": "System.Void", + "typeSimple": "System.Void" } - }, + } + } + }, + "Volo.Abp.IdentityServer.ClientsController": { + "controllerName": "Clients", + "type": "Volo.Abp.IdentityServer.ClientsController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.Client.IClientAppService" + } + ], + "actions": { "GetListAsyncByInput": { "uniqueName": "GetListAsyncByInput", "name": "GetListAsync", "httpMethod": "GET", - "url": "api/saas/tenants", + "url": "api/identity-server/clients", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Saas.Host.Dtos.GetTenantsInput, Volo.Saas.Host.Application.Contracts", - "type": "Volo.Saas.Host.Dtos.GetTenantsInput", - "typeSimple": "Volo.Saas.Host.Dtos.GetTenantsInput", + "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput", "isOptional": false, "defaultValue": null } @@ -388,17 +512,6 @@ "bindingSourceId": "ModelBinding", "descriptorName": "input" }, - { - "nameOnMethod": "input", - "name": "GetEditionNames", - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, { "nameOnMethod": "input", "name": "Sorting", @@ -434,22 +547,56 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity-server/clients/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" } }, "CreateAsyncByInput": { "uniqueName": "CreateAsyncByInput", "name": "CreateAsync", "httpMethod": "POST", - "url": "api/saas/tenants", + "url": "api/identity-server/clients", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Saas.Host.Dtos.SaasTenantCreateDto, Volo.Saas.Host.Application.Contracts", - "type": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", - "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", "isOptional": false, "defaultValue": null } @@ -458,8 +605,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", - "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "type": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -468,15 +615,15 @@ } ], "returnValue": { - "type": "Volo.Saas.Host.Dtos.SaasTenantDto", - "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" + "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" } }, "UpdateAsyncByIdAndInput": { "uniqueName": "UpdateAsyncByIdAndInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/saas/tenants/{id}", + "url": "api/identity-server/clients/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -489,9 +636,9 @@ }, { "name": "input", - "typeAsString": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto, Volo.Saas.Host.Application.Contracts", - "type": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", - "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", "isOptional": false, "defaultValue": null } @@ -511,8 +658,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", - "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "type": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -521,15 +668,15 @@ } ], "returnValue": { - "type": "Volo.Saas.Host.Dtos.SaasTenantDto", - "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" + "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" } }, "DeleteAsyncById": { "uniqueName": "DeleteAsyncById", "name": "DeleteAsync", "httpMethod": "DELETE", - "url": "api/saas/tenants/{id}", + "url": "api/identity-server/clients", "supportedVersions": [], "parametersOnMethod": [ { @@ -549,8 +696,8 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "ModelBinding", "descriptorName": "" } ], @@ -558,166 +705,39 @@ "type": "System.Void", "typeSimple": "System.Void" } - }, - "GetDefaultConnectionStringAsyncById": { - "uniqueName": "GetDefaultConnectionStringAsyncById", - "name": "GetDefaultConnectionStringAsync", + } + } + }, + "Volo.Abp.IdentityServer.IdentityResourcesController": { + "controllerName": "IdentityResources", + "type": "Volo.Abp.IdentityServer.IdentityResourcesController", + "interfaces": [ + { + "type": "Volo.Abp.IdentityServer.IdentityResource.IIdentityResourceAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", "httpMethod": "GET", - "url": "api/saas/tenants/{id}/default-connection-string", + "url": "api/identity-server/identity-resources", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.String", - "typeSimple": "string" - } - }, - "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { - "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", - "name": "UpdateDefaultConnectionStringAsync", - "httpMethod": "PUT", - "url": "api/saas/tenants/{id}/default-connection-string", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "defaultConnectionString", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, - { - "nameOnMethod": "defaultConnectionString", - "name": "defaultConnectionString", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - "DeleteDefaultConnectionStringAsyncById": { - "uniqueName": "DeleteDefaultConnectionStringAsyncById", - "name": "DeleteDefaultConnectionStringAsync", - "httpMethod": "DELETE", - "url": "api/saas/tenants/{id}/default-connection-string", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - } - } - } - } - }, - "identity": { - "rootPath": "identity", - "remoteServiceName": "AbpIdentity", - "controllers": { - "Volo.Abp.Identity.IdentityClaimTypeController": { - "controllerName": "IdentityClaimType", - "type": "Volo.Abp.Identity.IdentityClaimTypeController", - "interfaces": [ - { - "type": "Volo.Abp.Identity.IIdentityClaimTypeAppService" - } - ], - "actions": { - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/identity/claim-types", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.Abp.Identity.GetIdentityClaimTypesInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.GetIdentityClaimTypesInput", - "typeSimple": "Volo.Abp.Identity.GetIdentityClaimTypesInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Filter", - "type": "System.String", + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, @@ -760,15 +780,28 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + }, + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity-server/identity-resources/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto]" } }, "GetAsyncById": { "uniqueName": "GetAsyncById", "name": "GetAsync", "httpMethod": "GET", - "url": "api/identity/claim-types/{id}", + "url": "api/identity-server/identity-resources/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -794,22 +827,22 @@ } ], "returnValue": { - "type": "Volo.Abp.Identity.ClaimTypeDto", - "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" } }, "CreateAsyncByInput": { "uniqueName": "CreateAsyncByInput", "name": "CreateAsync", "httpMethod": "POST", - "url": "api/identity/claim-types", + "url": "api/identity-server/identity-resources", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.Identity.CreateClaimTypeDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.CreateClaimTypeDto", - "typeSimple": "Volo.Abp.Identity.CreateClaimTypeDto", + "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", "isOptional": false, "defaultValue": null } @@ -818,8 +851,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Identity.CreateClaimTypeDto", - "typeSimple": "Volo.Abp.Identity.CreateClaimTypeDto", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -828,15 +861,15 @@ } ], "returnValue": { - "type": "Volo.Abp.Identity.ClaimTypeDto", - "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" } }, "UpdateAsyncByIdAndInput": { "uniqueName": "UpdateAsyncByIdAndInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/identity/claim-types/{id}", + "url": "api/identity-server/identity-resources/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -849,9 +882,9 @@ }, { "name": "input", - "typeAsString": "Volo.Abp.Identity.UpdateClaimTypeDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.UpdateClaimTypeDto", - "typeSimple": "Volo.Abp.Identity.UpdateClaimTypeDto", + "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto, Volo.Abp.IdentityServer.Application.Contracts", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", "isOptional": false, "defaultValue": null } @@ -871,8 +904,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Identity.UpdateClaimTypeDto", - "typeSimple": "Volo.Abp.Identity.UpdateClaimTypeDto", + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -881,15 +914,15 @@ } ], "returnValue": { - "type": "Volo.Abp.Identity.ClaimTypeDto", - "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" + "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", + "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" } }, "DeleteAsyncById": { "uniqueName": "DeleteAsyncById", "name": "DeleteAsync", "httpMethod": "DELETE", - "url": "api/identity/claim-types/{id}", + "url": "api/identity-server/identity-resources", "supportedVersions": [], "parametersOnMethod": [ { @@ -909,8 +942,8 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "ModelBinding", "descriptorName": "" } ], @@ -918,165 +951,178 @@ "type": "System.Void", "typeSimple": "System.Void" } + }, + "CreateStandardResourcesAsync": { + "uniqueName": "CreateStandardResourcesAsync", + "name": "CreateStandardResourcesAsync", + "httpMethod": "POST", + "url": "api/identity-server/identity-resources/create-standard-resources", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } } } }, - "Volo.Abp.Identity.IdentityRoleController": { - "controllerName": "IdentityRole", - "type": "Volo.Abp.Identity.IdentityRoleController", + "Volo.Abp.IdentityServer.IdentityServerClaimTypesController": { + "controllerName": "IdentityServerClaimTypes", + "type": "Volo.Abp.IdentityServer.IdentityServerClaimTypesController", "interfaces": [ { - "type": "Volo.Abp.Identity.IIdentityRoleAppService" + "type": "Volo.Abp.IdentityServer.ClaimType.IIdentityServerClaimTypeAppService" } ], "actions": { - "GetAsyncById": { - "uniqueName": "GetAsyncById", + "GetListAsync": { + "uniqueName": "GetListAsync", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity-server/claim-types", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.IdentityServer.ClaimType.Dtos.IdentityClaimTypeDto]" + } + } + } + } + } + }, + "featureManagement": { + "rootPath": "featureManagement", + "remoteServiceName": "AbpFeatureManagement", + "controllers": { + "Volo.Abp.FeatureManagement.FeaturesController": { + "controllerName": "Features", + "type": "Volo.Abp.FeatureManagement.FeaturesController", + "interfaces": [ + { + "type": "Volo.Abp.FeatureManagement.IFeatureAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", "name": "GetAsync", "httpMethod": "GET", - "url": "api/identity/roles/{id}", + "url": "api/feature-management/features", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "ModelBinding", "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.Identity.IdentityRoleDto", - "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" - } - }, - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/identity/roles", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.Abp.Identity.IdentityRoleCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.IdentityRoleCreateDto", - "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + }, { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Identity.IdentityRoleCreateDto", - "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", + "bindingSourceId": "ModelBinding", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.Identity.IdentityRoleDto", - "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" + "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", + "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" } }, - "UpdateAsyncByIdAndInput": { - "uniqueName": "UpdateAsyncByIdAndInput", + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/identity/roles/{id}", + "url": "api/feature-management/features", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null }, { "name": "input", - "typeAsString": "Volo.Abp.Identity.IdentityRoleUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", - "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "ModelBinding", "descriptorName": "" }, { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", - "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", + "bindingSourceId": "ModelBinding", "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.Identity.IdentityRoleDto", - "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" - } - }, - "DeleteAsyncById": { - "uniqueName": "DeleteAsyncById", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/identity/roles/{id}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + }, { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "Body", "descriptorName": "" } ], @@ -1084,32 +1130,36 @@ "type": "System.Void", "typeSimple": "System.Void" } - }, - "GetAllListAsync": { - "uniqueName": "GetAllListAsync", - "name": "GetAllListAsync", - "httpMethod": "GET", - "url": "api/identity/roles/all", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - } - }, - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", + } + } + } + } + }, + "textTemplateManagement": { + "rootPath": "textTemplateManagement", + "remoteServiceName": "TextTemplateManagement", + "controllers": { + "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateContentController": { + "controllerName": "TemplateContent", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateContentController", + "interfaces": [ + { + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.ITemplateContentAppService" + } + ], + "actions": { + "GetAsyncByInput": { + "uniqueName": "GetAsyncByInput", + "name": "GetAsync", "httpMethod": "GET", - "url": "api/identity/roles", + "url": "api/text-template-management/template-contents", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.Identity.GetIdentityRoleListInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.GetIdentityRoleListInput", - "typeSimple": "Volo.Abp.Identity.GetIdentityRoleListInput", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput", "isOptional": false, "defaultValue": null } @@ -1117,7 +1167,7 @@ "parameters": [ { "nameOnMethod": "input", - "name": "Filter", + "name": "TemplateName", "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -1128,7 +1178,7 @@ }, { "nameOnMethod": "input", - "name": "Sorting", + "name": "CultureName", "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -1136,80 +1186,39 @@ "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "SkipCount", - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MaxResultCount", - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto" } }, - "UpdateClaimsAsyncByIdAndInput": { - "uniqueName": "UpdateClaimsAsyncByIdAndInput", - "name": "UpdateClaimsAsync", + "RestoreToDefaultAsyncByInput": { + "uniqueName": "RestoreToDefaultAsyncByInput", + "name": "RestoreToDefaultAsync", "httpMethod": "PUT", - "url": "api/identity/roles/{id}/claims", + "url": "api/text-template-management/template-contents/restore-to-default", "supportedVersions": [], "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, { "name": "input", - "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.Identity.IdentityRoleClaimDto, Volo.Abp.Identity.Pro.Application.Contracts, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, - { - "nameOnMethod": "input", - "name": "input", - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", + "constraintTypes": null, + "bindingSourceId": "Body", "descriptorName": "" } ], @@ -1218,61 +1227,48 @@ "typeSimple": "System.Void" } }, - "GetClaimsAsyncById": { - "uniqueName": "GetClaimsAsyncById", - "name": "GetClaimsAsync", - "httpMethod": "GET", - "url": "api/identity/roles/{id}/claims", + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/text-template-management/template-contents", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "Body", "descriptorName": "" } ], "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]" - } - }, - "GetAllClaimTypesAsync": { - "uniqueName": "GetAllClaimTypesAsync", - "name": "GetAllClaimTypesAsync", - "httpMethod": "GET", - "url": "api/identity/roles/all-claim-types", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.Identity.ClaimTypeDto]" + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto" } } } }, - "Volo.Abp.Identity.IdentitySecurityLogController": { - "controllerName": "IdentitySecurityLog", - "type": "Volo.Abp.Identity.IdentitySecurityLogController", + "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionController": { + "controllerName": "TemplateDefinition", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionController", "interfaces": [ { - "type": "Volo.Abp.Identity.IIdentitySecurityLogAppService" + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.ITemplateDefinitionAppService" } ], "actions": { @@ -1280,14 +1276,14 @@ "uniqueName": "GetListAsyncByInput", "name": "GetListAsync", "httpMethod": "GET", - "url": "api/identity/security-logs", + "url": "api/text-template-management/template-definitions", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.Identity.GetIdentitySecurityLogListInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", - "typeSimple": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput, Volo.Abp.TextTemplateManagement.Application.Contracts", + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput", "isOptional": false, "defaultValue": null } @@ -1295,90 +1291,13 @@ "parameters": [ { "nameOnMethod": "input", - "name": "StartTime", - "type": "System.DateTime?", - "typeSimple": "string?", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Query", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "EndTime", - "type": "System.DateTime?", - "typeSimple": "string?", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Query", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ApplicationName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Query", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Identity", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Query", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Action", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Query", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "UserName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Query", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ClientId", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Query", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "CorrelationId", + "name": "FilterText", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", + "bindingSourceId": "ModelBinding", "descriptorName": "input" }, { @@ -1389,7 +1308,7 @@ "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", + "bindingSourceId": "ModelBinding", "descriptorName": "input" }, { @@ -1400,7 +1319,7 @@ "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", + "bindingSourceId": "ModelBinding", "descriptorName": "input" }, { @@ -1411,26 +1330,26 @@ "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", + "bindingSourceId": "ModelBinding", "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "GetAsyncById": { - "uniqueName": "GetAsyncById", + "GetAsyncByName": { + "uniqueName": "GetAsyncByName", "name": "GetAsync", "httpMethod": "GET", - "url": "api/identity/security-logs/{id}", + "url": "api/text-template-management/template-definitions/{name}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null @@ -1438,9 +1357,9 @@ ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "name", + "name": "name", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, @@ -1450,113 +1369,252 @@ } ], "returnValue": { - "type": "Volo.Abp.Identity.IdentitySecurityLogDto", - "typeSimple": "Volo.Abp.Identity.IdentitySecurityLogDto" + "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionDto", + "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionDto" } - }, - "GetMyListAsyncByInput": { - "uniqueName": "GetMyListAsyncByInput", - "name": "GetMyListAsync", + } + } + } + } + }, + "permissionManagement": { + "rootPath": "permissionManagement", + "remoteServiceName": "AbpPermissionManagement", + "controllers": { + "Volo.Abp.PermissionManagement.PermissionsController": { + "controllerName": "Permissions", + "type": "Volo.Abp.PermissionManagement.PermissionsController", + "interfaces": [ + { + "type": "Volo.Abp.PermissionManagement.IPermissionAppService" + } + ], + "actions": { + "GetAsyncByProviderNameAndProviderKey": { + "uniqueName": "GetAsyncByProviderNameAndProviderKey", + "name": "GetAsync", "httpMethod": "GET", - "url": "api/identity/security-logs/my", + "url": "api/permission-management/permissions", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.Abp.Identity.GetIdentitySecurityLogListInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", - "typeSimple": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "StartTime", - "type": "System.DateTime?", - "typeSimple": "string?", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Query", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "EndTime", - "type": "System.DateTime?", - "typeSimple": "string?", + "nameOnMethod": "providerName", + "name": "providerName", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", - "descriptorName": "input" + "bindingSourceId": "ModelBinding", + "descriptorName": "" }, { - "nameOnMethod": "input", - "name": "ApplicationName", + "nameOnMethod": "providerKey", + "name": "providerKey", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", - "descriptorName": "input" + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", + "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + } + }, + "UpdateAsyncByProviderNameAndProviderKeyAndInput": { + "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/permission-management/permissions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "providerName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null }, { - "nameOnMethod": "input", - "name": "Identity", + "name": "providerKey", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "providerName", + "name": "providerName", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", - "descriptorName": "input" + "bindingSourceId": "ModelBinding", + "descriptorName": "" + }, + { + "nameOnMethod": "providerKey", + "name": "providerKey", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "" }, { "nameOnMethod": "input", - "name": "Action", + "name": "input", + "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "languageManagement": { + "rootPath": "languageManagement", + "remoteServiceName": "LanguageManagement", + "controllers": { + "Volo.Abp.LanguageManagement.LanguageController": { + "controllerName": "Language", + "type": "Volo.Abp.LanguageManagement.LanguageController", + "interfaces": [ + { + "type": "Volo.Abp.LanguageManagement.ILanguageAppService" + } + ], + "actions": { + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/language-management/languages/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/language-management/languages", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", + "bindingSourceId": "ModelBinding", "descriptorName": "input" }, { "nameOnMethod": "input", - "name": "UserName", + "name": "ResourceName", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", + "bindingSourceId": "ModelBinding", "descriptorName": "input" }, { "nameOnMethod": "input", - "name": "ClientId", + "name": "BaseCultureName", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", + "bindingSourceId": "ModelBinding", "descriptorName": "input" }, { "nameOnMethod": "input", - "name": "CorrelationId", + "name": "TargetCultureName", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "GetOnlyEmptyValues", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", "descriptorName": "input" }, { @@ -1567,7 +1625,7 @@ "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", + "bindingSourceId": "ModelBinding", "descriptorName": "input" }, { @@ -1578,7 +1636,7 @@ "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", + "bindingSourceId": "ModelBinding", "descriptorName": "input" }, { @@ -1589,20 +1647,20 @@ "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Query", + "bindingSourceId": "ModelBinding", "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" } }, - "GetMyAsyncById": { - "uniqueName": "GetMyAsyncById", - "name": "GetMyAsync", + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", "httpMethod": "GET", - "url": "api/identity/security-logs/my/{id}", + "url": "api/language-management/languages/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -1628,46 +1686,22 @@ } ], "returnValue": { - "type": "Volo.Abp.Identity.IdentitySecurityLogDto", - "typeSimple": "Volo.Abp.Identity.IdentitySecurityLogDto" - } - } - } - }, - "Volo.Abp.Identity.IdentitySettingsController": { - "controllerName": "IdentitySettings", - "type": "Volo.Abp.Identity.IdentitySettingsController", - "interfaces": [ - { - "type": "Volo.Abp.Identity.IIdentitySettingsAppService" - } - ], - "actions": { - "GetAsync": { - "uniqueName": "GetAsync", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/identity/settings", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Abp.Identity.IdentitySettingsDto", - "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto" + "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" } }, - "UpdateAsyncByInput": { - "uniqueName": "UpdateAsyncByInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/identity/settings", + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/language-management/languages", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.Identity.IdentitySettingsDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.IdentitySettingsDto", - "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", "isOptional": false, "defaultValue": null } @@ -1676,8 +1710,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Identity.IdentitySettingsDto", - "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto", + "type": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -1686,26 +1720,15 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" } - } - } - }, - "Volo.Abp.Identity.IdentityUserController": { - "controllerName": "IdentityUser", - "type": "Volo.Abp.Identity.IdentityUserController", - "interfaces": [ - { - "type": "Volo.Abp.Identity.IIdentityUserAppService" - } - ], - "actions": { - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/identity/users/{id}", + }, + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/language-management/languages/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -1713,149 +1736,14 @@ "typeAsString": "System.Guid, System.Private.CoreLib", "type": "System.Guid", "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.Identity.IdentityUserDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserDto" - } - }, - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/identity/users", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.GetIdentityUsersInput", - "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Filter", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Sorting", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "SkipCount", - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MaxResultCount", - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - } - }, - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/identity/users", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.Abp.Identity.IdentityUserCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.IdentityUserCreateDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Identity.IdentityUserCreateDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.Identity.IdentityUserDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserDto" - } - }, - "UpdateAsyncByIdAndInput": { - "uniqueName": "UpdateAsyncByIdAndInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/identity/users/{id}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.IdentityUserUpdateDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "isOptional": false, + "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", "isOptional": false, "defaultValue": null } @@ -1875,8 +1763,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Identity.IdentityUserUpdateDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", + "type": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -1885,15 +1773,15 @@ } ], "returnValue": { - "type": "Volo.Abp.Identity.IdentityUserDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" } }, "DeleteAsyncById": { "uniqueName": "DeleteAsyncById", "name": "DeleteAsync", "httpMethod": "DELETE", - "url": "api/identity/users/{id}", + "url": "api/language-management/languages/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -1923,11 +1811,11 @@ "typeSimple": "System.Void" } }, - "GetRolesAsyncById": { - "uniqueName": "GetRolesAsyncById", - "name": "GetRolesAsync", - "httpMethod": "GET", - "url": "api/identity/users/{id}/roles", + "SetAsDefaultAsyncById": { + "uniqueName": "SetAsDefaultAsyncById", + "name": "SetAsDefaultAsync", + "httpMethod": "PUT", + "url": "api/language-management/languages/{id}/set-as-default", "supportedVersions": [], "parametersOnMethod": [ { @@ -1953,199 +1841,203 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - } - }, - "GetAssignableRolesAsync": { - "uniqueName": "GetAssignableRolesAsync", - "name": "GetAssignableRolesAsync", - "httpMethod": "GET", - "url": "api/identity/users/assignable-roles", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + "type": "System.Void", + "typeSimple": "System.Void" } }, - "GetAvailableOrganizationUnitsAsync": { - "uniqueName": "GetAvailableOrganizationUnitsAsync", - "name": "GetAvailableOrganizationUnitsAsync", + "GetResourcesAsync": { + "uniqueName": "GetResourcesAsync", + "name": "GetResourcesAsync", "httpMethod": "GET", - "url": "api/identity/users/available-organization-units", + "url": "api/language-management/languages/resources", "supportedVersions": [], "parametersOnMethod": [], "parameters": [], "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.LanguageManagement.Dto.LanguageResourceDto]" } }, - "GetAllClaimTypesAsync": { - "uniqueName": "GetAllClaimTypesAsync", - "name": "GetAllClaimTypesAsync", + "GetCulturelistAsync": { + "uniqueName": "GetCulturelistAsync", + "name": "GetCulturelistAsync", "httpMethod": "GET", - "url": "api/identity/users/all-claim-types", + "url": "api/language-management/languages/culture-list", "supportedVersions": [], "parametersOnMethod": [], "parameters": [], "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.Identity.ClaimTypeDto]" + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.LanguageManagement.Dto.CultureInfoDto]" } - }, - "GetClaimsAsyncById": { - "uniqueName": "GetClaimsAsyncById", - "name": "GetClaimsAsync", + } + } + }, + "Volo.Abp.LanguageManagement.LanguageTextController": { + "controllerName": "LanguageText", + "type": "Volo.Abp.LanguageManagement.LanguageTextController", + "interfaces": [ + { + "type": "Volo.Abp.LanguageManagement.ILanguageTextAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", "httpMethod": "GET", - "url": "api/identity/users/{id}/claims", + "url": "api/language-management/language-texts", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput, Volo.Abp.LanguageManagement.Application.Contracts", + "type": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "input", + "name": "Filter", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]" - } - }, - "GetOrganizationUnitsAsyncById": { - "uniqueName": "GetOrganizationUnitsAsyncById", - "name": "GetOrganizationUnitsAsync", - "httpMethod": "GET", - "url": "api/identity/users/{id}/organization-units", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ResourceName", + "type": "System.String", "typeSimple": "string", "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "input", + "name": "BaseCultureName", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.Identity.OrganizationUnitDto]" - } - }, - "UpdateRolesAsyncByIdAndInput": { - "uniqueName": "UpdateRolesAsyncByIdAndInput", - "name": "UpdateRolesAsync", - "httpMethod": "PUT", - "url": "api/identity/users/{id}/roles", - "supportedVersions": [], - "parametersOnMethod": [ + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "nameOnMethod": "input", + "name": "TargetCultureName", + "type": "System.String", "typeSimple": "string", "isOptional": false, - "defaultValue": null + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" }, { - "name": "input", - "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateRolesDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "nameOnMethod": "input", + "name": "GetOnlyEmptyValues", + "type": "System.Boolean", + "typeSimple": "boolean", "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" }, { "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "UpdateClaimsAsyncByIdAndInput": { - "uniqueName": "UpdateClaimsAsyncByIdAndInput", - "name": "UpdateClaimsAsync", - "httpMethod": "PUT", - "url": "api/identity/users/{id}/claims", + "GetAsyncByResourceNameAndCultureNameAndNameAndBaseCultureName": { + "uniqueName": "GetAsyncByResourceNameAndCultureNameAndNameAndBaseCultureName", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "name": "resourceName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null }, { - "name": "input", - "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.Identity.IdentityUserClaimDto, Volo.Abp.Identity.Pro.Application.Contracts, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]", + "name": "cultureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "baseCultureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "resourceName", + "name": "resourceName", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, @@ -2154,51 +2046,89 @@ "descriptorName": "" }, { - "nameOnMethod": "input", - "name": "input", - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]", + "nameOnMethod": "cultureName", + "name": "cultureName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "name", + "name": "name", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "baseCultureName", + "name": "baseCultureName", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", + "bindingSourceId": "ModelBinding", "descriptorName": "" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.LanguageManagement.Dto.LanguageTextDto", + "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageTextDto" } }, - "LockAsyncByIdAndLockoutDuration": { - "uniqueName": "LockAsyncByIdAndLockoutDuration", - "name": "LockAsync", + "UpdateAsyncByResourceNameAndCultureNameAndNameAndValue": { + "uniqueName": "UpdateAsyncByResourceNameAndCultureNameAndNameAndValue", + "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/identity/users/{id}/lock/{lockoutDuration}", + "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "name": "resourceName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null }, { - "name": "lockoutDuration", - "typeAsString": "System.Int32, System.Private.CoreLib", - "type": "System.Int32", - "typeSimple": "number", + "name": "cultureName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "value", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "resourceName", + "name": "resourceName", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, @@ -2207,48 +2137,36 @@ "descriptorName": "" }, { - "nameOnMethod": "lockoutDuration", - "name": "lockoutDuration", - "type": "System.Int32", - "typeSimple": "number", + "nameOnMethod": "cultureName", + "name": "cultureName", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - "UnlockAsyncById": { - "uniqueName": "UnlockAsyncById", - "name": "UnlockAsync", - "httpMethod": "PUT", - "url": "api/identity/users/{id}/unlock", - "supportedVersions": [], - "parametersOnMethod": [ + }, { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "nameOnMethod": "name", + "name": "name", + "type": "System.String", "typeSimple": "string", "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "value", + "name": "value", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "ModelBinding", "descriptorName": "" } ], @@ -2257,49 +2175,31 @@ "typeSimple": "System.Void" } }, - "FindByUsernameAsyncByUsername": { - "uniqueName": "FindByUsernameAsyncByUsername", - "name": "FindByUsernameAsync", - "httpMethod": "GET", - "url": "api/identity/users/by-username/{username}", + "RestoreToDefaultAsyncByResourceNameAndCultureNameAndName": { + "uniqueName": "RestoreToDefaultAsyncByResourceNameAndCultureNameAndName", + "name": "RestoreToDefaultAsync", + "httpMethod": "PUT", + "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}/restore", "supportedVersions": [], "parametersOnMethod": [ { - "name": "username", + "name": "resourceName", "typeAsString": "System.String, System.Private.CoreLib", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null - } - ], - "parameters": [ + }, { - "nameOnMethod": "username", - "name": "username", + "name": "cultureName", + "typeAsString": "System.String, System.Private.CoreLib", "type": "System.String", "typeSimple": "string", "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.Identity.IdentityUserDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserDto" - } - }, - "FindByEmailAsyncByEmail": { - "uniqueName": "FindByEmailAsyncByEmail", - "name": "FindByEmailAsync", - "httpMethod": "GET", - "url": "api/identity/users/by-email/{email}", - "supportedVersions": [], - "parametersOnMethod": [ + "defaultValue": null + }, { - "name": "email", + "name": "name", "typeAsString": "System.String, System.Private.CoreLib", "type": "System.String", "typeSimple": "string", @@ -2309,8 +2209,8 @@ ], "parameters": [ { - "nameOnMethod": "email", - "name": "email", + "nameOnMethod": "resourceName", + "name": "resourceName", "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -2318,42 +2218,11 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.Identity.IdentityUserDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserDto" - } - }, - "UpdatePasswordAsyncByIdAndInput": { - "uniqueName": "UpdatePasswordAsyncByIdAndInput", - "name": "UpdatePasswordAsync", - "httpMethod": "PUT", - "url": "api/identity/users/{id}/change-password", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null }, { - "name": "input", - "typeAsString": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", - "typeSimple": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "cultureName", + "name": "cultureName", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, @@ -2362,14 +2231,14 @@ "descriptorName": "" }, { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", - "typeSimple": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", + "nameOnMethod": "name", + "name": "name", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], @@ -2379,104 +2248,75 @@ } } } - }, - "Volo.Abp.Identity.IdentityUserLookupController": { - "controllerName": "IdentityUserLookup", - "type": "Volo.Abp.Identity.IdentityUserLookupController", + } + } + }, + "auditLogging": { + "rootPath": "auditLogging", + "remoteServiceName": "AbpAuditLogging", + "controllers": { + "Volo.Abp.AuditLogging.AuditLogsController": { + "controllerName": "AuditLogs", + "type": "Volo.Abp.AuditLogging.AuditLogsController", "interfaces": [ { - "type": "Volo.Abp.Identity.IIdentityUserLookupAppService" + "type": "Volo.Abp.AuditLogging.IAuditLogsAppService" } ], "actions": { - "FindByIdAsyncById": { - "uniqueName": "FindByIdAsyncById", - "name": "FindByIdAsync", + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", "httpMethod": "GET", - "url": "api/identity/users/lookup/{id}", + "url": "api/audit-logging/audit-logs", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.AuditLogging.GetAuditLogListDto, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetAuditLogListDto", + "typeSimple": "Volo.Abp.AuditLogging.GetAuditLogListDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "input", + "name": "Url", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.Users.UserData", - "typeSimple": "Volo.Abp.Users.UserData" - } - }, - "FindByUserNameAsyncByUserName": { - "uniqueName": "FindByUserNameAsyncByUserName", - "name": "FindByUserNameAsync", - "httpMethod": "GET", - "url": "api/identity/users/lookup/by-username/{userName}", - "supportedVersions": [], - "parametersOnMethod": [ + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "name": "userName", - "typeAsString": "System.String, System.Private.CoreLib", + "nameOnMethod": "input", + "name": "UserName", "type": "System.String", "typeSimple": "string", "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "nameOnMethod": "userName", - "name": "userName", + "nameOnMethod": "input", + "name": "ApplicationName", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.Users.UserData", - "typeSimple": "Volo.Abp.Users.UserData" - } - }, - "SearchAsyncByInput": { - "uniqueName": "SearchAsyncByInput", - "name": "SearchAsync", - "httpMethod": "GET", - "url": "api/identity/users/lookup/search", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.Abp.Identity.UserLookupSearchInputDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.UserLookupSearchInputDto", - "typeSimple": "Volo.Abp.Identity.UserLookupSearchInputDto", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { "nameOnMethod": "input", - "name": "Sorting", + "name": "CorrelationId", "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -2487,7 +2327,7 @@ }, { "nameOnMethod": "input", - "name": "Filter", + "name": "HttpMethod", "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -2498,9 +2338,9 @@ }, { "nameOnMethod": "input", - "name": "SkipCount", - "type": "System.Int32", - "typeSimple": "number", + "name": "HttpStatusCode", + "type": "System.Net.HttpStatusCode?", + "typeSimple": "System.Net.HttpStatusCode?", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -2509,124 +2349,81 @@ }, { "nameOnMethod": "input", - "name": "MaxResultCount", - "type": "System.Int32", - "typeSimple": "number", + "name": "MaxExecutionDuration", + "type": "System.Int32?", + "typeSimple": "number?", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - } - }, - "GetCountAsyncByInput": { - "uniqueName": "GetCountAsyncByInput", - "name": "GetCountAsync", - "httpMethod": "GET", - "url": "api/identity/users/lookup/count", - "supportedVersions": [], - "parametersOnMethod": [ + }, { - "name": "input", - "typeAsString": "Volo.Abp.Identity.UserLookupCountInputDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.UserLookupCountInputDto", - "typeSimple": "Volo.Abp.Identity.UserLookupCountInputDto", + "nameOnMethod": "input", + "name": "MinExecutionDuration", + "type": "System.Int32?", + "typeSimple": "number?", "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { "nameOnMethod": "input", - "name": "Filter", - "type": "System.String", - "typeSimple": "string", + "name": "HasException", + "type": "System.Boolean?", + "typeSimple": "boolean?", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "input" - } - ], - "returnValue": { - "type": "System.Int64", - "typeSimple": "number" - } - } - } - }, - "Volo.Abp.Identity.OrganizationUnitController": { - "controllerName": "OrganizationUnit", - "type": "Volo.Abp.Identity.OrganizationUnitController", - "interfaces": [ - { - "type": "Volo.Abp.Identity.IOrganizationUnitAppService" - } - ], - "actions": { - "AddRolesAsyncByIdAndInput": { - "uniqueName": "AddRolesAsyncByIdAndInput", - "name": "AddRolesAsync", - "httpMethod": "PUT", - "url": "api/identity/organization-units/{id}/roles", - "supportedVersions": [], - "parametersOnMethod": [ + }, { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", "typeSimple": "string", "isOptional": false, - "defaultValue": null + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" }, { - "name": "input", - "typeAsString": "Volo.Abp.Identity.OrganizationUnitRoleInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.OrganizationUnitRoleInput", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitRoleInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" }, { "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Identity.OrganizationUnitRoleInput", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitRoleInput", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "AddMembersAsyncByIdAndInput": { - "uniqueName": "AddMembersAsyncByIdAndInput", - "name": "AddMembersAsync", - "httpMethod": "PUT", - "url": "api/identity/organization-units/{id}/members", + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -2636,14 +2433,6 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.Abp.Identity.OrganizationUnitUserInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.OrganizationUnitUserInput", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitUserInput", - "isOptional": false, - "defaultValue": null } ], "parameters": [ @@ -2657,146 +2446,156 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - }, - { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Identity.OrganizationUnitUserInput", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitUserInput", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.AuditLogging.AuditLogDto", + "typeSimple": "Volo.Abp.AuditLogging.AuditLogDto" } }, - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/identity/organization-units", + "GetErrorRateAsyncByFilter": { + "uniqueName": "GetErrorRateAsyncByFilter", + "name": "GetErrorRateAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/statistics/error-rate", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.Abp.Identity.OrganizationUnitCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.OrganizationUnitCreateDto", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "name": "filter", + "typeAsString": "Volo.Abp.AuditLogging.GetErrorRateFilter, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetErrorRateFilter", + "typeSimple": "Volo.Abp.AuditLogging.GetErrorRateFilter", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Identity.OrganizationUnitCreateDto", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "nameOnMethod": "filter", + "name": "StartDate", + "type": "System.DateTime", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "bindingSourceId": "ModelBinding", + "descriptorName": "filter" + }, + { + "nameOnMethod": "filter", + "name": "EndDate", + "type": "System.DateTime", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "filter" } ], "returnValue": { - "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" + "type": "Volo.Abp.AuditLogging.GetErrorRateOutput", + "typeSimple": "Volo.Abp.AuditLogging.GetErrorRateOutput" } }, - "DeleteAsyncById": { - "uniqueName": "DeleteAsyncById", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/identity/organization-units", + "GetAverageExecutionDurationPerDayAsyncByFilter": { + "uniqueName": "GetAverageExecutionDurationPerDayAsyncByFilter", + "name": "GetAverageExecutionDurationPerDayAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/statistics/average-execution-duration-per-day", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "filter", + "typeAsString": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput", + "typeSimple": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "filter", + "name": "StartDate", + "type": "System.DateTime", "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", - "descriptorName": "" + "descriptorName": "filter" + }, + { + "nameOnMethod": "filter", + "name": "EndDate", + "type": "System.DateTime", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "filter" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayOutput", + "typeSimple": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayOutput" } }, - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", + "GetEntityChangesAsyncByInput": { + "uniqueName": "GetEntityChangesAsyncByInput", + "name": "GetEntityChangesAsync", "httpMethod": "GET", - "url": "api/identity/organization-units/{id}", + "url": "api/audit-logging/audit-logs/entity-changes", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.AuditLogging.GetEntityChangesDto, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.GetEntityChangesDto", + "typeSimple": "Volo.Abp.AuditLogging.GetEntityChangesDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "AuditLogId", + "type": "System.Guid?", + "typeSimple": "string?", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" - } - }, - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/identity/organization-units", - "supportedVersions": [], - "parametersOnMethod": [ + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "name": "input", - "typeAsString": "Volo.Abp.Identity.GetOrganizationUnitInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.GetOrganizationUnitInput", - "typeSimple": "Volo.Abp.Identity.GetOrganizationUnitInput", + "nameOnMethod": "input", + "name": "EntityChangeType", + "type": "Volo.Abp.Auditing.EntityChangeType?", + "typeSimple": "Volo.Abp.Auditing.EntityChangeType?", "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { "nameOnMethod": "input", - "name": "Filter", + "name": "EntityId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EntityTypeFullName", "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -2805,6 +2604,28 @@ "bindingSourceId": "ModelBinding", "descriptorName": "input" }, + { + "nameOnMethod": "input", + "name": "StartDate", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EndDate", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { "nameOnMethod": "input", "name": "Sorting", @@ -2840,64 +2661,32 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - } - }, - "GetListAllAsync": { - "uniqueName": "GetListAllAsync", - "name": "GetListAllAsync", - "httpMethod": "GET", - "url": "api/identity/organization-units/all", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "GetRolesAsyncByIdAndInput": { - "uniqueName": "GetRolesAsyncByIdAndInput", - "name": "GetRolesAsync", + "GetEntityChangesWithUsernameAsyncByInput": { + "uniqueName": "GetEntityChangesWithUsernameAsyncByInput", + "name": "GetEntityChangesWithUsernameAsync", "httpMethod": "GET", - "url": "api/identity/organization-units/{id}/roles", + "url": "api/audit-logging/audit-logs/entity-changes-with-username", "supportedVersions": [], "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, { "name": "input", - "typeAsString": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto, Volo.Abp.Ddd.Application.Contracts", - "type": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "typeAsString": "Volo.Abp.AuditLogging.EntityChangeFilter, Volo.Abp.AuditLogging.Application.Contracts", + "type": "Volo.Abp.AuditLogging.EntityChangeFilter", + "typeSimple": "Volo.Abp.AuditLogging.EntityChangeFilter", "isOptional": false, "defaultValue": null } ], "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, { "nameOnMethod": "input", - "name": "SkipCount", - "type": "System.Int32", - "typeSimple": "number", + "name": "EntityId", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -2906,52 +2695,118 @@ }, { "nameOnMethod": "input", - "name": "MaxResultCount", - "type": "System.Int32", - "typeSimple": "number", + "name": "EntityTypeFullName", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "input" - }, + } + ], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.AuditLogging.EntityChangeWithUsernameDto]" + } + }, + "GetEntityChangeWithUsernameAsyncByEntityChangeId": { + "uniqueName": "GetEntityChangeWithUsernameAsyncByEntityChangeId", + "name": "GetEntityChangeWithUsernameAsync", + "httpMethod": "GET", + "url": "api/audit-logging/audit-logs/entity-change-with-username/{entityChangeId}", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "Sorting", - "type": "System.String", + "name": "entityChangeId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "entityChangeId", + "name": "entityChangeId", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.AuditLogging.EntityChangeWithUsernameDto", + "typeSimple": "Volo.Abp.AuditLogging.EntityChangeWithUsernameDto" } }, - "GetMembersAsyncByIdAndInput": { - "uniqueName": "GetMembersAsyncByIdAndInput", - "name": "GetMembersAsync", + "GetEntityChangeAsyncByEntityChangeId": { + "uniqueName": "GetEntityChangeAsyncByEntityChangeId", + "name": "GetEntityChangeAsync", "httpMethod": "GET", - "url": "api/identity/organization-units/{id}/members", + "url": "api/audit-logging/audit-logs/entity-changes/{entityChangeId}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", + "name": "entityChangeId", "typeAsString": "System.Guid, System.Private.CoreLib", "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null - }, + } + ], + "parameters": [ { - "name": "input", - "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.GetIdentityUsersInput", - "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", + "nameOnMethod": "entityChangeId", + "name": "entityChangeId", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.AuditLogging.EntityChangeDto", + "typeSimple": "Volo.Abp.AuditLogging.EntityChangeDto" + } + } + } + } + } + }, + "saas": { + "rootPath": "saas", + "remoteServiceName": "SaasHost", + "controllers": { + "Volo.Saas.Host.EditionController": { + "controllerName": "Edition", + "type": "Volo.Saas.Host.EditionController", + "interfaces": [ + { + "type": "Volo.Saas.Host.IEditionAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/saas/editions/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null } @@ -2967,7 +2822,30 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - }, + } + ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.EditionDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" + } + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/saas/editions", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Saas.Host.Dtos.GetEditionsInput, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.GetEditionsInput", + "typeSimple": "Volo.Saas.Host.Dtos.GetEditionsInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ { "nameOnMethod": "input", "name": "Filter", @@ -3014,51 +2892,32 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "MoveAsyncByIdAndInput": { - "uniqueName": "MoveAsyncByIdAndInput", - "name": "MoveAsync", - "httpMethod": "PUT", - "url": "api/identity/organization-units/{id}/move", + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/saas/editions", "supportedVersions": [], "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, { "name": "input", - "typeAsString": "Volo.Abp.Identity.OrganizationUnitMoveInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.OrganizationUnitMoveInput", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "typeAsString": "Volo.Saas.Host.Dtos.EditionCreateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.EditionCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionCreateDto", "isOptional": false, "defaultValue": null } ], "parameters": [ - { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Identity.OrganizationUnitMoveInput", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "type": "Volo.Saas.Host.Dtos.EditionCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionCreateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -3067,15 +2926,15 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Saas.Host.Dtos.EditionDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" } }, "UpdateAsyncByIdAndInput": { "uniqueName": "UpdateAsyncByIdAndInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/identity/organization-units/{id}", + "url": "api/saas/editions/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3088,9 +2947,9 @@ }, { "name": "input", - "typeAsString": "Volo.Abp.Identity.OrganizationUnitUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.OrganizationUnitUpdateDto", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "typeAsString": "Volo.Saas.Host.Dtos.EditionUpdateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.EditionUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionUpdateDto", "isOptional": false, "defaultValue": null } @@ -3110,8 +2969,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Identity.OrganizationUnitUpdateDto", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "type": "Volo.Saas.Host.Dtos.EditionUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionUpdateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -3120,15 +2979,15 @@ } ], "returnValue": { - "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", - "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" + "type": "Volo.Saas.Host.Dtos.EditionDto", + "typeSimple": "Volo.Saas.Host.Dtos.EditionDto" } }, - "RemoveMemberAsyncByIdAndMemberId": { - "uniqueName": "RemoveMemberAsyncByIdAndMemberId", - "name": "RemoveMemberAsync", + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", "httpMethod": "DELETE", - "url": "api/identity/organization-units/{id}/members/{memberId}", + "url": "api/saas/editions/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3138,14 +2997,6 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null - }, - { - "name": "memberId", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null } ], "parameters": [ @@ -3159,17 +3010,6 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - }, - { - "nameOnMethod": "memberId", - "name": "memberId", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" } ], "returnValue": { @@ -3177,11 +3017,35 @@ "typeSimple": "System.Void" } }, - "RemoveRoleAsyncByIdAndRoleId": { - "uniqueName": "RemoveRoleAsyncByIdAndRoleId", - "name": "RemoveRoleAsync", - "httpMethod": "DELETE", - "url": "api/identity/organization-units/{id}/roles/{roleId}", + "GetUsageStatistics": { + "uniqueName": "GetUsageStatistics", + "name": "GetUsageStatistics", + "httpMethod": "GET", + "url": "api/saas/editions/statistics/usage-statistic", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Saas.Host.GetEditionUsageStatisticsResult", + "typeSimple": "Volo.Saas.Host.GetEditionUsageStatisticsResult" + } + } + } + }, + "Volo.Saas.Host.TenantController": { + "controllerName": "Tenant", + "type": "Volo.Saas.Host.TenantController", + "interfaces": [ + { + "type": "Volo.Saas.Host.ITenantAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/saas/tenants/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3191,14 +3055,6 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null - }, - { - "name": "roleId", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null } ], "parameters": [ @@ -3212,60 +3068,25 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - }, - { - "nameOnMethod": "roleId", - "name": "roleId", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - } - } - }, - "Volo.Abp.Identity.ProfileController": { - "controllerName": "Profile", - "type": "Volo.Abp.Identity.ProfileController", - "interfaces": [ - { - "type": "Volo.Abp.Identity.IProfileAppService" - } - ], - "actions": { - "GetAsync": { - "uniqueName": "GetAsync", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/identity/my-profile", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Abp.Identity.ProfileDto", - "typeSimple": "Volo.Abp.Identity.ProfileDto" + "type": "Volo.Saas.Host.Dtos.SaasTenantDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" } }, - "UpdateAsyncByInput": { - "uniqueName": "UpdateAsyncByInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/identity/my-profile", + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/saas/tenants", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.Identity.UpdateProfileDto, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.UpdateProfileDto", - "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "typeAsString": "Volo.Saas.Host.Dtos.GetTenantsInput, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.GetTenantsInput", + "typeSimple": "Volo.Saas.Host.Dtos.GetTenantsInput", "isOptional": false, "defaultValue": null } @@ -3273,34 +3094,78 @@ "parameters": [ { "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Identity.UpdateProfileDto", - "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "GetEditionNames", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.Identity.ProfileDto", - "typeSimple": "Volo.Abp.Identity.ProfileDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "ChangePasswordAsyncByInput": { - "uniqueName": "ChangePasswordAsyncByInput", - "name": "ChangePasswordAsync", + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", "httpMethod": "POST", - "url": "api/identity/my-profile/change-password", + "url": "api/saas/tenants", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.Identity.ChangePasswordInput, Volo.Abp.Identity.Pro.Application.Contracts", - "type": "Volo.Abp.Identity.ChangePasswordInput", - "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", - "isOptional": false, + "typeAsString": "Volo.Saas.Host.Dtos.SaasTenantCreateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "isOptional": false, "defaultValue": null } ], @@ -3308,8 +3173,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Identity.ChangePasswordInput", - "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "type": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantCreateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -3318,62 +3183,51 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - } - } - } - } - }, - "accountAdmin": { - "rootPath": "accountAdmin", - "remoteServiceName": "AbpAccountAdmin", - "controllers": { - "Volo.Abp.Account.AccountSettingsController": { - "controllerName": "AccountSettings", - "type": "Volo.Abp.Account.AccountSettingsController", - "interfaces": [ - { - "type": "Volo.Abp.Account.IAccountSettingsAppService" - } - ], - "actions": { - "GetAsync": { - "uniqueName": "GetAsync", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/account-admin/settings", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Abp.Account.AccountSettingsDto", - "typeSimple": "Volo.Abp.Account.AccountSettingsDto" + "type": "Volo.Saas.Host.Dtos.SaasTenantDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" } }, - "UpdateAsyncByInput": { - "uniqueName": "UpdateAsyncByInput", + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/account-admin/settings", + "url": "api/saas/tenants/{id}", "supportedVersions": [], "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, { "name": "input", - "typeAsString": "Volo.Abp.Account.AccountSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", - "type": "Volo.Abp.Account.AccountSettingsDto", - "typeSimple": "Volo.Abp.Account.AccountSettingsDto", + "typeAsString": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto, Volo.Saas.Host.Application.Contracts", + "type": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", "isOptional": false, "defaultValue": null } ], "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Account.AccountSettingsDto", - "typeSimple": "Volo.Abp.Account.AccountSettingsDto", + "type": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantUpdateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -3381,50 +3235,158 @@ "descriptorName": "" } ], + "returnValue": { + "type": "Volo.Saas.Host.Dtos.SaasTenantDto", + "typeSimple": "Volo.Saas.Host.Dtos.SaasTenantDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/saas/tenants/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], "returnValue": { "type": "System.Void", "typeSimple": "System.Void" } }, - "GetLdapAsync": { - "uniqueName": "GetLdapAsync", - "name": "GetLdapAsync", + "GetDefaultConnectionStringAsyncById": { + "uniqueName": "GetDefaultConnectionStringAsyncById", + "name": "GetDefaultConnectionStringAsync", "httpMethod": "GET", - "url": "api/account-admin/settings/ldap", + "url": "api/saas/tenants/{id}/default-connection-string", "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], "returnValue": { - "type": "Volo.Abp.Account.AccountLdapSettingsDto", - "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto" + "type": "System.String", + "typeSimple": "string" } }, - "UpdateLdapAsyncByInput": { - "uniqueName": "UpdateLdapAsyncByInput", - "name": "UpdateLdapAsync", + "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString": { + "uniqueName": "UpdateDefaultConnectionStringAsyncByIdAndDefaultConnectionString", + "name": "UpdateDefaultConnectionStringAsync", "httpMethod": "PUT", - "url": "api/account-admin/settings/ldap", + "url": "api/saas/tenants/{id}/default-connection-string", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.Abp.Account.AccountLdapSettingsDto, Volo.Abp.Account.Pro.Admin.Application.Contracts", - "type": "Volo.Abp.Account.AccountLdapSettingsDto", - "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "defaultConnectionString", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Account.AccountLdapSettingsDto", - "typeSimple": "Volo.Abp.Account.AccountLdapSettingsDto", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "defaultConnectionString", + "name": "defaultConnectionString", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", + "bindingSourceId": "ModelBinding", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "DeleteDefaultConnectionStringAsyncById": { + "uniqueName": "DeleteDefaultConnectionStringAsyncById", + "name": "DeleteDefaultConnectionStringAsync", + "httpMethod": "DELETE", + "url": "api/saas/tenants/{id}/default-connection-string", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], @@ -3437,16 +3399,16 @@ } } }, - "identityServer": { - "rootPath": "identityServer", - "remoteServiceName": "AbpIdentityServer", + "identity": { + "rootPath": "identity", + "remoteServiceName": "AbpIdentity", "controllers": { - "Volo.Abp.IdentityServer.ApiResourcesController": { - "controllerName": "ApiResources", - "type": "Volo.Abp.IdentityServer.ApiResourcesController", + "Volo.Abp.Identity.IdentityClaimTypeController": { + "controllerName": "IdentityClaimType", + "type": "Volo.Abp.Identity.IdentityClaimTypeController", "interfaces": [ { - "type": "Volo.Abp.IdentityServer.ApiResource.IApiResourceAppService" + "type": "Volo.Abp.Identity.IIdentityClaimTypeAppService" } ], "actions": { @@ -3454,14 +3416,14 @@ "uniqueName": "GetListAsyncByInput", "name": "GetListAsync", "httpMethod": "GET", - "url": "api/identity-server/api-resources", + "url": "api/identity/claim-types", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput, Volo.Abp.IdentityServer.Application.Contracts", - "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput", - "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.GetApiResourceListInput", + "typeAsString": "Volo.Abp.Identity.GetIdentityClaimTypesInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityClaimTypesInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityClaimTypesInput", "isOptional": false, "defaultValue": null } @@ -3513,28 +3475,15 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - } - }, - "GetAllListAsync": { - "uniqueName": "GetAllListAsync", - "name": "GetAllListAsync", - "httpMethod": "GET", - "url": "api/identity-server/api-resources/all", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto]" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, "GetAsyncById": { "uniqueName": "GetAsyncById", "name": "GetAsync", "httpMethod": "GET", - "url": "api/identity-server/api-resources/{id}", + "url": "api/identity/claim-types/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3560,22 +3509,22 @@ } ], "returnValue": { - "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", - "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" + "type": "Volo.Abp.Identity.ClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" } }, "CreateAsyncByInput": { "uniqueName": "CreateAsyncByInput", "name": "CreateAsync", "httpMethod": "POST", - "url": "api/identity-server/api-resources", + "url": "api/identity/claim-types", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto, Volo.Abp.IdentityServer.Application.Contracts", - "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", - "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "typeAsString": "Volo.Abp.Identity.CreateClaimTypeDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.CreateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.CreateClaimTypeDto", "isOptional": false, "defaultValue": null } @@ -3584,8 +3533,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", - "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.CreateApiResourceDto", + "type": "Volo.Abp.Identity.CreateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.CreateClaimTypeDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -3594,15 +3543,15 @@ } ], "returnValue": { - "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", - "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" + "type": "Volo.Abp.Identity.ClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" } }, "UpdateAsyncByIdAndInput": { "uniqueName": "UpdateAsyncByIdAndInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/identity-server/api-resources/{id}", + "url": "api/identity/claim-types/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3615,9 +3564,9 @@ }, { "name": "input", - "typeAsString": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto, Volo.Abp.IdentityServer.Application.Contracts", - "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", - "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "typeAsString": "Volo.Abp.Identity.UpdateClaimTypeDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.UpdateClaimTypeDto", "isOptional": false, "defaultValue": null } @@ -3637,8 +3586,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", - "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.UpdateApiResourceDto", + "type": "Volo.Abp.Identity.UpdateClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.UpdateClaimTypeDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -3647,15 +3596,15 @@ } ], "returnValue": { - "type": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto", - "typeSimple": "Volo.Abp.IdentityServer.ApiResource.Dtos.ApiResourceWithDetailsDto" + "type": "Volo.Abp.Identity.ClaimTypeDto", + "typeSimple": "Volo.Abp.Identity.ClaimTypeDto" } }, "DeleteAsyncById": { "uniqueName": "DeleteAsyncById", "name": "DeleteAsync", "httpMethod": "DELETE", - "url": "api/identity-server/api-resources", + "url": "api/identity/claim-types/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3675,8 +3624,8 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], @@ -3687,87 +3636,20 @@ } } }, - "Volo.Abp.IdentityServer.ClientsController": { - "controllerName": "Clients", - "type": "Volo.Abp.IdentityServer.ClientsController", + "Volo.Abp.Identity.IdentityRoleController": { + "controllerName": "IdentityRole", + "type": "Volo.Abp.Identity.IdentityRoleController", "interfaces": [ { - "type": "Volo.Abp.IdentityServer.Client.IClientAppService" + "type": "Volo.Abp.Identity.IIdentityRoleAppService" } ], "actions": { - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/identity-server/clients", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput, Volo.Abp.IdentityServer.Application.Contracts", - "type": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput", - "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.GetClientListInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Filter", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Sorting", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "SkipCount", - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MaxResultCount", - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - } - }, "GetAsyncById": { "uniqueName": "GetAsyncById", "name": "GetAsync", "httpMethod": "GET", - "url": "api/identity-server/clients/{id}", + "url": "api/identity/roles/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3793,22 +3675,22 @@ } ], "returnValue": { - "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", - "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" } }, "CreateAsyncByInput": { "uniqueName": "CreateAsyncByInput", "name": "CreateAsync", "httpMethod": "POST", - "url": "api/identity-server/clients", + "url": "api/identity/roles", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto, Volo.Abp.IdentityServer.Application.Contracts", - "type": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", - "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "typeAsString": "Volo.Abp.Identity.IdentityRoleCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", "isOptional": false, "defaultValue": null } @@ -3817,8 +3699,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", - "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.CreateClientDto", + "type": "Volo.Abp.Identity.IdentityRoleCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleCreateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -3827,15 +3709,15 @@ } ], "returnValue": { - "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", - "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" } }, "UpdateAsyncByIdAndInput": { "uniqueName": "UpdateAsyncByIdAndInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/identity-server/clients/{id}", + "url": "api/identity/roles/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3848,9 +3730,9 @@ }, { "name": "input", - "typeAsString": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto, Volo.Abp.IdentityServer.Application.Contracts", - "type": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", - "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "typeAsString": "Volo.Abp.Identity.IdentityRoleUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", "isOptional": false, "defaultValue": null } @@ -3870,8 +3752,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", - "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.UpdateClientDto", + "type": "Volo.Abp.Identity.IdentityRoleUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleUpdateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -3880,15 +3762,15 @@ } ], "returnValue": { - "type": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto", - "typeSimple": "Volo.Abp.IdentityServer.Client.Dtos.ClientWithDetailsDto" + "type": "Volo.Abp.Identity.IdentityRoleDto", + "typeSimple": "Volo.Abp.Identity.IdentityRoleDto" } }, "DeleteAsyncById": { "uniqueName": "DeleteAsyncById", "name": "DeleteAsync", "httpMethod": "DELETE", - "url": "api/identity-server/clients", + "url": "api/identity/roles/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -3908,8 +3790,8 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], @@ -3917,30 +3799,32 @@ "type": "System.Void", "typeSimple": "System.Void" } - } - } - }, - "Volo.Abp.IdentityServer.IdentityResourcesController": { - "controllerName": "IdentityResources", - "type": "Volo.Abp.IdentityServer.IdentityResourcesController", - "interfaces": [ - { - "type": "Volo.Abp.IdentityServer.IdentityResource.IIdentityResourceAppService" - } - ], - "actions": { + }, + "GetAllListAsync": { + "uniqueName": "GetAllListAsync", + "name": "GetAllListAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, "GetListAsyncByInput": { "uniqueName": "GetListAsyncByInput", "name": "GetListAsync", "httpMethod": "GET", - "url": "api/identity-server/identity-resources", + "url": "api/identity/roles", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput, Volo.Abp.IdentityServer.Application.Contracts", - "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput", - "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.GetIdentityResourceListInput", + "typeAsString": "Volo.Abp.Identity.GetIdentityRoleListInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityRoleListInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityRoleListInput", "isOptional": false, "defaultValue": null } @@ -3992,28 +3876,15 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" - } - }, - "GetAllListAsync": { - "uniqueName": "GetAllListAsync", - "name": "GetAllListAsync", - "httpMethod": "GET", - "url": "api/identity-server/identity-resources/all", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto]" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/identity-server/identity-resources/{id}", + "UpdateClaimsAsyncByIdAndInput": { + "uniqueName": "UpdateClaimsAsyncByIdAndInput", + "name": "UpdateClaimsAsync", + "httpMethod": "PUT", + "url": "api/identity/roles/{id}/claims", "supportedVersions": [], "parametersOnMethod": [ { @@ -4023,6 +3894,14 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null + }, + { + "name": "input", + "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.Identity.IdentityRoleClaimDto, Volo.Abp.Identity.Pro.Application.Contracts, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]", + "isOptional": false, + "defaultValue": null } ], "parameters": [ @@ -4036,105 +3915,231 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", - "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" - } + "type": "System.Void", + "typeSimple": "System.Void" + } }, - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/identity-server/identity-resources", + "GetClaimsAsyncById": { + "uniqueName": "GetClaimsAsyncById", + "name": "GetClaimsAsync", + "httpMethod": "GET", + "url": "api/identity/roles/{id}/claims", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto, Volo.Abp.IdentityServer.Application.Contracts", - "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", - "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", - "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.CreateIdentityResourceDto", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", - "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityRoleClaimDto]" } }, - "UpdateAsyncByIdAndInput": { - "uniqueName": "UpdateAsyncByIdAndInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/identity-server/identity-resources/{id}", + "GetAllClaimTypesAsync": { + "uniqueName": "GetAllClaimTypesAsync", + "name": "GetAllClaimTypesAsync", + "httpMethod": "GET", + "url": "api/identity/roles/all-claim-types", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.ClaimTypeDto]" + } + } + } + }, + "Volo.Abp.Identity.IdentitySecurityLogController": { + "controllerName": "IdentitySecurityLog", + "type": "Volo.Abp.Identity.IdentitySecurityLogController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentitySecurityLogAppService" + } + ], + "actions": { + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/security-logs", "supportedVersions": [], "parametersOnMethod": [ - { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, { "name": "input", - "typeAsString": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto, Volo.Abp.IdentityServer.Application.Contracts", - "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", - "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "typeAsString": "Volo.Abp.Identity.GetIdentitySecurityLogListInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "typeSimple": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", + "nameOnMethod": "input", + "name": "StartTime", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EndTime", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ApplicationName", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" }, { "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", - "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.UpdateIdentityResourceDto", + "name": "Identity", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Action", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ClientId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CorrelationId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto", - "typeSimple": "Volo.Abp.IdentityServer.IdentityResource.Dtos.IdentityResourceWithDetailsDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "DeleteAsyncById": { - "uniqueName": "DeleteAsyncById", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/identity-server/identity-resources", + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/security-logs/{id}", "supportedVersions": [], "parametersOnMethod": [ { @@ -4154,170 +4159,230 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Identity.IdentitySecurityLogDto", + "typeSimple": "Volo.Abp.Identity.IdentitySecurityLogDto" } }, - "CreateStandardResourcesAsync": { - "uniqueName": "CreateStandardResourcesAsync", - "name": "CreateStandardResourcesAsync", - "httpMethod": "POST", - "url": "api/identity-server/identity-resources/create-standard-resources", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - } - } - }, - "Volo.Abp.IdentityServer.IdentityServerClaimTypesController": { - "controllerName": "IdentityServerClaimTypes", - "type": "Volo.Abp.IdentityServer.IdentityServerClaimTypesController", - "interfaces": [ - { - "type": "Volo.Abp.IdentityServer.ClaimType.IIdentityServerClaimTypeAppService" - } - ], - "actions": { - "GetListAsync": { - "uniqueName": "GetListAsync", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/identity-server/claim-types", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.IdentityServer.ClaimType.Dtos.IdentityClaimTypeDto]" - } - } - } - } - } - }, - "account": { - "rootPath": "account", - "remoteServiceName": "AbpAccountPublic", - "controllers": { - "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.AccountController": { - "controllerName": "Account", - "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.AccountController", - "interfaces": [], - "actions": { - "LoginByLogin": { - "uniqueName": "LoginByLogin", - "name": "Login", - "httpMethod": "POST", - "url": "api/account/login", + "GetMyListAsyncByInput": { + "uniqueName": "GetMyListAsyncByInput", + "name": "GetMyListAsync", + "httpMethod": "GET", + "url": "api/identity/security-logs/my", "supportedVersions": [], "parametersOnMethod": [ { - "name": "login", - "typeAsString": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Pro.Public.Web", - "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", - "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetIdentitySecurityLogListInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", + "typeSimple": "Volo.Abp.Identity.GetIdentitySecurityLogListInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "login", - "name": "login", - "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", - "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "nameOnMethod": "input", + "name": "StartTime", + "type": "System.DateTime?", + "typeSimple": "string?", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "EndTime", + "type": "System.DateTime?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ApplicationName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Identity", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Action", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "UserName", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ClientId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CorrelationId", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Query", + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult", - "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "Logout": { - "uniqueName": "Logout", - "name": "Logout", + "GetMyAsyncById": { + "uniqueName": "GetMyAsyncById", + "name": "GetMyAsync", "httpMethod": "GET", - "url": "api/account/logout", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - "CheckPasswordByLogin": { - "uniqueName": "CheckPasswordByLogin", - "name": "CheckPassword", - "httpMethod": "POST", - "url": "api/account/checkPassword", + "url": "api/identity/security-logs/my/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "login", - "typeAsString": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Pro.Public.Web", - "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", - "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "login", - "name": "login", - "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", - "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult", - "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult" + "type": "Volo.Abp.Identity.IdentitySecurityLogDto", + "typeSimple": "Volo.Abp.Identity.IdentitySecurityLogDto" } } } }, - "Volo.Abp.Account.AccountController": { - "controllerName": "Account", - "type": "Volo.Abp.Account.AccountController", + "Volo.Abp.Identity.IdentitySettingsController": { + "controllerName": "IdentitySettings", + "type": "Volo.Abp.Identity.IdentitySettingsController", "interfaces": [ { - "type": "Volo.Abp.Account.IAccountAppService" + "type": "Volo.Abp.Identity.IIdentitySettingsAppService" } ], "actions": { - "RegisterAsyncByInput": { - "uniqueName": "RegisterAsyncByInput", - "name": "RegisterAsync", - "httpMethod": "POST", - "url": "api/account/register", + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/settings", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.IdentitySettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/settings", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.Account.RegisterDto, Volo.Abp.Account.Pro.Public.Application.Contracts", - "type": "Volo.Abp.Account.RegisterDto", - "typeSimple": "Volo.Abp.Account.RegisterDto", + "typeAsString": "Volo.Abp.Identity.IdentitySettingsDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentitySettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto", "isOptional": false, "defaultValue": null } @@ -4326,8 +4391,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Account.RegisterDto", - "typeSimple": "Volo.Abp.Account.RegisterDto", + "type": "Volo.Abp.Identity.IdentitySettingsDto", + "typeSimple": "Volo.Abp.Identity.IdentitySettingsDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -4336,56 +4401,67 @@ } ], "returnValue": { - "type": "Volo.Abp.Identity.IdentityUserDto", - "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + "type": "System.Void", + "typeSimple": "System.Void" } - }, - "SendPasswordResetCodeAsyncByInput": { - "uniqueName": "SendPasswordResetCodeAsyncByInput", - "name": "SendPasswordResetCodeAsync", - "httpMethod": "POST", - "url": "api/account/send-password-reset-code", + } + } + }, + "Volo.Abp.Identity.IdentityUserController": { + "controllerName": "IdentityUser", + "type": "Volo.Abp.Identity.IdentityUserController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserAppService" + } + ], + "actions": { + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.Abp.Account.SendPasswordResetCodeDto, Volo.Abp.Account.Pro.Public.Application.Contracts", - "type": "Volo.Abp.Account.SendPasswordResetCodeDto", - "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Account.SendPasswordResetCodeDto", - "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" } }, - "ResetPasswordAsyncByInput": { - "uniqueName": "ResetPasswordAsyncByInput", - "name": "ResetPasswordAsync", - "httpMethod": "POST", - "url": "api/account/reset-password", + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/users", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.Account.ResetPasswordDto, Volo.Abp.Account.Pro.Public.Application.Contracts", - "type": "Volo.Abp.Account.ResetPasswordDto", - "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", "isOptional": false, "defaultValue": null } @@ -4393,80 +4469,66 @@ "parameters": [ { "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Account.ResetPasswordDto", - "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - "SendPhoneNumberConfirmationTokenAsync": { - "uniqueName": "SendPhoneNumberConfirmationTokenAsync", - "name": "SendPhoneNumberConfirmationTokenAsync", - "httpMethod": "POST", - "url": "api/account/send-phone-number-confirmation-token", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - "SendEmailConfirmationTokenAsyncByInput": { - "uniqueName": "SendEmailConfirmationTokenAsyncByInput", - "name": "SendEmailConfirmationTokenAsync", - "httpMethod": "POST", - "url": "api/account/send-email-confirmation-token", - "supportedVersions": [], - "parametersOnMethod": [ + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "name": "input", - "typeAsString": "Volo.Abp.Account.SendEmailConfirmationTokenDto, Volo.Abp.Account.Pro.Public.Application.Contracts", - "type": "Volo.Abp.Account.SendEmailConfirmationTokenDto", - "typeSimple": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Account.SendEmailConfirmationTokenDto", - "typeSimple": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "ConfirmPhoneNumberAsyncByInput": { - "uniqueName": "ConfirmPhoneNumberAsyncByInput", - "name": "ConfirmPhoneNumberAsync", + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", "httpMethod": "POST", - "url": "api/account/confirm-phone-number", + "url": "api/identity/users", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.Account.ConfirmPhoneNumberInput, Volo.Abp.Account.Pro.Public.Application.Contracts", - "type": "Volo.Abp.Account.ConfirmPhoneNumberInput", - "typeSimple": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "typeAsString": "Volo.Abp.Identity.IdentityUserCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", "isOptional": false, "defaultValue": null } @@ -4475,8 +4537,8 @@ { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Account.ConfirmPhoneNumberInput", - "typeSimple": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "type": "Volo.Abp.Identity.IdentityUserCreateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserCreateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -4485,32 +4547,51 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" } }, - "ConfirmEmailAsyncByInput": { - "uniqueName": "ConfirmEmailAsyncByInput", - "name": "ConfirmEmailAsync", - "httpMethod": "POST", - "url": "api/account/confirm-email", + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}", "supportedVersions": [], "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, { "name": "input", - "typeAsString": "Volo.Abp.Account.ConfirmEmailInput, Volo.Abp.Account.Pro.Public.Application.Contracts", - "type": "Volo.Abp.Account.ConfirmEmailInput", - "typeSimple": "Volo.Abp.Account.ConfirmEmailInput", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", "isOptional": false, "defaultValue": null } ], "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.Account.ConfirmEmailInput", - "typeSimple": "Volo.Abp.Account.ConfirmEmailInput", + "type": "Volo.Abp.Identity.IdentityUserUpdateDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -4519,36 +4600,36 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" } }, - "SetProfilePictureAsyncByInput": { - "uniqueName": "SetProfilePictureAsyncByInput", - "name": "SetProfilePictureAsync", - "httpMethod": "POST", - "url": "api/account/profile-picture", + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/users/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.Abp.Account.ProfilePictureInput, Volo.Abp.Account.Pro.Public.Application.Contracts", - "type": "Volo.Abp.Account.ProfilePictureInput", - "typeSimple": "Volo.Abp.Account.ProfilePictureInput", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.Account.ProfilePictureInput", - "typeSimple": "Volo.Abp.Account.ProfilePictureInput", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], @@ -4557,11 +4638,11 @@ "typeSimple": "System.Void" } }, - "GetProfilePictureAsyncById": { - "uniqueName": "GetProfilePictureAsyncById", - "name": "GetProfilePictureAsync", + "GetRolesAsyncById": { + "uniqueName": "GetRolesAsyncById", + "name": "GetRolesAsync", "httpMethod": "GET", - "url": "api/account/profile-picture/{id}", + "url": "api/identity/users/{id}/roles", "supportedVersions": [], "parametersOnMethod": [ { @@ -4587,49 +4668,88 @@ } ], "returnValue": { - "type": "Volo.Abp.Account.ProfilePictureSourceDto", - "typeSimple": "Volo.Abp.Account.ProfilePictureSourceDto" + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" } }, - "UploadProfilePictureFileAsyncByImage": { - "uniqueName": "UploadProfilePictureFileAsyncByImage", - "name": "UploadProfilePictureFileAsync", - "httpMethod": "POST", - "url": "api/account/profile-picture-file", - "supportedVersions": [], + "GetAssignableRolesAsync": { + "uniqueName": "GetAssignableRolesAsync", + "name": "GetAssignableRolesAsync", + "httpMethod": "GET", + "url": "api/identity/users/assignable-roles", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAvailableOrganizationUnitsAsync": { + "uniqueName": "GetAvailableOrganizationUnitsAsync", + "name": "GetAvailableOrganizationUnitsAsync", + "httpMethod": "GET", + "url": "api/identity/users/available-organization-units", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetAllClaimTypesAsync": { + "uniqueName": "GetAllClaimTypesAsync", + "name": "GetAllClaimTypesAsync", + "httpMethod": "GET", + "url": "api/identity/users/all-claim-types", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.ClaimTypeDto]" + } + }, + "GetClaimsAsyncById": { + "uniqueName": "GetClaimsAsyncById", + "name": "GetClaimsAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/claims", + "supportedVersions": [], "parametersOnMethod": [ { - "name": "image", - "typeAsString": "Microsoft.AspNetCore.Http.IFormFile, Microsoft.AspNetCore.Http.Features", - "type": "Microsoft.AspNetCore.Http.IFormFile", - "typeSimple": "Microsoft.AspNetCore.Http.IFormFile", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "image", - "name": "image", - "type": "Microsoft.AspNetCore.Http.IFormFile", - "typeSimple": "Microsoft.AspNetCore.Http.IFormFile", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "FormFile", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "Microsoft.AspNetCore.Mvc.IActionResult", - "typeSimple": "Microsoft.AspNetCore.Mvc.IActionResult" + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]" } }, - "GetProfilePictureFileAsyncById": { - "uniqueName": "GetProfilePictureFileAsyncById", - "name": "GetProfilePictureFileAsync", + "GetOrganizationUnitsAsyncById": { + "uniqueName": "GetOrganizationUnitsAsyncById", + "name": "GetOrganizationUnitsAsync", "httpMethod": "GET", - "url": "api/account/profile-picture-file/{id}", + "url": "api/identity/users/{id}/organization-units", "supportedVersions": [], "parametersOnMethod": [ { @@ -4655,156 +4775,68 @@ } ], "returnValue": { - "type": "Microsoft.AspNetCore.Mvc.IActionResult", - "typeSimple": "Microsoft.AspNetCore.Mvc.IActionResult" - } - } - } - } - } - }, - "languageManagement": { - "rootPath": "languageManagement", - "remoteServiceName": "LanguageManagement", - "controllers": { - "Volo.Abp.LanguageManagement.LanguageController": { - "controllerName": "Language", - "type": "Volo.Abp.LanguageManagement.LanguageController", - "interfaces": [ - { - "type": "Volo.Abp.LanguageManagement.ILanguageAppService" - } - ], - "actions": { - "GetAllListAsync": { - "uniqueName": "GetAllListAsync", - "name": "GetAllListAsync", - "httpMethod": "GET", - "url": "api/language-management/languages/all", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.OrganizationUnitDto]" } }, - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/language-management/languages", + "UpdateRolesAsyncByIdAndInput": { + "uniqueName": "UpdateRolesAsyncByIdAndInput", + "name": "UpdateRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/roles", "supportedVersions": [], "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, { "name": "input", - "typeAsString": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput, Volo.Abp.LanguageManagement.Application.Contracts", - "type": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", - "typeSimple": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdateRolesDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "Filter", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ResourceName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "BaseCultureName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "TargetCultureName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "GetOnlyEmptyValues", - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Sorting", - "type": "System.String", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "SkipCount", - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" }, { "nameOnMethod": "input", - "name": "MaxResultCount", - "type": "System.Int32", - "typeSimple": "number", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdateRolesDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "bindingSourceId": "Body", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + "type": "System.Void", + "typeSimple": "System.Void" } }, - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/language-management/languages/{id}", + "UpdateClaimsAsyncByIdAndInput": { + "uniqueName": "UpdateClaimsAsyncByIdAndInput", + "name": "UpdateClaimsAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/claims", "supportedVersions": [], "parametersOnMethod": [ { @@ -4814,6 +4846,14 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null + }, + { + "name": "input", + "typeAsString": "System.Collections.Generic.List`1[[Volo.Abp.Identity.IdentityUserClaimDto, Volo.Abp.Identity.Pro.Application.Contracts, Version=3.2.0.0, Culture=neutral, PublicKeyToken=null]], System.Private.CoreLib", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]", + "isOptional": false, + "defaultValue": null } ], "parameters": [ @@ -4827,52 +4867,82 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" + }, + { + "nameOnMethod": "input", + "name": "input", + "type": "System.Collections.Generic.List", + "typeSimple": "[Volo.Abp.Identity.IdentityUserClaimDto]", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", - "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" + "type": "System.Void", + "typeSimple": "System.Void" } }, - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/language-management/languages", + "LockAsyncByIdAndLockoutDuration": { + "uniqueName": "LockAsyncByIdAndLockoutDuration", + "name": "LockAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/lock/{lockoutDuration}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto, Volo.Abp.LanguageManagement.Application.Contracts", - "type": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", - "typeSimple": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "lockoutDuration", + "typeAsString": "System.Int32, System.Private.CoreLib", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", - "typeSimple": "Volo.Abp.LanguageManagement.Dto.CreateLanguageDto", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, + { + "nameOnMethod": "lockoutDuration", + "name": "lockoutDuration", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", - "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" + "type": "System.Void", + "typeSimple": "System.Void" } }, - "UpdateAsyncByIdAndInput": { - "uniqueName": "UpdateAsyncByIdAndInput", - "name": "UpdateAsync", + "UnlockAsyncById": { + "uniqueName": "UnlockAsyncById", + "name": "UnlockAsync", "httpMethod": "PUT", - "url": "api/language-management/languages/{id}", + "url": "api/identity/users/{id}/unlock", "supportedVersions": [], "parametersOnMethod": [ { @@ -4882,14 +4952,6 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null - }, - { - "name": "input", - "typeAsString": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto, Volo.Abp.LanguageManagement.Application.Contracts", - "type": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", - "typeSimple": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", - "isOptional": false, - "defaultValue": null } ], "parameters": [ @@ -4903,29 +4965,86 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - }, + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "FindByUsernameAsyncByUsername": { + "uniqueName": "FindByUsernameAsyncByUsername", + "name": "FindByUsernameAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-username/{username}", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", - "typeSimple": "Volo.Abp.LanguageManagement.Dto.UpdateLanguageDto", + "name": "username", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "username", + "name": "username", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.LanguageManagement.Dto.LanguageDto", - "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageDto" + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" } }, - "DeleteAsyncById": { - "uniqueName": "DeleteAsyncById", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/language-management/languages/{id}", + "FindByEmailAsyncByEmail": { + "uniqueName": "FindByEmailAsyncByEmail", + "name": "FindByEmailAsync", + "httpMethod": "GET", + "url": "api/identity/users/by-email/{email}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "email", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "email", + "name": "email", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "GetTwoFactorEnabledAsyncById": { + "uniqueName": "GetTwoFactorEnabledAsyncById", + "name": "GetTwoFactorEnabledAsync", + "httpMethod": "GET", + "url": "api/identity/users/{id}/two-factor-enabled", "supportedVersions": [], "parametersOnMethod": [ { @@ -4951,15 +5070,15 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "System.Boolean", + "typeSimple": "boolean" } }, - "SetAsDefaultAsyncById": { - "uniqueName": "SetAsDefaultAsyncById", - "name": "SetAsDefaultAsync", + "SetTwoFactorEnabledAsyncByIdAndEnabled": { + "uniqueName": "SetTwoFactorEnabledAsyncByIdAndEnabled", + "name": "SetTwoFactorEnabledAsync", "httpMethod": "PUT", - "url": "api/language-management/languages/{id}/set-as-default", + "url": "api/identity/users/{id}/two-factor/{enabled}", "supportedVersions": [], "parametersOnMethod": [ { @@ -4969,6 +5088,14 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null + }, + { + "name": "enabled", + "typeAsString": "System.Boolean, System.Private.CoreLib", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null } ], "parameters": [ @@ -4982,6 +5109,17 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" + }, + { + "nameOnMethod": "enabled", + "name": "enabled", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" } ], "returnValue": { @@ -4989,109 +5127,160 @@ "typeSimple": "System.Void" } }, - "GetResourcesAsync": { - "uniqueName": "GetResourcesAsync", - "name": "GetResourcesAsync", - "httpMethod": "GET", - "url": "api/language-management/languages/resources", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.LanguageManagement.Dto.LanguageResourceDto]" - } - }, - "GetCulturelistAsync": { - "uniqueName": "GetCulturelistAsync", - "name": "GetCulturelistAsync", - "httpMethod": "GET", - "url": "api/language-management/languages/culture-list", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.LanguageManagement.Dto.CultureInfoDto]" - } - } - } - }, - "Volo.Abp.LanguageManagement.LanguageTextController": { - "controllerName": "LanguageText", - "type": "Volo.Abp.LanguageManagement.LanguageTextController", - "interfaces": [ - { - "type": "Volo.Abp.LanguageManagement.ILanguageTextAppService" - } - ], - "actions": { - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/language-management/language-texts", + "UpdatePasswordAsyncByIdAndInput": { + "uniqueName": "UpdatePasswordAsyncByIdAndInput", + "name": "UpdatePasswordAsync", + "httpMethod": "PUT", + "url": "api/identity/users/{id}/change-password", "supportedVersions": [], "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, { "name": "input", - "typeAsString": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput, Volo.Abp.LanguageManagement.Application.Contracts", - "type": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", - "typeSimple": "Volo.Abp.LanguageManagement.Dto.GetLanguagesTextsInput", + "typeAsString": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "Filter", - "type": "System.String", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" }, { "nameOnMethod": "input", - "name": "ResourceName", - "type": "System.String", - "typeSimple": "string", + "name": "input", + "type": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", + "typeSimple": "Volo.Abp.Identity.IdentityUserUpdatePasswordInput", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.IdentityUserLookupController": { + "controllerName": "IdentityUserLookup", + "type": "Volo.Abp.Identity.IdentityUserLookupController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IIdentityUserLookupAppService" + } + ], + "actions": { + "FindByIdAsyncById": { + "uniqueName": "FindByIdAsyncById", + "name": "FindByIdAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/{id}", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "BaseCultureName", - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "FindByUserNameAsyncByUserName": { + "uniqueName": "FindByUserNameAsyncByUserName", + "name": "FindByUserNameAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/by-username/{userName}", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "TargetCultureName", + "name": "userName", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "userName", + "name": "userName", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Users.UserData", + "typeSimple": "Volo.Abp.Users.UserData" + } + }, + "SearchAsyncByInput": { + "uniqueName": "SearchAsyncByInput", + "name": "SearchAsync", + "httpMethod": "GET", + "url": "api/identity/users/lookup/search", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupSearchInputDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupSearchInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupSearchInputDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ { "nameOnMethod": "input", - "name": "GetOnlyEmptyValues", - "type": "System.Boolean", - "typeSimple": "boolean", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -5100,7 +5289,7 @@ }, { "nameOnMethod": "input", - "name": "Sorting", + "name": "Filter", "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -5133,77 +5322,84 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" } }, - "GetAsyncByResourceNameAndCultureNameAndNameAndBaseCultureName": { - "uniqueName": "GetAsyncByResourceNameAndCultureNameAndNameAndBaseCultureName", - "name": "GetAsync", + "GetCountAsyncByInput": { + "uniqueName": "GetCountAsyncByInput", + "name": "GetCountAsync", "httpMethod": "GET", - "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}", + "url": "api/identity/users/lookup/count", "supportedVersions": [], "parametersOnMethod": [ { - "name": "resourceName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.Identity.UserLookupCountInputDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UserLookupCountInputDto", + "typeSimple": "Volo.Abp.Identity.UserLookupCountInputDto", "isOptional": false, "defaultValue": null - }, + } + ], + "parameters": [ { - "name": "cultureName", - "typeAsString": "System.String, System.Private.CoreLib", + "nameOnMethod": "input", + "name": "Filter", "type": "System.String", "typeSimple": "string", "isOptional": false, - "defaultValue": null - }, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Int64", + "typeSimple": "number" + } + } + } + }, + "Volo.Abp.Identity.OrganizationUnitController": { + "controllerName": "OrganizationUnit", + "type": "Volo.Abp.Identity.OrganizationUnitController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IOrganizationUnitAppService" + } + ], + "actions": { + "AddRolesAsyncByIdAndInput": { + "uniqueName": "AddRolesAsyncByIdAndInput", + "name": "AddRolesAsync", + "httpMethod": "PUT", + "url": "api/identity/organization-units/{id}/roles", + "supportedVersions": [], + "parametersOnMethod": [ { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null }, { - "name": "baseCultureName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitRoleInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitRoleInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitRoleInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "resourceName", - "name": "resourceName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, - { - "nameOnMethod": "cultureName", - "name": "cultureName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, - { - "nameOnMethod": "name", - "name": "name", - "type": "System.String", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, @@ -5212,89 +5408,51 @@ "descriptorName": "" }, { - "nameOnMethod": "baseCultureName", - "name": "baseCultureName", - "type": "System.String", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.OrganizationUnitRoleInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitRoleInput", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "bindingSourceId": "Body", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.LanguageManagement.Dto.LanguageTextDto", - "typeSimple": "Volo.Abp.LanguageManagement.Dto.LanguageTextDto" + "type": "System.Void", + "typeSimple": "System.Void" } }, - "UpdateAsyncByResourceNameAndCultureNameAndNameAndValue": { - "uniqueName": "UpdateAsyncByResourceNameAndCultureNameAndNameAndValue", - "name": "UpdateAsync", + "AddMembersAsyncByIdAndInput": { + "uniqueName": "AddMembersAsyncByIdAndInput", + "name": "AddMembersAsync", "httpMethod": "PUT", - "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}", + "url": "api/identity/organization-units/{id}/members", "supportedVersions": [], "parametersOnMethod": [ { - "name": "resourceName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null }, { - "name": "cultureName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "value", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitUserInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitUserInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUserInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "resourceName", - "name": "resourceName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, - { - "nameOnMethod": "cultureName", - "name": "cultureName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, - { - "nameOnMethod": "name", - "name": "name", - "type": "System.String", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, @@ -5303,14 +5461,14 @@ "descriptorName": "" }, { - "nameOnMethod": "value", - "name": "value", - "type": "System.String", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.OrganizationUnitUserInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUserInput", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "bindingSourceId": "Body", "descriptorName": "" } ], @@ -5319,70 +5477,66 @@ "typeSimple": "System.Void" } }, - "RestoreToDefaultAsyncByResourceNameAndCultureNameAndName": { - "uniqueName": "RestoreToDefaultAsyncByResourceNameAndCultureNameAndName", - "name": "RestoreToDefaultAsync", - "httpMethod": "PUT", - "url": "api/language-management/language-texts/{resourceName}/{cultureName}/{name}/restore", + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/identity/organization-units", "supportedVersions": [], "parametersOnMethod": [ { - "name": "resourceName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "cultureName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitCreateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitCreateDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "resourceName", - "name": "resourceName", - "type": "System.String", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Identity.OrganizationUnitCreateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitCreateDto", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "Body", "descriptorName": "" - }, + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" + } + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/identity/organization-units", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "cultureName", - "name": "cultureName", - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - }, + "defaultValue": null + } + ], + "parameters": [ { - "nameOnMethod": "name", - "name": "name", - "type": "System.String", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "ModelBinding", "descriptorName": "" } ], @@ -5390,43 +5544,18 @@ "type": "System.Void", "typeSimple": "System.Void" } - } - } - } - } - }, - "featureManagement": { - "rootPath": "featureManagement", - "remoteServiceName": "AbpFeatureManagement", - "controllers": { - "Volo.Abp.FeatureManagement.FeaturesController": { - "controllerName": "Features", - "type": "Volo.Abp.FeatureManagement.FeaturesController", - "interfaces": [ - { - "type": "Volo.Abp.FeatureManagement.IFeatureAppService" - } - ], - "actions": { - "GetAsyncByProviderNameAndProviderKey": { - "uniqueName": "GetAsyncByProviderNameAndProviderKey", + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", "name": "GetAsync", "httpMethod": "GET", - "url": "api/feature-management/features", + "url": "api/identity/organization-units/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "providerName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "providerKey", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null @@ -5434,161 +5563,107 @@ ], "parameters": [ { - "nameOnMethod": "providerName", - "name": "providerName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "" - }, - { - "nameOnMethod": "providerKey", - "name": "providerKey", - "type": "System.String", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.FeatureManagement.GetFeatureListResultDto", - "typeSimple": "Volo.Abp.FeatureManagement.GetFeatureListResultDto" + "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" } }, - "UpdateAsyncByProviderNameAndProviderKeyAndInput": { - "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/feature-management/features", + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units", "supportedVersions": [], "parametersOnMethod": [ - { - "name": "providerName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "providerKey", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, { "name": "input", - "typeAsString": "Volo.Abp.FeatureManagement.UpdateFeaturesDto, Volo.Abp.FeatureManagement.Application.Contracts", - "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", - "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "typeAsString": "Volo.Abp.Identity.GetOrganizationUnitInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetOrganizationUnitInput", + "typeSimple": "Volo.Abp.Identity.GetOrganizationUnitInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "providerName", - "name": "providerName", + "nameOnMethod": "input", + "name": "Filter", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", - "descriptorName": "" + "descriptorName": "input" }, { - "nameOnMethod": "providerKey", - "name": "providerKey", + "nameOnMethod": "input", + "name": "Sorting", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", - "descriptorName": "" + "descriptorName": "input" }, { "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", - "typeSimple": "Volo.Abp.FeatureManagement.UpdateFeaturesDto", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - } - } - } - } - }, - "abp": { - "rootPath": "abp", - "remoteServiceName": "abp", - "controllers": { - "Pages.Abp.MultiTenancy.AbpTenantController": { - "controllerName": "AbpTenant", - "type": "Pages.Abp.MultiTenancy.AbpTenantController", - "interfaces": [ - { - "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" - } - ], - "actions": { - "FindTenantByNameAsyncByName": { - "uniqueName": "FindTenantByNameAsyncByName", - "name": "FindTenantByNameAsync", - "httpMethod": "GET", - "url": "api/abp/multi-tenancy/tenants/by-name/{name}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "nameOnMethod": "name", - "name": "name", - "type": "System.String", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "FindTenantByIdAsyncById": { - "uniqueName": "FindTenantByIdAsyncById", - "name": "FindTenantByIdAsync", + "GetListAllAsync": { + "uniqueName": "GetListAllAsync", + "name": "GetListAllAsync", "httpMethod": "GET", - "url": "api/abp/multi-tenancy/tenants/by-id/{id}", + "url": "api/identity/organization-units/all", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.ListResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" + } + }, + "GetRolesAsyncByIdAndInput": { + "uniqueName": "GetRolesAsyncByIdAndInput", + "name": "GetRolesAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/{id}/roles", "supportedVersions": [], "parametersOnMethod": [ { @@ -5598,6 +5673,14 @@ "typeSimple": "string", "isOptional": false, "defaultValue": null + }, + { + "name": "input", + "typeAsString": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto, Volo.Abp.Ddd.Application.Contracts", + "type": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isOptional": false, + "defaultValue": null } ], "parameters": [ @@ -5611,115 +5694,85 @@ "constraintTypes": [], "bindingSourceId": "Path", "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" - } - } - } - }, - "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { - "controllerName": "AbpApplicationConfiguration", - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", - "interfaces": [ - { - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" - } - ], - "actions": { - "GetAsync": { - "uniqueName": "GetAsync", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/abp/application-configuration", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", - "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" - } - } - } - }, - "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { - "controllerName": "AbpApiDefinition", - "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", - "interfaces": [], - "actions": { - "GetByModel": { - "uniqueName": "GetByModel", - "name": "Get", - "httpMethod": "GET", - "url": "api/abp/api-definition", - "supportedVersions": [], - "parametersOnMethod": [ + }, { - "name": "model", - "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", - "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", - "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "nameOnMethod": "model", - "name": "IncludeTypes", - "type": "System.Boolean", - "typeSimple": "boolean", + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", - "descriptorName": "model" + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", - "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } - } - } - } - } - }, - "textTemplateManagement": { - "rootPath": "textTemplateManagement", - "remoteServiceName": "TextTemplateManagement", - "controllers": { - "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateContentController": { - "controllerName": "TemplateContent", - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateContentController", - "interfaces": [ - { - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.ITemplateContentAppService" - } - ], - "actions": { - "GetAsyncByInput": { - "uniqueName": "GetAsyncByInput", - "name": "GetAsync", + }, + "GetMembersAsyncByIdAndInput": { + "uniqueName": "GetMembersAsyncByIdAndInput", + "name": "GetMembersAsync", "httpMethod": "GET", - "url": "api/text-template-management/template-contents", + "url": "api/identity/organization-units/{id}/members", "supportedVersions": [], "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, { "name": "input", - "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput", - "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateContentInput", + "typeAsString": "Volo.Abp.Identity.GetIdentityUsersInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetIdentityUsersInput", + "typeSimple": "Volo.Abp.Identity.GetIdentityUsersInput", "isOptional": false, "defaultValue": null } ], "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, { "nameOnMethod": "input", - "name": "TemplateName", + "name": "Filter", "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -5730,7 +5783,7 @@ }, { "nameOnMethod": "input", - "name": "CultureName", + "name": "Sorting", "type": "System.String", "typeSimple": "string", "isOptional": false, @@ -5738,35 +5791,76 @@ "constraintTypes": null, "bindingSourceId": "ModelBinding", "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto", - "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "RestoreToDefaultAsyncByInput": { - "uniqueName": "RestoreToDefaultAsyncByInput", - "name": "RestoreToDefaultAsync", + "MoveAsyncByIdAndInput": { + "uniqueName": "MoveAsyncByIdAndInput", + "name": "MoveAsync", "httpMethod": "PUT", - "url": "api/text-template-management/template-contents/restore-to-default", + "url": "api/identity/organization-units/{id}/move", "supportedVersions": [], "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, { "name": "input", - "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", - "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitMoveInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitMoveInput", "isOptional": false, "defaultValue": null } ], "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + }, { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", - "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.RestoreTemplateContentInput", + "type": "Volo.Abp.Identity.OrganizationUnitMoveInput", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitMoveInput", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -5779,18 +5873,18 @@ "typeSimple": "System.Void" } }, - "UpdateAsyncByInput": { - "uniqueName": "UpdateAsyncByInput", - "name": "UpdateAsync", - "httpMethod": "PUT", - "url": "api/text-template-management/template-contents", + "GetAvailableUsersAsyncByInput": { + "uniqueName": "GetAvailableUsersAsyncByInput", + "name": "GetAvailableUsersAsync", + "httpMethod": "GET", + "url": "api/identity/organization-units/available-users", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput, Volo.Abp.TextTemplateManagement.Application.Contracts", - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", - "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "typeAsString": "Volo.Abp.Identity.GetAvailableUsersInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetAvailableUsersInput", + "typeSimple": "Volo.Abp.Identity.GetAvailableUsersInput", "isOptional": false, "defaultValue": null } @@ -5798,53 +5892,19 @@ "parameters": [ { "nameOnMethod": "input", - "name": "input", - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", - "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.UpdateTemplateContentInput", + "name": "Filter", + "type": "System.String", + "typeSimple": "string", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto", - "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TextTemplateContentDto" - } - } - } - }, - "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionController": { - "controllerName": "TemplateDefinition", - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionController", - "interfaces": [ - { - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.ITemplateDefinitionAppService" - } - ], - "actions": { - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/text-template-management/template-definitions", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput, Volo.Abp.TextTemplateManagement.Application.Contracts", - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput", - "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.GetTemplateDefinitionListInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { "nameOnMethod": "input", - "name": "FilterText", - "type": "System.String", + "name": "Id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, @@ -5887,174 +5947,129 @@ } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "GetAsyncByName": { - "uniqueName": "GetAsyncByName", - "name": "GetAsync", + "GetAvailableRolesAsyncByInput": { + "uniqueName": "GetAvailableRolesAsyncByInput", + "name": "GetAvailableRolesAsync", "httpMethod": "GET", - "url": "api/text-template-management/template-definitions/{name}", + "url": "api/identity/organization-units/available-roles", "supportedVersions": [], "parametersOnMethod": [ { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.Identity.GetAvailableRolesInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.GetAvailableRolesInput", + "typeSimple": "Volo.Abp.Identity.GetAvailableRolesInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "name", - "name": "name", + "nameOnMethod": "input", + "name": "Filter", "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionDto", - "typeSimple": "Volo.Abp.TextTemplateManagement.TextTemplates.TemplateDefinitionDto" - } - } - } - } - } - }, - "permissionManagement": { - "rootPath": "permissionManagement", - "remoteServiceName": "AbpPermissionManagement", - "controllers": { - "Volo.Abp.PermissionManagement.PermissionsController": { - "controllerName": "Permissions", - "type": "Volo.Abp.PermissionManagement.PermissionsController", - "interfaces": [ - { - "type": "Volo.Abp.PermissionManagement.IPermissionAppService" - } - ], - "actions": { - "GetAsyncByProviderNameAndProviderKey": { - "uniqueName": "GetAsyncByProviderNameAndProviderKey", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/permission-management/permissions", - "supportedVersions": [], - "parametersOnMethod": [ + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "name": "providerName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", + "nameOnMethod": "input", + "name": "Id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, - "defaultValue": null + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" }, { - "name": "providerKey", - "typeAsString": "System.String, System.Private.CoreLib", + "nameOnMethod": "input", + "name": "Sorting", "type": "System.String", "typeSimple": "string", "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, { - "nameOnMethod": "providerName", - "name": "providerName", - "type": "System.String", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "SkipCount", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", - "descriptorName": "" + "descriptorName": "input" }, { - "nameOnMethod": "providerKey", - "name": "providerKey", - "type": "System.String", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "MaxResultCount", + "type": "System.Int32", + "typeSimple": "number", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", - "descriptorName": "" + "descriptorName": "input" } ], "returnValue": { - "type": "Volo.Abp.PermissionManagement.GetPermissionListResultDto", - "typeSimple": "Volo.Abp.PermissionManagement.GetPermissionListResultDto" + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" } }, - "UpdateAsyncByProviderNameAndProviderKeyAndInput": { - "uniqueName": "UpdateAsyncByProviderNameAndProviderKeyAndInput", + "UpdateAsyncByIdAndInput": { + "uniqueName": "UpdateAsyncByIdAndInput", "name": "UpdateAsync", "httpMethod": "PUT", - "url": "api/permission-management/permissions", + "url": "api/identity/organization-units/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "providerName", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - }, - { - "name": "providerKey", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null }, { "name": "input", - "typeAsString": "Volo.Abp.PermissionManagement.UpdatePermissionsDto, Volo.Abp.PermissionManagement.Application.Contracts", - "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", - "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "typeAsString": "Volo.Abp.Identity.OrganizationUnitUpdateDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUpdateDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "providerName", - "name": "providerName", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "" - }, - { - "nameOnMethod": "providerKey", - "name": "providerKey", - "type": "System.String", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", + "constraintTypes": [], + "bindingSourceId": "Path", "descriptorName": "" }, { "nameOnMethod": "input", "name": "input", - "type": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", - "typeSimple": "Volo.Abp.PermissionManagement.UpdatePermissionsDto", + "type": "Volo.Abp.Identity.OrganizationUnitUpdateDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitUpdateDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, @@ -6063,318 +6078,589 @@ } ], "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" + "type": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto", + "typeSimple": "Volo.Abp.Identity.OrganizationUnitWithDetailsDto" } - } - } - } - } - }, - "auditLogging": { - "rootPath": "auditLogging", - "remoteServiceName": "AbpAuditLogging", - "controllers": { - "Volo.Abp.AuditLogging.AuditLogsController": { - "controllerName": "AuditLogs", - "type": "Volo.Abp.AuditLogging.AuditLogsController", - "interfaces": [ - { - "type": "Volo.Abp.AuditLogging.IAuditLogsAppService" - } - ], - "actions": { - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/audit-logging/audit-logs", + }, + "RemoveMemberAsyncByIdAndMemberId": { + "uniqueName": "RemoveMemberAsyncByIdAndMemberId", + "name": "RemoveMemberAsync", + "httpMethod": "DELETE", + "url": "api/identity/organization-units/{id}/members/{memberId}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.Abp.AuditLogging.GetAuditLogListDto, Volo.Abp.AuditLogging.Application.Contracts", - "type": "Volo.Abp.AuditLogging.GetAuditLogListDto", - "typeSimple": "Volo.Abp.AuditLogging.GetAuditLogListDto", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + }, + { + "name": "memberId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "Url", - "type": "System.String", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" }, { - "nameOnMethod": "input", - "name": "UserName", - "type": "System.String", + "nameOnMethod": "memberId", + "name": "memberId", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "RemoveRoleAsyncByIdAndRoleId": { + "uniqueName": "RemoveRoleAsyncByIdAndRoleId", + "name": "RemoveRoleAsync", + "httpMethod": "DELETE", + "url": "api/identity/organization-units/{id}/roles/{roleId}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null }, { - "nameOnMethod": "input", - "name": "ApplicationName", - "type": "System.String", + "name": "roleId", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" }, { - "nameOnMethod": "input", - "name": "CorrelationId", - "type": "System.String", + "nameOnMethod": "roleId", + "name": "roleId", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + }, + "Volo.Abp.Identity.ProfileController": { + "controllerName": "Profile", + "type": "Volo.Abp.Identity.ProfileController", + "interfaces": [ + { + "type": "Volo.Abp.Identity.IProfileAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "UpdateAsyncByInput": { + "uniqueName": "UpdateAsyncByInput", + "name": "UpdateAsync", + "httpMethod": "PUT", + "url": "api/identity/my-profile", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.UpdateProfileDto, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ { "nameOnMethod": "input", - "name": "HttpMethod", - "type": "System.String", - "typeSimple": "string", + "name": "input", + "type": "Volo.Abp.Identity.UpdateProfileDto", + "typeSimple": "Volo.Abp.Identity.UpdateProfileDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.ProfileDto", + "typeSimple": "Volo.Abp.Identity.ProfileDto" + } + }, + "ChangePasswordAsyncByInput": { + "uniqueName": "ChangePasswordAsyncByInput", + "name": "ChangePasswordAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/change-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Identity.ChangePasswordInput, Volo.Abp.Identity.Pro.Application.Contracts", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ { "nameOnMethod": "input", - "name": "HttpStatusCode", - "type": "System.Net.HttpStatusCode?", - "typeSimple": "System.Net.HttpStatusCode?", + "name": "input", + "type": "Volo.Abp.Identity.ChangePasswordInput", + "typeSimple": "Volo.Abp.Identity.ChangePasswordInput", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetTwoFactorEnabledAsync": { + "uniqueName": "GetTwoFactorEnabledAsync", + "name": "GetTwoFactorEnabledAsync", + "httpMethod": "GET", + "url": "api/identity/my-profile/two-factor-enabled", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + } + }, + "SetTwoFactorEnabledAsyncByEnabled": { + "uniqueName": "SetTwoFactorEnabledAsyncByEnabled", + "name": "SetTwoFactorEnabledAsync", + "httpMethod": "POST", + "url": "api/identity/my-profile/set-two-factor-enabled", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "MaxExecutionDuration", - "type": "System.Int32?", - "typeSimple": "number?", + "name": "enabled", + "typeAsString": "System.Boolean, System.Private.CoreLib", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "enabled", + "name": "enabled", + "type": "System.Boolean", + "typeSimple": "boolean", "isOptional": false, "defaultValue": null, "constraintTypes": null, "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + } + } + } + } + }, + "account": { + "rootPath": "account", + "remoteServiceName": "AbpAccountPublic", + "controllers": { + "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.AccountController", + "interfaces": [], + "actions": { + "LoginByLogin": { + "uniqueName": "LoginByLogin", + "name": "Login", + "httpMethod": "POST", + "url": "api/account/login", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "MinExecutionDuration", - "type": "System.Int32?", - "typeSimple": "number?", + "name": "login", + "typeAsString": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Pro.Public.Web", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + }, + "Logout": { + "uniqueName": "Logout", + "name": "Logout", + "httpMethod": "GET", + "url": "api/account/logout", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "CheckPasswordByLogin": { + "uniqueName": "CheckPasswordByLogin", + "name": "CheckPassword", + "httpMethod": "POST", + "url": "api/account/checkPassword", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "HasException", - "type": "System.Boolean?", - "typeSimple": "boolean?", + "name": "login", + "typeAsString": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo, Volo.Abp.Account.Pro.Public.Web", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "login", + "name": "login", + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult", + "typeSimple": "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.AbpLoginResult" + } + } + } + }, + "Volo.Abp.Account.AccountController": { + "controllerName": "Account", + "type": "Volo.Abp.Account.AccountController", + "interfaces": [ + { + "type": "Volo.Abp.Account.IAccountAppService" + } + ], + "actions": { + "RegisterAsyncByInput": { + "uniqueName": "RegisterAsyncByInput", + "name": "RegisterAsync", + "httpMethod": "POST", + "url": "api/account/register", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.RegisterDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ { "nameOnMethod": "input", - "name": "Sorting", - "type": "System.String", - "typeSimple": "string", + "name": "input", + "type": "Volo.Abp.Account.RegisterDto", + "typeSimple": "Volo.Abp.Account.RegisterDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Identity.IdentityUserDto", + "typeSimple": "Volo.Abp.Identity.IdentityUserDto" + } + }, + "SendPasswordResetCodeAsyncByInput": { + "uniqueName": "SendPasswordResetCodeAsyncByInput", + "name": "SendPasswordResetCodeAsync", + "httpMethod": "POST", + "url": "api/account/send-password-reset-code", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.SendPasswordResetCodeDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ { "nameOnMethod": "input", - "name": "SkipCount", - "type": "System.Int32", - "typeSimple": "number", + "name": "input", + "type": "Volo.Abp.Account.SendPasswordResetCodeDto", + "typeSimple": "Volo.Abp.Account.SendPasswordResetCodeDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "ResetPasswordAsyncByInput": { + "uniqueName": "ResetPasswordAsyncByInput", + "name": "ResetPasswordAsync", + "httpMethod": "POST", + "url": "api/account/reset-password", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "Volo.Abp.Account.ResetPasswordDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ { "nameOnMethod": "input", - "name": "MaxResultCount", - "type": "System.Int32", - "typeSimple": "number", + "name": "input", + "type": "Volo.Abp.Account.ResetPasswordDto", + "typeSimple": "Volo.Abp.Account.ResetPasswordDto", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "bindingSourceId": "Body", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "System.Void", + "typeSimple": "System.Void" } }, - "GetAsyncById": { - "uniqueName": "GetAsyncById", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/audit-logging/audit-logs/{id}", + "SendPhoneNumberConfirmationTokenAsync": { + "uniqueName": "SendPhoneNumberConfirmationTokenAsync", + "name": "SendPhoneNumberConfirmationTokenAsync", + "httpMethod": "POST", + "url": "api/account/send-phone-number-confirmation-token", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "SendEmailConfirmationTokenAsyncByInput": { + "uniqueName": "SendEmailConfirmationTokenAsyncByInput", + "name": "SendEmailConfirmationTokenAsync", + "httpMethod": "POST", + "url": "api/account/send-email-confirmation-token", "supportedVersions": [], "parametersOnMethod": [ { - "name": "id", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", - "typeSimple": "string", + "name": "input", + "typeAsString": "Volo.Abp.Account.SendEmailConfirmationTokenDto, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "typeSimple": "Volo.Abp.Account.SendEmailConfirmationTokenDto", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "id", - "name": "id", - "type": "System.Guid", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.SendEmailConfirmationTokenDto", + "typeSimple": "Volo.Abp.Account.SendEmailConfirmationTokenDto", "isOptional": false, "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", + "constraintTypes": null, + "bindingSourceId": "Body", "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.AuditLogging.AuditLogDto", - "typeSimple": "Volo.Abp.AuditLogging.AuditLogDto" + "type": "System.Void", + "typeSimple": "System.Void" } }, - "GetErrorRateAsyncByFilter": { - "uniqueName": "GetErrorRateAsyncByFilter", - "name": "GetErrorRateAsync", - "httpMethod": "GET", - "url": "api/audit-logging/audit-logs/statistics/error-rate", + "ConfirmPhoneNumberAsyncByInput": { + "uniqueName": "ConfirmPhoneNumberAsyncByInput", + "name": "ConfirmPhoneNumberAsync", + "httpMethod": "POST", + "url": "api/account/confirm-phone-number", "supportedVersions": [], "parametersOnMethod": [ { - "name": "filter", - "typeAsString": "Volo.Abp.AuditLogging.GetErrorRateFilter, Volo.Abp.AuditLogging.Application.Contracts", - "type": "Volo.Abp.AuditLogging.GetErrorRateFilter", - "typeSimple": "Volo.Abp.AuditLogging.GetErrorRateFilter", + "name": "input", + "typeAsString": "Volo.Abp.Account.ConfirmPhoneNumberInput, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "typeSimple": "Volo.Abp.Account.ConfirmPhoneNumberInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "filter", - "name": "StartDate", - "type": "System.DateTime", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "filter" - }, - { - "nameOnMethod": "filter", - "name": "EndDate", - "type": "System.DateTime", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.ConfirmPhoneNumberInput", + "typeSimple": "Volo.Abp.Account.ConfirmPhoneNumberInput", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "filter" + "bindingSourceId": "Body", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.AuditLogging.GetErrorRateOutput", - "typeSimple": "Volo.Abp.AuditLogging.GetErrorRateOutput" + "type": "System.Void", + "typeSimple": "System.Void" } }, - "GetAverageExecutionDurationPerDayAsyncByFilter": { - "uniqueName": "GetAverageExecutionDurationPerDayAsyncByFilter", - "name": "GetAverageExecutionDurationPerDayAsync", - "httpMethod": "GET", - "url": "api/audit-logging/audit-logs/statistics/average-execution-duration-per-day", + "ConfirmEmailAsyncByInput": { + "uniqueName": "ConfirmEmailAsyncByInput", + "name": "ConfirmEmailAsync", + "httpMethod": "POST", + "url": "api/account/confirm-email", "supportedVersions": [], "parametersOnMethod": [ { - "name": "filter", - "typeAsString": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput, Volo.Abp.AuditLogging.Application.Contracts", - "type": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput", - "typeSimple": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayInput", + "name": "input", + "typeAsString": "Volo.Abp.Account.ConfirmEmailInput, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ConfirmEmailInput", + "typeSimple": "Volo.Abp.Account.ConfirmEmailInput", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "filter", - "name": "StartDate", - "type": "System.DateTime", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "filter" - }, - { - "nameOnMethod": "filter", - "name": "EndDate", - "type": "System.DateTime", - "typeSimple": "string", + "nameOnMethod": "input", + "name": "input", + "type": "Volo.Abp.Account.ConfirmEmailInput", + "typeSimple": "Volo.Abp.Account.ConfirmEmailInput", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "filter" + "bindingSourceId": "Body", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayOutput", - "typeSimple": "Volo.Abp.AuditLogging.GetAverageExecutionDurationPerDayOutput" + "type": "System.Void", + "typeSimple": "System.Void" } }, - "GetEntityChangesAsyncByInput": { - "uniqueName": "GetEntityChangesAsyncByInput", - "name": "GetEntityChangesAsync", - "httpMethod": "GET", - "url": "api/audit-logging/audit-logs/entity-changes", + "SetProfilePictureAsyncByInput": { + "uniqueName": "SetProfilePictureAsyncByInput", + "name": "SetProfilePictureAsync", + "httpMethod": "POST", + "url": "api/account/profile-picture", "supportedVersions": [], "parametersOnMethod": [ { "name": "input", - "typeAsString": "Volo.Abp.AuditLogging.GetEntityChangesDto, Volo.Abp.AuditLogging.Application.Contracts", - "type": "Volo.Abp.AuditLogging.GetEntityChangesDto", - "typeSimple": "Volo.Abp.AuditLogging.GetEntityChangesDto", + "typeAsString": "Volo.Abp.Account.ProfilePictureInput, Volo.Abp.Account.Pro.Public.Application.Contracts", + "type": "Volo.Abp.Account.ProfilePictureInput", + "typeSimple": "Volo.Abp.Account.ProfilePictureInput", "isOptional": false, "defaultValue": null } @@ -6382,165 +6668,151 @@ "parameters": [ { "nameOnMethod": "input", - "name": "AuditLogId", - "type": "System.Guid?", - "typeSimple": "string?", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "EntityChangeType", - "type": "Volo.Abp.Auditing.EntityChangeType?", - "typeSimple": "Volo.Abp.Auditing.EntityChangeType?", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "EntityId", - "type": "System.String", - "typeSimple": "string", + "name": "input", + "type": "Volo.Abp.Account.ProfilePictureInput", + "typeSimple": "Volo.Abp.Account.ProfilePictureInput", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + "GetProfilePictureAsyncById": { + "uniqueName": "GetProfilePictureAsyncById", + "name": "GetProfilePictureAsync", + "httpMethod": "GET", + "url": "api/account/profile-picture/{id}", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "EntityTypeFullName", - "type": "System.String", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "StartDate", - "type": "System.DateTime?", - "typeSimple": "string?", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "EndDate", - "type": "System.DateTime?", - "typeSimple": "string?", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "defaultValue": null + } + ], + "parameters": [ { - "nameOnMethod": "input", - "name": "Sorting", - "type": "System.String", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Account.ProfilePictureSourceDto", + "typeSimple": "Volo.Abp.Account.ProfilePictureSourceDto" + } + }, + "UploadProfilePictureFileAsyncByImage": { + "uniqueName": "UploadProfilePictureFileAsyncByImage", + "name": "UploadProfilePictureFileAsync", + "httpMethod": "POST", + "url": "api/account/profile-picture-file", + "supportedVersions": [], + "parametersOnMethod": [ { - "nameOnMethod": "input", - "name": "SkipCount", - "type": "System.Int32", - "typeSimple": "number", + "name": "image", + "typeAsString": "Microsoft.AspNetCore.Http.IFormFile, Microsoft.AspNetCore.Http.Features", + "type": "Microsoft.AspNetCore.Http.IFormFile", + "typeSimple": "Microsoft.AspNetCore.Http.IFormFile", "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, + "defaultValue": null + } + ], + "parameters": [ { - "nameOnMethod": "input", - "name": "MaxResultCount", - "type": "System.Int32", - "typeSimple": "number", + "nameOnMethod": "image", + "name": "image", + "type": "Microsoft.AspNetCore.Http.IFormFile", + "typeSimple": "Microsoft.AspNetCore.Http.IFormFile", "isOptional": false, "defaultValue": null, "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "bindingSourceId": "FormFile", + "descriptorName": "" } ], "returnValue": { - "type": "Volo.Abp.Application.Dtos.PagedResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + "type": "Microsoft.AspNetCore.Mvc.IActionResult", + "typeSimple": "Microsoft.AspNetCore.Mvc.IActionResult" } }, - "GetEntityChangesWithUsernameAsyncByInput": { - "uniqueName": "GetEntityChangesWithUsernameAsyncByInput", - "name": "GetEntityChangesWithUsernameAsync", + "GetProfilePictureFileAsyncById": { + "uniqueName": "GetProfilePictureFileAsyncById", + "name": "GetProfilePictureFileAsync", "httpMethod": "GET", - "url": "api/audit-logging/audit-logs/entity-changes-with-username", + "url": "api/account/profile-picture-file/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "input", - "typeAsString": "Volo.Abp.AuditLogging.EntityChangeFilter, Volo.Abp.AuditLogging.Application.Contracts", - "type": "Volo.Abp.AuditLogging.EntityChangeFilter", - "typeSimple": "Volo.Abp.AuditLogging.EntityChangeFilter", + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", "isOptional": false, "defaultValue": null } ], "parameters": [ { - "nameOnMethod": "input", - "name": "EntityId", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "EntityTypeFullName", - "type": "System.String", + "nameOnMethod": "id", + "name": "id", + "type": "System.Guid", "typeSimple": "string", "isOptional": false, "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" } ], "returnValue": { - "type": "System.Collections.Generic.List", - "typeSimple": "[Volo.Abp.AuditLogging.EntityChangeWithUsernameDto]" + "type": "Microsoft.AspNetCore.Mvc.IActionResult", + "typeSimple": "Microsoft.AspNetCore.Mvc.IActionResult" } - }, - "GetEntityChangeWithUsernameAsyncByEntityChangeId": { - "uniqueName": "GetEntityChangeWithUsernameAsyncByEntityChangeId", - "name": "GetEntityChangeWithUsernameAsync", + } + } + } + } + }, + "abp": { + "rootPath": "abp", + "remoteServiceName": "abp", + "controllers": { + "Pages.Abp.MultiTenancy.AbpTenantController": { + "controllerName": "AbpTenant", + "type": "Pages.Abp.MultiTenancy.AbpTenantController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.IAbpTenantAppService" + } + ], + "actions": { + "FindTenantByNameAsyncByName": { + "uniqueName": "FindTenantByNameAsyncByName", + "name": "FindTenantByNameAsync", "httpMethod": "GET", - "url": "api/audit-logging/audit-logs/entity-change-with-username/{entityChangeId}", + "url": "api/abp/multi-tenancy/tenants/by-name/{name}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "entityChangeId", - "typeAsString": "System.Guid, System.Private.CoreLib", - "type": "System.Guid", + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null @@ -6548,9 +6820,9 @@ ], "parameters": [ { - "nameOnMethod": "entityChangeId", - "name": "entityChangeId", - "type": "System.Guid", + "nameOnMethod": "name", + "name": "name", + "type": "System.String", "typeSimple": "string", "isOptional": false, "defaultValue": null, @@ -6560,19 +6832,19 @@ } ], "returnValue": { - "type": "Volo.Abp.AuditLogging.EntityChangeWithUsernameDto", - "typeSimple": "Volo.Abp.AuditLogging.EntityChangeWithUsernameDto" + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" } }, - "GetEntityChangeAsyncByEntityChangeId": { - "uniqueName": "GetEntityChangeAsyncByEntityChangeId", - "name": "GetEntityChangeAsync", + "FindTenantByIdAsyncById": { + "uniqueName": "FindTenantByIdAsyncById", + "name": "FindTenantByIdAsync", "httpMethod": "GET", - "url": "api/audit-logging/audit-logs/entity-changes/{entityChangeId}", + "url": "api/abp/multi-tenancy/tenants/by-id/{id}", "supportedVersions": [], "parametersOnMethod": [ { - "name": "entityChangeId", + "name": "id", "typeAsString": "System.Guid, System.Private.CoreLib", "type": "System.Guid", "typeSimple": "string", @@ -6582,8 +6854,8 @@ ], "parameters": [ { - "nameOnMethod": "entityChangeId", - "name": "entityChangeId", + "nameOnMethod": "id", + "name": "id", "type": "System.Guid", "typeSimple": "string", "isOptional": false, @@ -6594,8 +6866,73 @@ } ], "returnValue": { - "type": "Volo.Abp.AuditLogging.EntityChangeDto", - "typeSimple": "Volo.Abp.AuditLogging.EntityChangeDto" + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.FindTenantResultDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController": { + "controllerName": "AbpApplicationConfiguration", + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.AbpApplicationConfigurationController", + "interfaces": [ + { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IAbpApplicationConfigurationAppService" + } + ], + "actions": { + "GetAsync": { + "uniqueName": "GetAsync", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/abp/application-configuration", + "supportedVersions": [], + "parametersOnMethod": [], + "parameters": [], + "returnValue": { + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto" + } + } + } + }, + "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController": { + "controllerName": "AbpApiDefinition", + "type": "Volo.Abp.AspNetCore.Mvc.ApiExploring.AbpApiDefinitionController", + "interfaces": [], + "actions": { + "GetByModel": { + "uniqueName": "GetByModel", + "name": "Get", + "httpMethod": "GET", + "url": "api/abp/api-definition", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "model", + "typeAsString": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto, Volo.Abp.Http", + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "model", + "name": "IncludeTypes", + "type": "System.Boolean", + "typeSimple": "boolean", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "model" + } + ], + "returnValue": { + "type": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel" } } } @@ -6620,11 +6957,6 @@ "name": "EnableLocalLogin", "type": "System.Boolean", "typeSimple": "boolean" - }, - { - "name": "IsRememberBrowserEnabled", - "type": "System.Boolean", - "typeSimple": "boolean" } ] }, @@ -6667,6 +6999,46 @@ } ] }, + "Volo.Abp.Account.AccountTwoFactorSettingsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TwoFactorBehaviour", + "type": "Volo.Abp.Identity.Features.IdentityTwoFactorBehaviour", + "typeSimple": "Volo.Abp.Identity.Features.IdentityTwoFactorBehaviour" + }, + { + "name": "IsRememberBrowserEnabled", + "type": "System.Boolean", + "typeSimple": "boolean" + }, + { + "name": "UsersCanChange", + "type": "System.Boolean", + "typeSimple": "boolean" + } + ] + }, + "Volo.Abp.Identity.Features.IdentityTwoFactorBehaviour": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Optional", + "Disabled", + "Forced" + ], + "enumValues": [ + 0, + 1, + 2 + ], + "genericArguments": null, + "properties": null + }, "Volo.Abp.Account.Public.Web.Areas.Account.Controllers.Models.UserLoginInfo": { "baseType": null, "isEnum": false, @@ -6822,7 +7194,7 @@ "typeSimple": "boolean" }, { - "name": "TwoFactorEnabled", + "name": "SupportTwoFactor", "type": "System.Boolean", "typeSimple": "boolean" }, @@ -8428,11 +8800,6 @@ "type": "System.String", "typeSimple": "string" }, - { - "name": "TwoFactorEnabled", - "type": "System.Boolean", - "typeSimple": "boolean" - }, { "name": "LockoutEnabled", "type": "System.Boolean", @@ -8851,6 +9218,44 @@ } ] }, + "Volo.Abp.Identity.GetAvailableUsersInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Id", + "type": "System.Guid", + "typeSimple": "string" + } + ] + }, + "Volo.Abp.Identity.GetAvailableRolesInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "type": "System.String", + "typeSimple": "string" + }, + { + "name": "Id", + "type": "System.Guid", + "typeSimple": "string" + } + ] + }, "Volo.Abp.Identity.OrganizationUnitUpdateDto": { "baseType": "Volo.Abp.Identity.OrganizationUnitCreateOrUpdateDtoBase", "isEnum": false, diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html index bf49550f12..13af56f195 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.html @@ -169,18 +169,6 @@ 'AbpIdentity::DisplayName:LockoutEnabled' | abpLocalization }}
    - -
    - - -
    diff --git a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts index aaea54e4db..5b36b7351e 100644 --- a/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts +++ b/npm/ng-packs/packages/identity/src/lib/components/users/users.component.ts @@ -101,8 +101,7 @@ export class UsersComponent implements OnInit { name: [this.selected.name || '', [Validators.maxLength(64)]], surname: [this.selected.surname || '', [Validators.maxLength(64)]], phoneNumber: [this.selected.phoneNumber || '', [Validators.maxLength(16)]], - lockoutEnabled: [this.selected.lockoutEnabled || (this.selected.id ? false : true)], - twoFactorEnabled: [this.selected.twoFactorEnabled || (this.selected.id ? false : true)], + lockoutEnabled: [this.selected.id ? this.selected.lockoutEnabled : true], roleNames: this.fb.array( this.roles.map(role => this.fb.group({ diff --git a/npm/ng-packs/packages/identity/src/lib/proxy/identity/models.ts b/npm/ng-packs/packages/identity/src/lib/proxy/identity/models.ts index daaecf3e8d..95f62fa77e 100644 --- a/npm/ng-packs/packages/identity/src/lib/proxy/identity/models.ts +++ b/npm/ng-packs/packages/identity/src/lib/proxy/identity/models.ts @@ -41,7 +41,6 @@ export interface IdentityUserCreateOrUpdateDtoBase extends ExtensibleObject { surname: string; email: string; phoneNumber: string; - twoFactorEnabled: boolean; lockoutEnabled: boolean; roleNames: string[]; } @@ -55,7 +54,6 @@ export interface IdentityUserDto extends ExtensibleFullAuditedEntityDto emailConfirmed: boolean; phoneNumber: string; phoneNumberConfirmed: boolean; - twoFactorEnabled: boolean; lockoutEnabled: boolean; lockoutEnd?: string; concurrencyStamp: string; From 8380b8925c72816a9ca236c1151b9e24fba48eb8 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 22 Sep 2020 12:53:30 +0300 Subject: [PATCH 022/143] feat: upgrade ng-packs angular version to the latest resolves #5389 --- npm/ng-packs/apps/dev-app/tsconfig.dev.json | 2 +- npm/ng-packs/apps/dev-app/tsconfig.spec.json | 2 +- npm/ng-packs/package.json | 40 +- npm/ng-packs/tsconfig.base.json | 41 - npm/ng-packs/tsconfig.json | 78 +- npm/ng-packs/yarn.lock | 1493 +++++++++--------- 6 files changed, 802 insertions(+), 854 deletions(-) delete mode 100644 npm/ng-packs/tsconfig.base.json diff --git a/npm/ng-packs/apps/dev-app/tsconfig.dev.json b/npm/ng-packs/apps/dev-app/tsconfig.dev.json index 957c5b7c73..ecccaa21e0 100644 --- a/npm/ng-packs/apps/dev-app/tsconfig.dev.json +++ b/npm/ng-packs/apps/dev-app/tsconfig.dev.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "../../out-tsc/app", "types": [] diff --git a/npm/ng-packs/apps/dev-app/tsconfig.spec.json b/npm/ng-packs/apps/dev-app/tsconfig.spec.json index f21e414d94..e487d98612 100644 --- a/npm/ng-packs/apps/dev-app/tsconfig.spec.json +++ b/npm/ng-packs/apps/dev-app/tsconfig.spec.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "../../out-tsc/spec", "types": ["node", "jest"] diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index dfa1dea22a..2be429f268 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -21,7 +21,7 @@ "ci:test": "ng test --coverage=false --silent", "ci:build": "cd scripts && yarn install && yarn build:prod", "lerna": "lerna", - "compile:ivy": "yarn ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points --tsconfig './tsconfig.prod.json' --source node_modules --async false", + "compile:ivy": "yarn ngcc --properties es2015 browser module main --first-only --create-ivy-entry-points --tsconfig './tsconfig.prod.json' --source node_modules", "postinstall": "npm run compile:ivy" }, "devDependencies": { @@ -37,21 +37,21 @@ "@abp/ng.theme.shared": "~3.2.0-rc.2", "@abp/utils": "^3.2.0-rc.2", "@angular-builders/jest": "^10.0.0", - "@angular-devkit/build-angular": "~0.1000.6", - "@angular-devkit/build-ng-packagr": "~0.1000.6", + "@angular-devkit/build-angular": "~0.1001.2", + "@angular-devkit/build-ng-packagr": "~0.1001.2", "@angular-devkit/schematics-cli": "^0.1001.1", - "@angular/animations": "~10.0.10", - "@angular/cli": "~10.0.6", - "@angular/common": "~10.0.10", - "@angular/compiler": "10.0.0", - "@angular/compiler-cli": "10.0.0", - "@angular/core": "~10.0.10", - "@angular/forms": "~10.0.10", - "@angular/language-service": "~10.0.10", - "@angular/localize": "~10.0.10", - "@angular/platform-browser": "~10.0.10", - "@angular/platform-browser-dynamic": "~10.0.10", - "@angular/router": "~10.0.10", + "@angular/animations": "~10.1.2", + "@angular/cli": "~10.1.2", + "@angular/common": "~10.1.2", + "@angular/compiler": "10.1.2", + "@angular/compiler-cli": "10.1.2", + "@angular/core": "~10.1.2", + "@angular/forms": "~10.1.2", + "@angular/language-service": "~10.1.2", + "@angular/localize": "~10.1.2", + "@angular/platform-browser": "~10.1.2", + "@angular/platform-browser-dynamic": "~10.1.2", + "@angular/router": "~10.1.2", "@fortawesome/fontawesome-free": "^5.14.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0", "@ngneat/spectator": "^5.13.0", @@ -68,7 +68,7 @@ "angular-oauth2-oidc": "^10.0.3", "bootstrap": "^4.5.0", "chart.js": "^2.9.3", - "codelyzer": "^5.1.2", + "codelyzer": "^6.0.0", "conventional-changelog-cli": "^2.0.31", "cz-conventional-changelog": "3.0.2", "font-awesome": "^4.7.0", @@ -91,18 +91,14 @@ "symlink-manager": "^1.5.0", "ts-node": "~7.0.0", "ts-toolbelt": "6.15.4", - "tsickle": "^0.38.1", + "tsickle": "^0.39.1", "tslint": "~6.1.0", - "typescript": "~3.9.5", + "typescript": "~4.0.3", "zone.js": "~0.10.2" }, "dependencies": { "tslib": "^2.0.0" }, - "resolutions": { - "@angular/compiler": "10.0.0", - "@angular/compiler-cli": "10.0.0" - }, "config": { "commitizen": { "path": "cz-conventional-changelog" diff --git a/npm/ng-packs/tsconfig.base.json b/npm/ng-packs/tsconfig.base.json deleted file mode 100644 index 87b45cb3a9..0000000000 --- a/npm/ng-packs/tsconfig.base.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "compileOnSave": false, - "compilerOptions": { - "baseUrl": "./", - "outDir": "./dist/out-tsc", - "sourceMap": true, - "declaration": false, - "downlevelIteration": true, - "experimentalDecorators": true, - "module": "esnext", - "moduleResolution": "node", - "importHelpers": true, - "target": "es2015", - "typeRoots": ["node_modules/@types"], - "lib": ["es2018", "dom"], - "types": ["jest"], - "paths": { - "@abp/ng.core": ["packages/core/src/public-api.ts"], - "@abp/ng.theme.shared": ["packages/theme-shared/src/public-api.ts"], - "@abp/ng.theme.shared/extensions": ["packages/theme-shared/extensions/src/public-api.ts"], - "@abp/ng.components/tree": ["packages/components/tree/src/public-api.ts"], - "@abp/ng.theme.basic": ["packages/theme-basic/src/public-api.ts"], - "@abp/ng.account": ["packages/account/src/public-api.ts"], - "@abp/ng.account/config": ["packages/account/config/src/public-api.ts"], - "@abp/ng.identity": ["packages/identity/src/public-api.ts"], - "@abp/ng.identity/config": ["packages/identity/config/src/public-api.ts"], - "@abp/ng.tenant-management": ["packages/tenant-management/src/public-api.ts"], - "@abp/ng.tenant-management/config": ["packages/tenant-management/config/src/public-api.ts"], - "@abp/ng.setting-management": ["packages/setting-management/src/public-api.ts"], - "@abp/ng.setting-management/config": ["packages/setting-management/config/src/public-api.ts"], - "@abp/ng.permission-management": ["packages/permission-management/src/public-api.ts"], - "@abp/ng.feature-management": ["packages/feature-management/src/public-api.ts"], - "@proxy": ["apps/dev-app/src/app/proxy/index.ts"], - "@proxy/*": ["apps/dev-app/src/app/proxy/*"] - } - }, - "angularCompilerOptions": { - "fullTemplateTypeCheck": true, - "strictInjectionParameters": true - } -} diff --git a/npm/ng-packs/tsconfig.json b/npm/ng-packs/tsconfig.json index 4cf2a80ee8..87b45cb3a9 100644 --- a/npm/ng-packs/tsconfig.json +++ b/npm/ng-packs/tsconfig.json @@ -1,41 +1,41 @@ -/* - This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScript’s language server to improve development experience. - It is not intended to be used to perform a compilation. - - To learn more about this file see: https://angular.io/config/solution-tsconfig. -*/ { - "files": [], - "references": [ - { - "path": "./packages/core/tsconfig.lib.json" - }, - { - "path": "./packages/theme-shared/tsconfig.lib.json" - }, - { - "path": "./packages/theme-basic/tsconfig.lib.json" - }, - { - "path": "./packages/account/tsconfig.lib.json" - }, - { - "path": "./packages/permission-management/tsconfig.lib.json" - }, - { - "path": "./packages/identity/tsconfig.lib.json" - }, - { - "path": "./packages/feature-management/tsconfig.lib.json" - }, - { - "path": "./packages/tenant-management/tsconfig.lib.json" - }, - { - "path": "./packages/setting-management/tsconfig.lib.json" - }, - { - "path": "./apps/dev-app/tsconfig.dev.json" + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "module": "esnext", + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "typeRoots": ["node_modules/@types"], + "lib": ["es2018", "dom"], + "types": ["jest"], + "paths": { + "@abp/ng.core": ["packages/core/src/public-api.ts"], + "@abp/ng.theme.shared": ["packages/theme-shared/src/public-api.ts"], + "@abp/ng.theme.shared/extensions": ["packages/theme-shared/extensions/src/public-api.ts"], + "@abp/ng.components/tree": ["packages/components/tree/src/public-api.ts"], + "@abp/ng.theme.basic": ["packages/theme-basic/src/public-api.ts"], + "@abp/ng.account": ["packages/account/src/public-api.ts"], + "@abp/ng.account/config": ["packages/account/config/src/public-api.ts"], + "@abp/ng.identity": ["packages/identity/src/public-api.ts"], + "@abp/ng.identity/config": ["packages/identity/config/src/public-api.ts"], + "@abp/ng.tenant-management": ["packages/tenant-management/src/public-api.ts"], + "@abp/ng.tenant-management/config": ["packages/tenant-management/config/src/public-api.ts"], + "@abp/ng.setting-management": ["packages/setting-management/src/public-api.ts"], + "@abp/ng.setting-management/config": ["packages/setting-management/config/src/public-api.ts"], + "@abp/ng.permission-management": ["packages/permission-management/src/public-api.ts"], + "@abp/ng.feature-management": ["packages/feature-management/src/public-api.ts"], + "@proxy": ["apps/dev-app/src/app/proxy/index.ts"], + "@proxy/*": ["apps/dev-app/src/app/proxy/*"] } - ] -} \ No newline at end of file + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true + } +} diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index 9f43b90083..a5c9cd69b5 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -2,20 +2,20 @@ # yarn lockfile v1 -"@abp/ng.account@~3.2.0-rc.1": - version "3.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.2.0-rc.1.tgz#0b5e7abb30becb0c841cf00692856f0c123c2918" - integrity sha512-Xm3lHUfIyg86HxSmOosmbUqnfw1Klggybqy5fxtLm+sZ/JnrMWPdzQYO/Dw4gq5mwlVVKqD/pjk+hYPxe9+Eag== +"@abp/ng.account@~3.2.0-rc.2": + version "3.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/ng.account/-/ng.account-3.2.0-rc.2.tgz#30ec416a9d05f87fe2664943d72f051d1b84aaad" + integrity sha512-iobXZEJh/pXz4dxFjN407KTFJnFcaUBH4Bx5pwUAPV1HIXwNQzANWHe4389GEZjUohV+0WVhdRI85bffGFCOQA== dependencies: - "@abp/ng.theme.shared" "~3.2.0-rc.1" + "@abp/ng.theme.shared" "~3.2.0-rc.2" tslib "^2.0.0" -"@abp/ng.core@~3.2.0-rc.1": - version "3.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.2.0-rc.1.tgz#85bd27ae0da2732fbad9fd4af395e718ff2233d1" - integrity sha512-c3x0/Y4r7v1ZlvbYba2Vs/JrqemuSmCB1V9pQESlQfJJXJWhDZPi40jrA62X16AF42fUpK7GxWb1p13HpRk57A== +"@abp/ng.core@~3.2.0-rc.2": + version "3.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-3.2.0-rc.2.tgz#51ecd1884e99bb9a17802f786a25263f4d6fbfff" + integrity sha512-7zKejXr6Y75AlsrPsuBsmHmv2t4qCAfPhrgQ+/YHuqAd8h3XZcSWn75vKm8405KEe2pTTY8+mA+aUT8Mmc9HMg== dependencies: - "@abp/utils" "^3.1.2" + "@abp/utils" "^3.2.0-rc.1" "@angular/localize" "~10.0.10" "@ngxs/router-plugin" "^3.7.0" "@ngxs/storage-plugin" "^3.7.0" @@ -27,35 +27,35 @@ ts-toolbelt "6.15.4" tslib "^2.0.0" -"@abp/ng.feature-management@~3.2.0-rc.1": - version "3.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.2.0-rc.1.tgz#ce2e53ae323f9fad83a8afc8d194457956f1409c" - integrity sha512-HljQCTVgqmw9RPjHkvDgDuNuYR/+zAcAIQ18sNOgM7sigm+1E7jzi7EkOVchckLob1qrDqx0JJq8cDISr5jVMQ== +"@abp/ng.feature-management@~3.2.0-rc.2": + version "3.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-3.2.0-rc.2.tgz#a46f8ba30341249d091887c7588fce0ecd62b624" + integrity sha512-9ILmEboRKqHdCjVS/uYR8wHXJrC+8n8zEdtDu6mwbMoGG5G2iGWUbL0coQrFhkXXWetCq8M1KqEnBATTW9r0ng== dependencies: - "@abp/ng.theme.shared" "~3.2.0-rc.1" + "@abp/ng.theme.shared" "~3.2.0-rc.2" tslib "^2.0.0" -"@abp/ng.identity@~3.2.0-rc.1": - version "3.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.2.0-rc.1.tgz#912f481dd0649eceab573deb5dfbc9887b436792" - integrity sha512-WuPzl5zlOFOyXv4REnW9uUgac437nZTH8Z6oaJHWLCoDdh5vXUMbvCN5w4N2HIM0Rlp1+o/h2RP7MVv+5Smniw== +"@abp/ng.identity@~3.2.0-rc.2": + version "3.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-3.2.0-rc.2.tgz#075a119bb585753231195ba1a71a3484a8e157fa" + integrity sha512-RivOj97jGbJgS9dKA3HWfm3VOHPQZan+l33B6F6lR9W5z7PX454h7a/dEtVcBa1B4tsyELP48IUv6hNx7iw1KA== dependencies: - "@abp/ng.permission-management" "~3.2.0-rc.1" - "@abp/ng.theme.shared" "~3.2.0-rc.1" + "@abp/ng.permission-management" "~3.2.0-rc.2" + "@abp/ng.theme.shared" "~3.2.0-rc.2" tslib "^2.0.0" -"@abp/ng.permission-management@~3.2.0-rc.1": - version "3.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.2.0-rc.1.tgz#f9a13aa50331da316dd9d61ba260ca1e9bc19b72" - integrity sha512-Eakg2cS6xGeByhBNHj4L95kFjMMPh+T21LGOccs02UdbVaNy5k8YjPYpGdDrzKlfnYa6NJOnosvvncwwIHgQtA== +"@abp/ng.permission-management@~3.2.0-rc.2": + version "3.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-3.2.0-rc.2.tgz#cf0f74759a930b778b104d2e85dd9345b08a969d" + integrity sha512-7HKq0JcWcqSyOOfrP+ud3tTjrn+3STEOgjfAcTF6Xg0l6DxXlwVnEa653qE51GH0JfWp9iaOtXChmt6e0VMHqg== dependencies: - "@abp/ng.theme.shared" "~3.2.0-rc.1" + "@abp/ng.theme.shared" "~3.2.0-rc.2" tslib "^2.0.0" -"@abp/ng.schematics@~3.2.0-rc.1": - version "3.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.2.0-rc.1.tgz#47331238103cfce0f45e7c2969a6cc17a6a0c49b" - integrity sha512-sHgAq6moIfEXXht2ouYHUV5NfFfof1L13MfnvneNqgtksn5Au3KPQvEtXgl5hQ7+6mjgMumtyp7z3MzR+r9bBQ== +"@abp/ng.schematics@~3.2.0-rc.2": + version "3.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-3.2.0-rc.2.tgz#22f4a7d00abbde7b03d4bca179ca235efed3e6d1" + integrity sha512-QewJMq7AYOQomvtXT0O/v+KQ+AxF8Crfx6uKvInCQ3o/ne+fcwrWITgUTdjn78Eb+hRj9kBLux0PHJF1IOGLZQ== dependencies: "@angular-devkit/core" "~10.0.3" "@angular-devkit/schematics" "~10.0.3" @@ -63,37 +63,37 @@ jsonc-parser "^2.3.0" typescript "~3.9.2" -"@abp/ng.setting-management@~3.2.0-rc.1": - version "3.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.2.0-rc.1.tgz#df8d56df342eb57c478e43cd152666f657131aad" - integrity sha512-aND/Qj8xyKdxYg/LBtxQOvCHl1Pokp7P5L5/2Bpgme8zeRK7/xymUSemTQ0dSpCnFmE8vEreX0EacUqBFBFx0A== +"@abp/ng.setting-management@~3.2.0-rc.2": + version "3.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-3.2.0-rc.2.tgz#f4586190a57bb06bc675c30484adea7b598f3663" + integrity sha512-lRkBeh7evzbeg1aBX2b1X0rwzjfnbrNllIk3gHadnbeRKts+cy7njENzSfoMjBAxUUh5I1Pd5vwK6syz1nJ+0Q== dependencies: - "@abp/ng.theme.shared" "~3.2.0-rc.1" + "@abp/ng.theme.shared" "~3.2.0-rc.2" tslib "^2.0.0" -"@abp/ng.tenant-management@~3.2.0-rc.1": - version "3.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.2.0-rc.1.tgz#ec833e8a8a268b72a81be34c00b22b4b2ae5b635" - integrity sha512-hROU4eDEVaZvoeXXpEtxSF4OE1tzwRSqsTSTs5LQe7W/fB5LIp3Szmf5zpWuuwXxOZwGWzk7fUNgV7LXt9VmPg== +"@abp/ng.tenant-management@~3.2.0-rc.2": + version "3.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-3.2.0-rc.2.tgz#df82ff2c28680ea001bc7e4e9b84433c8d87f082" + integrity sha512-Rwh0UVzpk2ItGwjv/ftJ9U6ZEAeAeDpl5jr4xzFm4sa7H5hWVKFCOxjL1DZOrcI9dk6b6DUifsIvqHPy0KxURA== dependencies: - "@abp/ng.feature-management" "~3.2.0-rc.1" - "@abp/ng.theme.shared" "~3.2.0-rc.1" + "@abp/ng.feature-management" "~3.2.0-rc.2" + "@abp/ng.theme.shared" "~3.2.0-rc.2" tslib "^2.0.0" -"@abp/ng.theme.basic@~3.2.0-rc.1": - version "3.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.2.0-rc.1.tgz#b5df1c27774c7f278769c0f83fb1bbe9166da20c" - integrity sha512-iLNxxzfGZM3oKJ3zwXpv/TytI9SA7T64LKdFhnvlyrRca2GJOBMMSYlgmcs9e+USNmXVuHPhIAWA8/SBdUvyyA== +"@abp/ng.theme.basic@~3.2.0-rc.2": + version "3.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-3.2.0-rc.2.tgz#909e6d5a8da4acd04517eb974a631341195d47ee" + integrity sha512-DEebOMR7DSLF3iIVBBwb08EbZwn1jVc6lAvJIl4yttLbYjxmYc3ra5TXNSYJit0jeknmnibCo2rNDG6sFPeidg== dependencies: - "@abp/ng.theme.shared" "~3.2.0-rc.1" + "@abp/ng.theme.shared" "~3.2.0-rc.2" tslib "^2.0.0" -"@abp/ng.theme.shared@~3.2.0-rc.1": - version "3.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.2.0-rc.1.tgz#0e8e5f6cb8c2de05b4706142af6716f704d9ef16" - integrity sha512-CytunBUQeU2Sjfv6wqeud3lT052rC+9bJRehT23PpXUFlx3Tz5e7R44H/+66mLGmOzQWYWEcu+AbKTcqgM/4Ow== +"@abp/ng.theme.shared@~3.2.0-rc.2": + version "3.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-3.2.0-rc.2.tgz#4f8b1a44488be59888d6d458d356d436198404e5" + integrity sha512-WtYYo9dO+LGCUjkiZpgTN44oOA6r1O5Y+6XDxqoBGhzvhlN/Uz+t87cLkurhShRnqXAAd15DLW4Q/+y/F81tGQ== dependencies: - "@abp/ng.core" "~3.2.0-rc.1" + "@abp/ng.core" "~3.2.0-rc.2" "@fortawesome/fontawesome-free" "^5.14.0" "@ng-bootstrap/ng-bootstrap" "^7.0.0" "@ngx-validate/core" "^0.0.11" @@ -102,17 +102,10 @@ chart.js "^2.9.3" tslib "^2.0.0" -"@abp/utils@^3.1.2": - version "3.1.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.1.2.tgz#e9bca8f6133dc2af587c45825e734d2accabcd96" - integrity sha512-wnbHGQDGkQYazez1YSXAZ0ZDbsIZZr2ZN8V4LtOSAfzmYhPhFZ5qftoM0xoxlbmsuLLX6QtiPvxU35kEmlZPyg== - dependencies: - just-compare "^1.3.0" - -"@abp/utils@^3.2.0-rc.1": - version "3.2.0-rc.1" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.1.tgz#2231c62512bfff3b130283d35ac4a6458cf7d070" - integrity sha512-Qk+ZFmskrCIY2L/C3Dw6WxC0XHHvKmoue508HBvszEZsIwhdw9QJefmOn+Um0tMHo0p9Bd7By80CNlMjG3CLeg== +"@abp/utils@^3.2.0-rc.1", "@abp/utils@^3.2.0-rc.2": + version "3.2.0-rc.2" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" + integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== dependencies: just-compare "^1.3.0" @@ -126,119 +119,112 @@ jest-preset-angular "^8.2.1" lodash "^4.17.15" -"@angular-devkit/architect@0.1000.8": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1000.8.tgz#dac11e07877145056ca6d22319f2a859bab6720d" - integrity sha512-2AqPbiEugtPxNz4MGhLh+imUVelhW9h1cdJs2AbxZosIxftPb5DNDQUSAwVmRGp4CtcXVrlvcDwc0f4Fw1aiIA== - dependencies: - "@angular-devkit/core" "10.0.8" - rxjs "6.5.5" - -"@angular-devkit/architect@>=0.1000.0 < 0.1100.0": - version "0.1001.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1001.1.tgz#ec17baf535160199dd7497a931ea60b185d82bfc" - integrity sha512-2jRO7L/k9gNxHVJxPoUMVvtf/KzsSXNT7akbAbb8CkBJxjx3NC3Y9NssPD9E78kyiXogO6IvkwyalBGrWvOPBQ== +"@angular-devkit/architect@0.1001.2", "@angular-devkit/architect@>=0.1000.0 < 0.1100.0": + version "0.1001.2" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1001.2.tgz#9f4d1f95e85a2b85d26bf8f5c06909552d703a02" + integrity sha512-05o12amjZ8NNIFehKm/lFYf12xvCclC7V5tGl/9+V7g/3pQqakwAjCysgb9T+ETffhmKhMnE8XdAJZqF7YrDcw== dependencies: - "@angular-devkit/core" "10.1.1" + "@angular-devkit/core" "10.1.2" rxjs "6.6.2" -"@angular-devkit/build-angular@~0.1000.6": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1000.8.tgz#28744499b59d85e6d16b27f3ee09e4d86c5770fe" - integrity sha512-wwDN2oadQvYPL7lDmvGsoWQjW++0ZnxWk1QVlABGhBSIs8Uxs26Hjd5YNUSsvJavBkqb1UZIOilqzb4dig5MIA== - dependencies: - "@angular-devkit/architect" "0.1000.8" - "@angular-devkit/build-optimizer" "0.1000.8" - "@angular-devkit/build-webpack" "0.1000.8" - "@angular-devkit/core" "10.0.8" - "@babel/core" "7.9.6" - "@babel/generator" "7.9.6" - "@babel/plugin-transform-runtime" "7.9.6" - "@babel/preset-env" "7.9.6" - "@babel/runtime" "7.9.6" - "@babel/template" "7.8.6" - "@jsdevtools/coverage-istanbul-loader" "3.0.3" - "@ngtools/webpack" "10.0.8" - ajv "6.12.3" - autoprefixer "9.8.0" +"@angular-devkit/build-angular@~0.1001.2": + version "0.1001.2" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1001.2.tgz#3f7de9798ea7432563fac1894604f8812bbf96f5" + integrity sha512-G03ORkh5j0+1rFXcMlwiIbIkrx9LpUeubqCQM+9uHmfTOtS2mLpgiY/ChECyGz6NKhy8GhUmQ9BuVkO8Mh+NAQ== + dependencies: + "@angular-devkit/architect" "0.1001.2" + "@angular-devkit/build-optimizer" "0.1001.2" + "@angular-devkit/build-webpack" "0.1001.2" + "@angular-devkit/core" "10.1.2" + "@babel/core" "7.11.1" + "@babel/generator" "7.11.0" + "@babel/plugin-transform-runtime" "7.11.0" + "@babel/preset-env" "7.11.0" + "@babel/runtime" "7.11.2" + "@babel/template" "7.10.4" + "@jsdevtools/coverage-istanbul-loader" "3.0.5" + "@ngtools/webpack" "10.1.2" + autoprefixer "9.8.6" babel-loader "8.1.0" browserslist "^4.9.1" - cacache "15.0.3" + cacache "15.0.5" caniuse-lite "^1.0.30001032" circular-dependency-plugin "5.2.0" copy-webpack-plugin "6.0.3" core-js "3.6.4" - css-loader "3.5.3" + css-loader "4.2.2" cssnano "4.1.10" file-loader "6.0.0" find-cache-dir "3.3.1" glob "7.1.6" - jest-worker "26.0.0" + jest-worker "26.3.0" karma-source-map-support "1.4.0" - less-loader "6.1.0" - license-webpack-plugin "2.2.0" + less-loader "6.2.0" + license-webpack-plugin "2.3.0" loader-utils "2.0.0" - mini-css-extract-plugin "0.9.0" + mini-css-extract-plugin "0.10.0" minimatch "3.0.4" - open "7.0.4" - parse5 "4.0.0" + open "7.2.0" + parse5 "6.0.1" + parse5-htmlparser2-tree-adapter "6.0.1" pnp-webpack-plugin "1.6.4" - postcss "7.0.31" + postcss "7.0.32" postcss-import "12.0.1" postcss-loader "3.0.0" raw-loader "4.0.1" - regenerator-runtime "0.13.5" + regenerator-runtime "0.13.7" resolve-url-loader "3.1.1" rimraf "3.0.2" - rollup "2.10.9" - rxjs "6.5.5" - sass "1.26.5" - sass-loader "8.0.2" + rollup "2.26.5" + rxjs "6.6.2" + sass "1.26.10" + sass-loader "10.0.1" semver "7.3.2" source-map "0.7.3" - source-map-loader "1.0.0" + source-map-loader "1.0.2" source-map-support "0.5.19" speed-measure-webpack-plugin "1.3.3" style-loader "1.2.1" - stylus "0.54.7" + stylus "0.54.8" stylus-loader "3.0.2" - terser "4.7.0" - terser-webpack-plugin "3.0.1" + terser "5.3.0" + terser-webpack-plugin "4.1.0" tree-kill "1.2.2" - webpack "4.43.0" + webpack "4.44.1" webpack-dev-middleware "3.7.2" webpack-dev-server "3.11.0" webpack-merge "4.2.2" webpack-sources "1.4.3" webpack-subresource-integrity "1.4.1" - worker-plugin "4.0.3" + worker-plugin "5.0.0" -"@angular-devkit/build-ng-packagr@~0.1000.6": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.1000.8.tgz#092805975248203043f0fbaf7a723be90bcdcbf0" - integrity sha512-sif0JkCjghhtHpxFfb2fJ6MnlyJXxhaWxswxnFSNQd9uLEr101AC7Ep0aDRnSJ2JUoSk1nlZnVtDqYUYAYexWw== +"@angular-devkit/build-ng-packagr@~0.1001.2": + version "0.1001.2" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.1001.2.tgz#96ab007edc95487df6382a7161e10a324306dd09" + integrity sha512-tDGcrLA7z7/teuKlrhKL+1OgImLdY8wVv5OpFb219gG/t0mRy27xHzTd1YxulOjkaSfDUNIi859mnySv8knVsw== dependencies: - "@angular-devkit/architect" "0.1000.8" - rxjs "6.5.5" + "@angular-devkit/architect" "0.1001.2" + rxjs "6.6.2" -"@angular-devkit/build-optimizer@0.1000.8": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1000.8.tgz#55023cf9e16813cc01b255e99fabb92426eeb632" - integrity sha512-esODHuTGEEMx1SmLUq03VAMly8gZUd1vRuvZeKS5HqKwDg8ZzcI7/25BuuUSlyST+6BEdjo2gnmagQnG0VBdQw== +"@angular-devkit/build-optimizer@0.1001.2": + version "0.1001.2" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1001.2.tgz#ba0f51f245b1df435fe714357a8ea261125da958" + integrity sha512-aykCI0cP6wEW/6GsV0Rs59doN0n5ztsM2+qFrZMSHyggaNzllVafYbQwVvA7t503QpOsmT5E+kve/S/4dMgmFg== dependencies: loader-utils "2.0.0" source-map "0.7.3" - tslib "2.0.0" + tslib "2.0.1" + typescript "4.0.2" webpack-sources "1.4.3" -"@angular-devkit/build-webpack@0.1000.8": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1000.8.tgz#048bd8e2db19b42cb3913dd2959dcd2589e5ec10" - integrity sha512-y/U+dV5N8W7KECncGSKQWoUH/DFNZCseczyl6LAd8bc0fMr8Z0TAIe8OXj+5CSRRdejWfRIxGtNWM+L2kTCU8A== +"@angular-devkit/build-webpack@0.1001.2": + version "0.1001.2" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1001.2.tgz#4d4c2add320ebd1b654ac499a335c3cedb4fd742" + integrity sha512-+rdxyZOnTou8yAVU8nU49D0PVuIXGQY+V08KukeZsoszJGlwvqfGq1CMJLFlsq3goszTIDCetgmMYvtbaYVrxw== dependencies: - "@angular-devkit/architect" "0.1000.8" - "@angular-devkit/core" "10.0.8" - rxjs "6.5.5" + "@angular-devkit/architect" "0.1001.2" + "@angular-devkit/core" "10.1.2" + rxjs "6.6.2" "@angular-devkit/core@10.0.8", "@angular-devkit/core@~10.0.3": version "10.0.8" @@ -251,10 +237,10 @@ rxjs "6.5.5" source-map "0.7.3" -"@angular-devkit/core@10.1.1", "@angular-devkit/core@^10.0.0": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.1.1.tgz#96e4f7af4ef17810f6ff87786c83841f466b4122" - integrity sha512-0ZmknL5I177JO+iOz2gDSqHtPK3zGGwyz4ix9IIu172eFRX53sdbl1vDiMikovyvZWx5fXqU3Vazf7CUeGA28w== +"@angular-devkit/core@10.1.2", "@angular-devkit/core@^10.0.0": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.1.2.tgz#3deb429596a6127c5b68bbc3bbd49cf00aeac966" + integrity sha512-LMxesiCuXRe3UzPdRouXsC1W73/q6rVtACVoD5GdzmmnZ7cRh7oiwonqT0lEXIKQikMsZUasUOXHD2HoKV6BoA== dependencies: ajv "6.12.4" fast-json-stable-stringify "2.1.0" @@ -274,13 +260,13 @@ source-map "0.7.3" "@angular-devkit/schematics-cli@^0.1001.1": - version "0.1001.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-0.1001.1.tgz#b4ff180e7b5134928d1588c2cf2f7350296d4a0f" - integrity sha512-VkmbbI8boHwUNO1JEv0GPEzddScvrNu1ZEIhX6++M7s58sVbdIQhE2zX2MpFOQfUBCPtJXmWPUuXEcMsbKzQ2g== + version "0.1001.2" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-0.1001.2.tgz#aeb54fe5f3edfd931c4a6d8c95d5e1bc08debf7a" + integrity sha512-hjFIYrz7a/qBZKHagR03wgX00ue82IrQewl+EefmZlFA7sNZ1PUYrVRdAgr89Wz1RsE9APxpHyUI162f8kHcwg== dependencies: - "@angular-devkit/core" "10.1.1" - "@angular-devkit/schematics" "10.1.1" - "@schematics/schematics" "0.1001.1" + "@angular-devkit/core" "10.1.2" + "@angular-devkit/schematics" "10.1.2" + "@schematics/schematics" "0.1001.2" inquirer "7.3.3" minimist "1.2.5" rxjs "6.6.2" @@ -295,12 +281,12 @@ ora "4.0.4" rxjs "6.5.5" -"@angular-devkit/schematics@10.1.1": - version "10.1.1" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.1.1.tgz#70e3ff6c25047f4d97d3eb61912e5d1e245b022a" - integrity sha512-4UrBbDkuzGmBN1YDG3+GBJ21C+X29vxO0k2EDGrFFjQROsDeogeyWJoUP789v4JCCz9DHF2TRmdhQiEBctZXMg== +"@angular-devkit/schematics@10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.1.2.tgz#4b0bff6248f5a58337877cf32e29325ae96f1eea" + integrity sha512-gS5yP8ntw3/v9zBK9kBsp5r4gYlp8cLvJ3oWLZmSvdzzbm/QznPnRKqNm72AptKrlxRFX0xyrJ7vjtLWcssqxA== dependencies: - "@angular-devkit/core" "10.1.1" + "@angular-devkit/core" "10.1.2" ora "5.0.0" rxjs "6.6.2" @@ -312,10 +298,10 @@ "@angular-devkit/core" "8.3.29" rxjs "6.4.0" -"@angular/animations@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-10.0.14.tgz#8e7fa9b26c70cf8e67ec0cc943211eb3957dda8c" - integrity sha512-0BOGQOuaudIG0pq6FAnG55teKM7tEQZdIwdoOf0okhh9n0cFWSWRUjvUxWt25bWswlO+HxELyJioiRUvVSES4g== +"@angular/animations@~10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-10.1.2.tgz#2d66399cc06a9b3c804c67a3fbb71266a6190da9" + integrity sha512-39KSRY61pLaggbuikx4bltJQQ/l54RjPDffZrUJsuCXIpBKHd+ew8CJ3rud+zjhDfA3pETb7WE1jeCNKo6Zo1A== dependencies: tslib "^2.0.0" @@ -326,43 +312,43 @@ optionalDependencies: parse5 "^5.0.0" -"@angular/cli@~10.0.6": - version "10.0.8" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-10.0.8.tgz#133f1ea23e622923fd5dae27f5689379cfacaad3" - integrity sha512-unTteffLepsFw7qQulHOLLyLqCpQMOaZo0WO4x6cQGcW2mc0WgwnwBW2JDYMx1U2434t/Q13LqYMPNYWyCGsog== +"@angular/cli@~10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-10.1.2.tgz#12fa01a4f93fc92151e00c3f26c17656c022c5f1" + integrity sha512-dBcqFTuT71CCkH4BoV2cN5RP5k8ggzOBijNNtwkQv7N4gNcdcczhoPtEa2v4Oo8mPcTwxf/C3RXZ+NicdROJOw== dependencies: - "@angular-devkit/architect" "0.1000.8" - "@angular-devkit/core" "10.0.8" - "@angular-devkit/schematics" "10.0.8" - "@schematics/angular" "10.0.8" - "@schematics/update" "0.1000.8" + "@angular-devkit/architect" "0.1001.2" + "@angular-devkit/core" "10.1.2" + "@angular-devkit/schematics" "10.1.2" + "@schematics/angular" "10.1.2" + "@schematics/update" "0.1001.2" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.1" debug "4.1.1" ini "1.3.5" - inquirer "7.1.0" + inquirer "7.3.3" npm-package-arg "8.0.1" npm-pick-manifest "6.1.0" - open "7.0.4" + open "7.2.0" pacote "9.5.12" read-package-tree "5.3.1" rimraf "3.0.2" semver "7.3.2" symbol-observable "1.2.0" - universal-analytics "0.4.20" - uuid "8.1.0" + universal-analytics "0.4.23" + uuid "8.3.0" -"@angular/common@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-10.0.14.tgz#a08228323609a22559590f4295b26f247f7438f4" - integrity sha512-EOAuaMt2HwJF3DtIJ/ksHtnF8Pqh5K2rWISYLEs9R3WNaSGn74kbCODAT4pNhI8P22Ykl3H4FmQUgnDZ3uDAUg== +"@angular/common@~10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-10.1.2.tgz#c075f9f9a192c301f5bc483cc490d17c86d62b15" + integrity sha512-zsWZN30sUJVXcakKK+B7ANzDZNK5fqZRwawCp5IteUNveqxfl70CqSTft0twOnva0NGsiTgix9WH5XqnUJqYzg== dependencies: tslib "^2.0.0" -"@angular/compiler-cli@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-10.0.0.tgz#6fe60e239b01fd10d3923a3de88877512e0e2d40" - integrity sha512-KusRkS1NKPrjhj3BXoxRgeejuJVy/ra4dcDV3hpscRmR8FSdim3rs2H+lYK2hZ26ISGsYUvC8cHNaMqP2U3X+g== +"@angular/compiler-cli@10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-10.1.2.tgz#461c829095f05cf0605d35d27f9f0e8d5ea16e55" + integrity sha512-oZ6uSmiJ5JnNpLYhpEpKOXIU90mAidjMY0u/aJcCQnARWa/t72c/txlEkiB0CO41Hi6k3Hqb4XAERmIzQ6H59A== dependencies: canonical-path "1.0.0" chokidar "^3.0.0" @@ -378,31 +364,41 @@ tslib "^2.0.0" yargs "15.3.0" -"@angular/compiler@10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-10.0.0.tgz#15f0a0e5760ebc6fcbc06b0b3bb5f110282cf03d" - integrity sha512-meyJKPLLhkgjxF4dvdJq/sw7MI7KvpgYADoFt2K/5dt48ExXRj+kDlyQC6FAwm9mbgSea/A+JpDG8HMPU7AK5Q== +"@angular/compiler@10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-10.1.2.tgz#f8ca2bdf6b8f09be5cbebda52e3edb08f5ce64e8" + integrity sha512-P7AMt15HwCXVBZcTqh9HqQcSTRzSy1cUjOjy+POz4C5VRAzpOXMUkh5mlbv9FtnrfmCIili7hBrf06a/q8orPQ== dependencies: tslib "^2.0.0" -"@angular/core@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-10.0.14.tgz#000f091e6c17239232120fdca871fdac6b529ebd" - integrity sha512-m+c9g6fA/gE+6K7It01b6r8TEmbuFjUZajQ9gG/pzist0mTBcqfvn0O4h5X+ebnSgw/bbnnp+4PbaXEi1pOWZQ== +"@angular/compiler@9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.0.0.tgz#87e0bef4c369b6cadae07e3a4295778fc93799d5" + integrity sha512-ctjwuntPfZZT2mNj2NDIVu51t9cvbhl/16epc5xEwyzyDt76pX9UgwvY+MbXrf/C/FWwdtmNtfP698BKI+9leQ== + +"@angular/core@9.0.0": + version "9.0.0" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.0.0.tgz#227dc53e1ac81824f998c6e76000b7efc522641e" + integrity sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w== + +"@angular/core@~10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-10.1.2.tgz#53fc470383f7850aa6f025b89b12643109d2cf24" + integrity sha512-iBVkCgXMp3TofrbZVwpuSbLAiLHF/fbx9xHnFcjBQUXBUIoxiEB4NcrPHibmBVNX0J45hO6iLsG+ZtFZbMifNg== dependencies: tslib "^2.0.0" -"@angular/forms@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-10.0.14.tgz#b6e1a7f872c318039be21b0a11839c8df063f0a3" - integrity sha512-McKh3rXDlAE7qmCnyWKENb2HhqAT+1dsAfChuqs0w8jhKkoRgA00RDFee6dZ6XQCc907DwuV0K8+wC3CvBp35w== +"@angular/forms@~10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-10.1.2.tgz#3f877468a25a8e54c02b8713906efd64c2823d7d" + integrity sha512-BzzhKabLdI7JZAGz6oa+7ITEpVGhR+Tu0nhRsgyjZijz02vWAMexr1xXILLgCNMiMG509WDFvIbTwsd6lIFsXA== dependencies: tslib "^2.0.0" -"@angular/language-service@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-10.0.14.tgz#b9c33d27dcd11e2bb0c5453df1e7b334a0896a94" - integrity sha512-QQLYUjD0T6u2hLNYXUEUbupAGsz5egmhCAckaQojvXCe3SLL/hQsrK4odrNuspy7TvMB0H5ZNEHGlF6m/WLZ3g== +"@angular/language-service@~10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-10.1.2.tgz#569584307e712226c4b0091e3265d0756951f2c1" + integrity sha512-NYAvbiqzj2cxIAFiqZQSEVqbKaRaJKEn/qRlzMbfELbJV3Vwzw6oDwV550LnX4ZXOdsfMvEV4zJLBjUMDbpevg== "@angular/localize@~10.0.10": version "10.0.14" @@ -413,24 +409,33 @@ glob "7.1.2" yargs "15.3.0" -"@angular/platform-browser-dynamic@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.0.14.tgz#4ee2257b2ccb94949f0a8083884020a814b5d47c" - integrity sha512-PPCAiNh/JSuQNKXOhj3a8CTFdVhTgF/EpGtaotnVr/BfbJMeFImKo7m2QQOTsAFaEP2DurSHnofPnMWAfHS2mg== +"@angular/localize@~10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-10.1.2.tgz#945bac55663c075059be3325c9e841e5227d03e3" + integrity sha512-29vEx/4B5Eb8iZAvgnFdglba9jpKwqgDW4zlE6Bxswh2BZ8ZXpUG0HCImzaVTUe3PL2NGCbe5ZYbBCMq+kVIqg== + dependencies: + "@babel/core" "7.8.3" + glob "7.1.2" + yargs "15.3.0" + +"@angular/platform-browser-dynamic@~10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.1.2.tgz#af5fe1cccc6869f6f4f7b60c11aeb873b91b0fd4" + integrity sha512-ePxQdVSh3pJLq4Zxc+27VW+ekyU5MGrGDT/gpLhzXWu1EEUe786Q9fM4T6yA7mDP/1XF7HngF3hlMqla2ayqeA== dependencies: tslib "^2.0.0" -"@angular/platform-browser@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-10.0.14.tgz#43b9aa7fcd8f312b58f371206df265c31ea13fac" - integrity sha512-DcBZ1wt2TwtXrdcmCTWanAzu2Vxk5Uvioam0UcDxcgXD84T2fHipyfZVn07fMqRvzFQj45tDNAEevFBnGZar4w== +"@angular/platform-browser@~10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-10.1.2.tgz#2f022dbaac5bad2f3d10a89207128b94b8d0c63e" + integrity sha512-zI6YUy2juR8y8jDfdGGYHxZ9kv3wDZzFj49CObx9GU6+ijQ9FsFCWnsB44LmlzC17xCoQ9wn+zYIHtpdf80zvA== dependencies: tslib "^2.0.0" -"@angular/router@~10.0.10": - version "10.0.14" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-10.0.14.tgz#e8942e93a8154e1be749e1f9d79afa5f7b5b9cb9" - integrity sha512-VWzaNyPZDY99TMszV1GlXJgVOxXsjhJrsv3mIcjaz1dfdlKOeKTVDLdnyXfP9CkwE3PRmvG7eSXppIj6nn9BpQ== +"@angular/router@~10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-10.1.2.tgz#bddfdd4acc88bf1eab359859dc3f832a448489e1" + integrity sha512-JufAdFyTsB9I9aMD/WNBaI4Fi81SuN6cJm9idSwsUHbEOfB96aQL4dfNEOarzfD9KtDi1vADzkrmVRc2tz2qNw== dependencies: tslib "^2.0.0" @@ -455,7 +460,7 @@ dependencies: "@babel/highlight" "^7.10.4" -"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.9.6": +"@babel/compat-data@^7.10.4", "@babel/compat-data@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.11.0.tgz#e9f73efe09af1355b723a7f39b11bad637d7c99c" integrity sha512-TPSvJfv73ng0pfnEOh17bYMPQbI95+nGWc71Ss4vZdRBHTDqmM9Z8ZV4rYz8Ks7sfzc95n30k6ODIq5UGnXcYQ== @@ -464,6 +469,28 @@ invariant "^2.2.4" semver "^5.5.0" +"@babel/core@7.11.1": + version "7.11.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.1.tgz#2c55b604e73a40dc21b0e52650b11c65cf276643" + integrity sha512-XqF7F6FWQdKGGWAzGELL+aCO1p+lRY5Tj5/tbT3St1G8NaH70jhhDIKknIZaDans0OQBG5wRAldROLHSt44BgQ== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.11.0" + "@babel/helper-module-transforms" "^7.11.0" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.11.1" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.11.0" + "@babel/types" "^7.11.0" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" @@ -485,28 +512,6 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.6.tgz#d9aa1f580abf3b2286ef40b6904d390904c63376" - integrity sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.6" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.6" - "@babel/parser" "^7.9.6" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.6" - "@babel/types" "^7.9.6" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - "@babel/core@^7.1.0", "@babel/core@^7.7.5": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" @@ -529,17 +534,16 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.6.tgz#5408c82ac5de98cda0d77d8124e99fa1f2170a43" - integrity sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ== +"@babel/generator@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.0.tgz#4b90c78d8c12825024568cbe83ee6c9af193585c" + integrity sha512-fEm3Uzw7Mc9Xi//qU20cBKatTfs2aOtKqmvy/Vm7RkJEGFQ4xc9myCfbXxqK//ZS8MR/ciOHw6meGASJuKmDfQ== dependencies: - "@babel/types" "^7.9.6" + "@babel/types" "^7.11.0" jsesc "^2.5.1" - lodash "^4.17.13" source-map "^0.5.0" -"@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.8.3", "@babel/generator@^7.9.6": +"@babel/generator@^7.11.0", "@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.8.3": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" integrity sha512-DWtQ1PV3r+cLbySoHrwn9RWEgKMBLLma4OBQloPRyDYvc5msJM9kvTLo1YnlJd1P/ZuKbdli3ijr5q3FvAF3uA== @@ -563,7 +567,7 @@ "@babel/helper-explode-assignable-expression" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helper-compilation-targets@^7.9.6": +"@babel/helper-compilation-targets@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== @@ -574,6 +578,18 @@ levenary "^1.1.1" semver "^5.5.0" +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.10.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" + integrity sha512-0nkdeijB7VlZoLT3r/mY3bUkw3T8WG/hNw+FATs/6+pG2039IJWjTYL0VTISqsNHMUTEnwbVnc89WIJX9Qed0A== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.5" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/helper-create-regexp-features-plugin@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" @@ -622,21 +638,21 @@ dependencies: "@babel/types" "^7.10.4" -"@babel/helper-member-expression-to-functions@^7.10.4": +"@babel/helper-member-expression-to-functions@^7.10.4", "@babel/helper-member-expression-to-functions@^7.10.5": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.11.0.tgz#ae69c83d84ee82f4b42f96e2a09410935a8f26df" integrity sha512-JbFlKHFntRV5qKw3YC0CvQnDZ4XMwgzzBbld7Ly4Mj4cbFy3KywcR8NtNctRToMWJOVvLINJv525Gd6wwVEx/Q== dependencies: "@babel/types" "^7.11.0" -"@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.8.3": +"@babel/helper-module-imports@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== dependencies: "@babel/types" "^7.10.4" -"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0", "@babel/helper-module-transforms@^7.9.0": +"@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" integrity sha512-02EVu8COMuTRO1TAzdMtpBPbe6aQ1w/8fePD2YgQmxZU4gpNWaL9gK3Jp7dxlkUlUCJOTaSeA+Hrm1BRQwqIhg== @@ -725,7 +741,7 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/helpers@^7.10.4", "@babel/helpers@^7.8.3", "@babel/helpers@^7.9.6": +"@babel/helpers@^7.10.4", "@babel/helpers@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== @@ -743,12 +759,12 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.5", "@babel/parser@^7.8.3", "@babel/parser@^7.8.6", "@babel/parser@^7.9.6": +"@babel/parser@^7.1.0", "@babel/parser@^7.10.4", "@babel/parser@^7.11.1", "@babel/parser@^7.11.5", "@babel/parser@^7.8.3": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== -"@babel/plugin-proposal-async-generator-functions@^7.8.3": +"@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" integrity sha512-cNMCVezQbrRGvXJwm9fu/1sJj9bHdGAgKodZdLqOQIpfoH3raqmRPBM17+lh7CzhiKRRBrGtZL9WcjxSoGYUSg== @@ -757,7 +773,15 @@ "@babel/helper-remap-async-to-generator" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-dynamic-import@^7.8.3": +"@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== @@ -765,7 +789,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.8.3": +"@babel/plugin-proposal-export-namespace-from@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.10.4.tgz#570d883b91031637b3e2958eea3c438e62c05f54" + integrity sha512-aNdf0LY6/3WXkhh0Fdb6Zk9j1NMD8ovj3F6r0+3j837Pn1S1PdNtcwJ5EG9WkVPNHPxyJDaxMaAOVq4eki0qbg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + +"@babel/plugin-proposal-json-strings@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== @@ -773,7 +805,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": +"@babel/plugin-proposal-logical-assignment-operators@^7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" + integrity sha512-/f8p4z+Auz0Uaf+i8Ekf1iM7wUNLcViFUGiPxKeXvxTSl63B875YPiVdUDdem7hREcI0E0kSpEhS8tF5RphK7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== @@ -781,7 +821,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-numeric-separator@^7.8.3": +"@babel/plugin-proposal-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== @@ -789,7 +829,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.9.6": +"@babel/plugin-proposal-object-rest-spread@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== @@ -798,7 +838,7 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.10.4" -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== @@ -806,7 +846,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.9.0": +"@babel/plugin-proposal-optional-chaining@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" integrity sha512-v9fZIu3Y8562RRwhm1BbMRxtqZNFmFA2EG+pT2diuU8PT3H6T/KXoZ54KgYisfOFZHV6PfvAiBIZ9Rcz+/JCxA== @@ -815,7 +855,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== @@ -837,7 +885,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.10.4", "@babel/plugin-syntax-class-properties@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== @@ -851,6 +899,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-export-namespace-from@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" + integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.3" + "@babel/plugin-syntax-import-meta@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" @@ -865,7 +920,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -879,7 +934,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -907,21 +962,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.8.3": +"@babel/plugin-transform-arrow-functions@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.8.3": +"@babel/plugin-transform-async-to-generator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== @@ -930,21 +985,21 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.10.4" -"@babel/plugin-transform-block-scoped-functions@^7.8.3": +"@babel/plugin-transform-block-scoped-functions@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.8.3": +"@babel/plugin-transform-block-scoping@^7.10.4": version "7.11.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" integrity sha512-00dYeDE0EVEHuuM+26+0w/SCL0BH2Qy7LwHuI4Hi4MH5gkC8/AqMN5uWFJIsoXZrAphiMm1iXzBw6L2T+eA0ew== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-classes@^7.9.5": +"@babel/plugin-transform-classes@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== @@ -958,21 +1013,21 @@ "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.8.3": +"@babel/plugin-transform-computed-properties@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.9.5": +"@babel/plugin-transform-destructuring@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== @@ -980,14 +1035,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-duplicate-keys@^7.8.3": +"@babel/plugin-transform-duplicate-keys@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.8.3": +"@babel/plugin-transform-exponentiation-operator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== @@ -995,14 +1050,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-for-of@^7.9.0": +"@babel/plugin-transform-for-of@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-function-name@^7.8.3": +"@babel/plugin-transform-function-name@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== @@ -1010,21 +1065,21 @@ "@babel/helper-function-name" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.8.3": +"@babel/plugin-transform-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.8.3": +"@babel/plugin-transform-member-expression-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.9.6": +"@babel/plugin-transform-modules-amd@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" integrity sha512-elm5uruNio7CTLFItVC/rIzKLfQ17+fX7EVz5W0TMgIHFo1zY0Ozzx+lgwhL4plzl8OzVn6Qasx5DeEFyoNiRw== @@ -1033,7 +1088,7 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-commonjs@^7.9.6": +"@babel/plugin-transform-modules-commonjs@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== @@ -1043,7 +1098,7 @@ "@babel/helper-simple-access" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.9.6": +"@babel/plugin-transform-modules-systemjs@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" integrity sha512-f4RLO/OL14/FP1AEbcsWMzpbUz6tssRaeQg11RH1BP/XnPpRoVwgeYViMFacnkaw4k4wjRSjn3ip1Uw9TaXuMw== @@ -1053,7 +1108,7 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.9.0": +"@babel/plugin-transform-modules-umd@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== @@ -1061,21 +1116,21 @@ "@babel/helper-module-transforms" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== dependencies: "@babel/helper-create-regexp-features-plugin" "^7.10.4" -"@babel/plugin-transform-new-target@^7.8.3": +"@babel/plugin-transform-new-target@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-object-super@^7.8.3": +"@babel/plugin-transform-object-super@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== @@ -1083,7 +1138,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.10.4" -"@babel/plugin-transform-parameters@^7.10.4", "@babel/plugin-transform-parameters@^7.9.5": +"@babel/plugin-transform-parameters@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" integrity sha512-xPHwUj5RdFV8l1wuYiu5S9fqWGM2DrYc24TMvUiRrPVm+SM3XeqU9BcokQX/kEUe+p2RBwy+yoiR1w/Blq6ubw== @@ -1091,45 +1146,45 @@ "@babel/helper-get-function-arity" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.8.3": +"@babel/plugin-transform-property-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.8.7": +"@babel/plugin-transform-regenerator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== dependencies: regenerator-transform "^0.14.2" -"@babel/plugin-transform-reserved-words@^7.8.3": +"@babel/plugin-transform-reserved-words@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-runtime@7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.9.6.tgz#3ba804438ad0d880a17bca5eaa0cdf1edeedb2fd" - integrity sha512-qcmiECD0mYOjOIt8YHNsAP1SxPooC/rDmfmiSK9BNY72EitdSc7l44WTEklaWuFtbOEBjNhWWyph/kOImbNJ4w== +"@babel/plugin-transform-runtime@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.11.0.tgz#e27f78eb36f19448636e05c33c90fd9ad9b8bccf" + integrity sha512-LFEsP+t3wkYBlis8w6/kmnd6Kb1dxTd+wGJ8MlxTGzQo//ehtqlVL4S9DNUa53+dtPSQobN2CXx4d81FqC58cw== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" resolve "^1.8.1" semver "^5.5.1" -"@babel/plugin-transform-shorthand-properties@^7.8.3": +"@babel/plugin-transform-shorthand-properties@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-spread@^7.8.3": +"@babel/plugin-transform-spread@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" integrity sha512-UwQYGOqIdQJe4aWNyS7noqAnN2VbaczPLiEtln+zPowRNlD+79w3oi2TWfYe0eZgd+gjZCbsydN7lzWysDt+gw== @@ -1137,7 +1192,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" -"@babel/plugin-transform-sticky-regex@^7.8.3": +"@babel/plugin-transform-sticky-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== @@ -1145,7 +1200,7 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-regex" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.8.3": +"@babel/plugin-transform-template-literals@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" integrity sha512-V/lnPGIb+KT12OQikDvgSuesRX14ck5FfJXt6+tXhdkJ+Vsd0lDCVtF6jcB4rNClYFzaB2jusZ+lNISDk2mMMw== @@ -1153,14 +1208,21 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.8.4": +"@babel/plugin-transform-typeof-symbol@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-unicode-regex@^7.8.3": +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== @@ -1168,67 +1230,75 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" -"@babel/preset-env@7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.6.tgz#df063b276c6455ec6fcfc6e53aacc38da9b0aea6" - integrity sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ== +"@babel/preset-env@7.11.0": + version "7.11.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.0.tgz#860ee38f2ce17ad60480c2021ba9689393efb796" + integrity sha512-2u1/k7rG/gTh02dylX2kL3S0IJNF+J6bfDSp4DI2Ma8QN6Y9x9pmAax59fsCk6QUQG0yqH47yJWA+u1I1LccAg== dependencies: - "@babel/compat-data" "^7.9.6" - "@babel/helper-compilation-targets" "^7.9.6" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.9.6" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.9.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" + "@babel/compat-data" "^7.11.0" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-export-namespace-from" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-logical-assignment-operators" "^7.11.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.11.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.11.0" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.9.5" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.9.5" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.9.0" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.9.6" - "@babel/plugin-transform-modules-commonjs" "^7.9.6" - "@babel/plugin-transform-modules-systemjs" "^7.9.6" - "@babel/plugin-transform-modules-umd" "^7.9.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.9.5" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" + "@babel/plugin-syntax-top-level-await" "^7.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.11.0" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.9.6" - browserslist "^4.11.1" + "@babel/types" "^7.11.0" + browserslist "^4.12.0" core-js-compat "^3.6.2" invariant "^2.2.2" levenary "^1.1.1" @@ -1245,30 +1315,14 @@ "@babel/types" "^7.4.4" esutils "^2.0.2" -"@babel/runtime@7.9.6": - version "7.9.6" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.6.tgz#a9102eb5cadedf3f31d08a9ecf294af7827ea29f" - integrity sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": +"@babel/runtime@7.11.2", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== dependencies: regenerator-runtime "^0.13.4" -"@babel/template@7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/template@^7.10.4", "@babel/template@^7.3.3", "@babel/template@^7.8.3", "@babel/template@^7.8.6": +"@babel/template@7.10.4", "@babel/template@^7.10.4", "@babel/template@^7.3.3", "@babel/template@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== @@ -1277,7 +1331,7 @@ "@babel/parser" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.5", "@babel/traverse@^7.8.3", "@babel/traverse@^7.9.6": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.10.4", "@babel/traverse@^7.11.0", "@babel/traverse@^7.11.5", "@babel/traverse@^7.8.3": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.11.5.tgz#be777b93b518eb6d76ee2e1ea1d143daa11e61c3" integrity sha512-EjiPXt+r7LiCZXEfRpSJd+jUMnBd4/9OUv7Nx3+0u9+eimMwJmG0Q98lw4/289JCoxSE8OolDMNZaaF/JZ69WQ== @@ -1292,7 +1346,7 @@ globals "^11.1.0" lodash "^4.17.19" -"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.6": +"@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4", "@babel/types@^7.8.3": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" integrity sha512-bvM7Qz6eKnJVFIn+1LPtjlBFPVN5jNDc1XmN15vWe7Q3DPBufWWsLiIvUu7xW87uTG6QoggpIDnUgLQvPheU+Q== @@ -1630,16 +1684,16 @@ "@types/yargs" "^15.0.0" chalk "^4.0.0" -"@jsdevtools/coverage-istanbul-loader@3.0.3": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.3.tgz#102e414b02ae2f0b3c7fd45a705601e1fd4867c5" - integrity sha512-TAdNkeGB5Fe4Og+ZkAr1Kvn9by2sfL44IAHFtxlh1BA1XJ5cLpO9iSNki5opWESv3l3vSHsZ9BNKuqFKbEbFaA== +"@jsdevtools/coverage-istanbul-loader@3.0.5": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@jsdevtools/coverage-istanbul-loader/-/coverage-istanbul-loader-3.0.5.tgz#2a4bc65d0271df8d4435982db4af35d81754ee26" + integrity sha512-EUCPEkaRPvmHjWAAZkWMT7JDzpw7FKB00WTISaiXsbNOd5hCHg77XLA8sLYLFDo1zepYLo2w7GstN8YBqRXZfA== dependencies: convert-source-map "^1.7.0" - istanbul-lib-instrument "^4.0.1" - loader-utils "^1.4.0" + istanbul-lib-instrument "^4.0.3" + loader-utils "^2.0.0" merge-source-map "^1.1.0" - schema-utils "^2.6.4" + schema-utils "^2.7.0" "@lerna/add@3.21.0": version "3.21.0" @@ -2350,14 +2404,13 @@ jquery "3.5.0" replace-in-file "^4.1.3" -"@ngtools/webpack@10.0.8": - version "10.0.8" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-10.0.8.tgz#c818415a150ff6d578b25311b97859220b9d5a10" - integrity sha512-Qv4v7O4VGeWuXjRThd/mdC2I4cJOgQ7kDrVN7vkDB2EW5xtRB+/4hghvFeO3bD11FLuFvCxBMb0HbwyKoVQgEQ== +"@ngtools/webpack@10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-10.1.2.tgz#8d2fb6ddefc4bbbaa9c8942c146161de6fa97a62" + integrity sha512-YBzMSzVHQsDGmdsKnmvAklrwQ5bjedQu40REvYczMNpdBthw2aiOI+YKSvRVfSKxMmnLWVL0aYYrqE5IhaMnRg== dependencies: - "@angular-devkit/core" "10.0.8" - enhanced-resolve "4.1.1" - rxjs "6.5.5" + "@angular-devkit/core" "10.1.2" + enhanced-resolve "4.3.0" webpack-sources "1.4.3" "@ngx-validate/core@^0.0.11": @@ -2545,9 +2598,9 @@ "@types/node" ">= 8" "@rollup/plugin-commonjs@^15.0.0": - version "15.0.0" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-15.0.0.tgz#690d15a9d54ba829db93555bff9b98ff34e08574" - integrity sha512-8uAdikHqVyrT32w1zB9VhW6uGwGjhKgnDNP4pQJsjdnyF4FgCj6/bmv24c7v2CuKhq32CcyCwRzMPEElaKkn0w== + version "15.1.0" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-15.1.0.tgz#1e7d076c4f1b2abf7e65248570e555defc37c238" + integrity sha512-xCQqz4z/o0h2syQ7d9LskIMvBSH4PX5PjYdpSSvgS+pQik3WahkQVNWg3D8XJeYjZoVWnIUQYDghuEMRGrmQYQ== dependencies: "@rollup/pluginutils" "^3.1.0" commondir "^1.0.1" @@ -2585,7 +2638,16 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@schematics/angular@10.0.8", "@schematics/angular@~10.0.5": +"@schematics/angular@10.1.2": + version "10.1.2" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-10.1.2.tgz#7d97c00ce709e703a89248283e4e6cdf056d4b2b" + integrity sha512-7BHgSdP4yC0IuoiPGWBGQrwE5ilBhIOGozjKSHx41Utac45YKyXpmjr1Jw+SvFilgsnPEjZwc7VKqgINmeLkqA== + dependencies: + "@angular-devkit/core" "10.1.2" + "@angular-devkit/schematics" "10.1.2" + jsonc-parser "2.3.0" + +"@schematics/angular@~10.0.5": version "10.0.8" resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-10.0.8.tgz#af730827b2de6cab7561157a8772250eb5f277e1" integrity sha512-KNO61UGtiKMQSG+NbusqLtwLbxId0y+xpXJt9PKFwi+vaViOO+YzOPREfiFCuQ7q6X8SmNlrMj6sZ34E2YN1pQ== @@ -2593,26 +2655,25 @@ "@angular-devkit/core" "10.0.8" "@angular-devkit/schematics" "10.0.8" -"@schematics/schematics@0.1001.1": - version "0.1001.1" - resolved "https://registry.yarnpkg.com/@schematics/schematics/-/schematics-0.1001.1.tgz#7760dffad188fbc69b9615c2e1f42d9f3c1ab6f3" - integrity sha512-dPL2XTad83vDczKk+p1Jd7mEOoU7CTrBL8+JmXHsVL++58hmoVppm2NyBmdDsFSCL8Sw8/J8UWp/0lJRXM6lqw== +"@schematics/schematics@0.1001.2": + version "0.1001.2" + resolved "https://registry.yarnpkg.com/@schematics/schematics/-/schematics-0.1001.2.tgz#43fce997819c6f166b5cccf3a29d284c87c617c2" + integrity sha512-W4KLGPOAmiWV2OhgNSwcnRnPt9iNPtkDV7V+LJVefgpWCje5nGsVf2qRmj1j5fxnDcdjH8L4RabpYFTNGj0exg== dependencies: - "@angular-devkit/core" "10.1.1" - "@angular-devkit/schematics" "10.1.1" + "@angular-devkit/core" "10.1.2" + "@angular-devkit/schematics" "10.1.2" -"@schematics/update@0.1000.8": - version "0.1000.8" - resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1000.8.tgz#3b745ec14e92cfd1f7d16f9a4c3864e1f12249c9" - integrity sha512-xHuj6ME3PNTsVUrpftd98LF3WHPM0NU25GcT/n0E/j0/52yDTiaPS3wUnYSK8ZSv4Et4hcyGx7f/LEXAoOKJXw== +"@schematics/update@0.1001.2": + version "0.1001.2" + resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1001.2.tgz#6a506af18fc2edbbba69a6272abd39c68de097dd" + integrity sha512-Z/P08k4FlbKNmxV5pe34yfKPLI2327CjBg26isO5qpR4nB1FVZkC39YXwFwJod3nU7DE6UMkKcA749k30k2KSg== dependencies: - "@angular-devkit/core" "10.0.8" - "@angular-devkit/schematics" "10.0.8" + "@angular-devkit/core" "10.1.2" + "@angular-devkit/schematics" "10.1.2" "@yarnpkg/lockfile" "1.1.0" ini "1.3.5" npm-package-arg "^8.0.0" pacote "9.5.12" - rxjs "6.5.5" semver "7.3.2" semver-intersect "1.4.0" @@ -2768,9 +2829,9 @@ integrity sha512-Fkgk536sHPqcOtd+Ow+WiUNuk0TSo/BntKkF8wSvcd6M2FvPjeXcUE6Oz/bwDZiUZEaXLslAgw00Q94Pnx6T4w== "@types/jest@26.x": - version "26.0.13" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.13.tgz#5a7b9d5312f5dd521a38329c38ee9d3802a0b85e" - integrity sha512-sCzjKow4z9LILc6DhBvn5AkIfmQzDZkgtVVKmGwVrs5tuid38ws281D4l+7x1kP487+FlKDh5kfMZ8WSPAdmdA== + version "26.0.14" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-26.0.14.tgz#078695f8f65cb55c5a98450d65083b2b73e5a3f3" + integrity sha512-Hz5q8Vu0D288x3iWXePSn53W7hAjP0H7EQ6QvDO9c7t46mR0lNOLlfuwQ+JkVxuhygHzlzPX+0jKdA3ZgSh+Vg== dependencies: jest-diff "^25.2.1" pretty-format "^25.2.1" @@ -2806,19 +2867,19 @@ integrity sha1-aaI6OtKcrwCX8G7aWbNh7i8GOfY= "@types/node@*", "@types/node@>= 8": - version "14.10.1" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.10.1.tgz#cc323bad8e8a533d4822f45ce4e5326f36e42177" - integrity sha512-aYNbO+FZ/3KGeQCEkNhHFRIzBOUgc7QvcVNKXbfnhDkSfwUv91JsQQa10rDgKSTSLkXZ1UIyPe4FJJNVgw1xWQ== + version "14.11.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" + integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== "@types/node@^12.11.1": - version "12.12.58" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.58.tgz#46dae9b2b9ee5992818c8f7cee01ff4ce03ab44c" - integrity sha512-Be46CNIHWAagEfINOjmriSxuv7IVcqbGe+sDSg2SYCEz/0CRBy7LRASGfRbD8KZkqoePU73Wsx3UvOSFcq/9hA== + version "12.12.62" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.62.tgz#733923d73669188d35950253dd18a21570085d2b" + integrity sha512-qAfo81CsD7yQIM9mVyh6B/U47li5g7cfpVQEDMfQeF8pSZVwzbhwU3crc0qG4DmpsebpJPR49AKOExQyJ05Cpg== "@types/node@^8.0.31": - version "8.10.63" - resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.63.tgz#f86775d576bc07a2992da244f41c23d3ba66d402" - integrity sha512-g+nSkeHFDd2WOQChfmy9SAXLywT47WZBrGS/NC5ym5PJ8c8RC6l4pbGaUW/X0+eZJnXw6/AVNEouXWhV4iz72Q== + version "8.10.64" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.64.tgz#0dddc4c53ca4819a32b7478232d8b446ca90e1c6" + integrity sha512-/EwBIb+imu8Qi/A3NF9sJ9iuKo7yV+pryqjmeRqaU0C4wBAOhas5mdvoYeJ5PCKrh6thRSJHdoasFqh3BQGILA== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -3317,10 +3378,10 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -app-root-path@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" - integrity sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA== +app-root-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-3.0.0.tgz#210b6f43873227e18a4b810a032283311555d5ad" + integrity sha512-qMcx+Gy2UZynHjOHOIXPNvpf+9cjvk3cWrBBK7zg4gH9+clobJRb9NGzcT7mQTcV/6Gm/1WelUtqxVXnNlrwcw== aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" @@ -3531,20 +3592,7 @@ atob@^2.1.2: resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@9.8.0: - version "9.8.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.0.tgz#68e2d2bef7ba4c3a65436f662d0a56a741e56511" - integrity sha512-D96ZiIHXbDmU02dBaemyAg53ez+6F5yZmapmgKcjm35yEe1uVDYI8hGW3VYoGRaG290ZFf91YxHrR518vC0u/A== - dependencies: - browserslist "^4.12.0" - caniuse-lite "^1.0.30001061" - chalk "^2.4.2" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.30" - postcss-value-parser "^4.1.0" - -autoprefixer@^9.6.5: +autoprefixer@9.8.6, autoprefixer@^9.6.5: version "9.8.6" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.6.tgz#3b73594ca1bf9266320c5acf1588d74dea74210f" integrity sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg== @@ -3882,14 +3930,14 @@ browserify-zlib@^0.2.0: dependencies: pako "~1.0.5" -browserslist@^4.0.0, browserslist@^4.11.1, browserslist@^4.12.0, browserslist@^4.7.0, browserslist@^4.8.5, browserslist@^4.9.1: - version "4.14.2" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.2.tgz#1b3cec458a1ba87588cc5e9be62f19b6d48813ce" - integrity sha512-HI4lPveGKUR0x2StIz+2FXfDk9SfVMrxn6PLh1JeGUwcuoDkdKZebWiyLRJ68iIPDpMI4JLVDf7S7XzslgWOhw== +browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.7.0, browserslist@^4.8.5, browserslist@^4.9.1: + version "4.14.3" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.3.tgz#381f9e7f13794b2eb17e1761b4f118e8ae665a53" + integrity sha512-GcZPC5+YqyPO4SFnz48/B0YaCwS47Q9iPChRGi6t7HhflKBcINzFrJvRfC+jp30sRMKxF+d4EHGs27Z0XP1NaQ== dependencies: - caniuse-lite "^1.0.30001125" - electron-to-chromium "^1.3.564" - escalade "^3.0.2" + caniuse-lite "^1.0.30001131" + electron-to-chromium "^1.3.570" + escalade "^3.1.0" node-releases "^1.1.61" browserstack@^1.5.1: @@ -3982,22 +4030,22 @@ bytes@3.1.0: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== -cacache@15.0.3: - version "15.0.3" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.3.tgz#2225c2d1dd8e872339950d6a39c051e0e9334392" - integrity sha512-bc3jKYjqv7k4pWh7I/ixIjfcjPul4V4jme/WbjvwGS5LzoPL/GzXr4C5EgPNLO/QEZl9Oi61iGitYEdwcrwLCQ== +cacache@15.0.5, cacache@^15.0.4, cacache@^15.0.5: + version "15.0.5" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" + integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== dependencies: + "@npmcli/move-file" "^1.0.1" chownr "^2.0.0" fs-minipass "^2.0.0" glob "^7.1.4" infer-owner "^1.0.4" - lru-cache "^5.1.1" + lru-cache "^6.0.0" minipass "^3.1.1" minipass-collect "^1.0.2" minipass-flush "^1.0.5" minipass-pipeline "^1.2.2" mkdirp "^1.0.3" - move-file "^2.0.0" p-map "^4.0.0" promise-inflight "^1.0.1" rimraf "^3.0.2" @@ -4026,29 +4074,6 @@ cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^15.0.3, cacache@^15.0.4: - version "15.0.5" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" - integrity sha512-lloiL22n7sOjEEXdL8NAjTgv9a1u43xICE9/203qonkZUCj5X1UEWIdf2/Y0d6QcCtMzbKQyhrcDbdvlZTs/+A== - dependencies: - "@npmcli/move-file" "^1.0.1" - chownr "^2.0.0" - fs-minipass "^2.0.0" - glob "^7.1.4" - infer-owner "^1.0.4" - lru-cache "^6.0.0" - minipass "^3.1.1" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^1.0.3" - p-map "^4.0.0" - promise-inflight "^1.0.1" - rimraf "^3.0.2" - ssri "^8.0.0" - tar "^6.0.2" - unique-filename "^1.1.1" - cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" @@ -4162,6 +4187,11 @@ camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= +camelcase@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" + integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== + caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -4172,10 +4202,10 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001061, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001125: - version "1.0.30001131" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001131.tgz#afad8a28fc2b7a0d3ae9407e71085a0ead905d54" - integrity sha512-4QYi6Mal4MMfQMSqGIRPGbKIbZygeN83QsWq1ixpUwvtfgAZot5BrCKzGygvZaV+CnELdTwD0S4cqUNozq7/Cw== +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001131: + version "1.0.30001135" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001135.tgz#995b1eb94404a3c9a0d7600c113c9bb27f2cd8aa" + integrity sha512-ziNcheTGTHlu9g34EVoHQdIu5g4foc8EsxMGC7Xkokmvw0dqNtX8BS8RgCgFBaAiSp2IdjvBxNdh0ssib28eVQ== canonical-path@1.0.0: version "1.0.0" @@ -4434,20 +4464,25 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= -codelyzer@^5.1.2: - version "5.2.2" - resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-5.2.2.tgz#d0530a455784e6bea0b6d7e97166c73c30a5347f" - integrity sha512-jB4FZ1Sx7kZhvZVdf+N2BaKTdrrNZOL0Bj10RRfrhHrb3zEvXjJvvq298JPMJAiyiCS/v4zs1QlGU0ip7xGqeA== +codelyzer@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-6.0.0.tgz#50c98581cc2890e0e9a9f93878dc317115d836ed" + integrity sha512-edJIQCIcxD9DhVSyBEdJ38AbLikm515Wl91t5RDGNT88uA6uQdTm4phTWfn9JhzAI8kXNUcfYyAE90lJElpGtA== dependencies: - app-root-path "^2.2.1" + "@angular/compiler" "9.0.0" + "@angular/core" "9.0.0" + app-root-path "^3.0.0" aria-query "^3.0.0" axobject-query "2.0.2" css-selector-tokenizer "^0.7.1" cssauron "^1.4.0" damerau-levenshtein "^1.0.4" + rxjs "^6.5.3" semver-dsl "^1.0.1" source-map "^0.5.7" sprintf-js "^1.1.2" + tslib "^1.10.0" + zone.js "~0.10.3" collect-v8-coverage@^1.0.0: version "1.0.1" @@ -5049,24 +5084,23 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" -css-loader@3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.3.tgz#95ac16468e1adcd95c844729e0bb167639eb0bcf" - integrity sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw== +css-loader@4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-4.2.2.tgz#b668b3488d566dc22ebcf9425c5f254a05808c89" + integrity sha512-omVGsTkZPVwVRpckeUnLshPp12KsmMSLqYxs12+RzM9jRR5Y+Idn/tBffjXRvOE+qW7if24cuceFJqYR5FmGBg== dependencies: - camelcase "^5.3.1" + camelcase "^6.0.0" cssesc "^3.0.0" icss-utils "^4.1.1" - loader-utils "^1.2.3" - normalize-path "^3.0.0" - postcss "^7.0.27" + loader-utils "^2.0.0" + postcss "^7.0.32" postcss-modules-extract-imports "^2.0.0" - postcss-modules-local-by-default "^3.0.2" + postcss-modules-local-by-default "^3.0.3" postcss-modules-scope "^2.2.0" postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.3" - schema-utils "^2.6.6" - semver "^6.3.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^7.3.2" css-parse@~2.0.0: version "2.0.0" @@ -5353,20 +5387,27 @@ debug@3.1.0, debug@~3.1.0: dependencies: ms "2.0.0" -debug@4.1.1, debug@^4.1.0, debug@^4.1.1: +debug@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" -debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: +debug@^3.1.0, debug@^3.1.1, debug@^3.2.5: version "3.2.6" resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" +debug@^4.1.0, debug@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + dependencies: + ms "2.1.2" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -5713,10 +5754,10 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -electron-to-chromium@^1.3.564: - version "1.3.568" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.568.tgz#0fa28cd3e5cbd9e8c66f72309eef0646f65a5b66" - integrity sha512-j9MlEwgTHVW/lq93Hw8yhzA886oLjDm3Hz7eDkWP2v4fzLVuqOWhpNluziSnmR/tBqgoYldagbLknrdg+B7Tlw== +electron-to-chromium@^1.3.570: + version "1.3.570" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.570.tgz#3f5141cc39b4e3892a276b4889980dabf1d29c7f" + integrity sha512-Y6OCoVQgFQBP5py6A/06+yWxUZHDlNr/gNDGatjH8AZqXl8X0tE4LfjLJsXGz/JmWJz8a6K7bR1k+QzZ+k//fg== elliptic@^6.5.3: version "6.5.3" @@ -5770,16 +5811,7 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" - integrity sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.5.0" - tapable "^1.0.0" - -enhanced-resolve@^4.1.0: +enhanced-resolve@4.3.0, enhanced-resolve@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ== @@ -5904,7 +5936,7 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" -escalade@^3.0.2: +escalade@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== @@ -6831,9 +6863,9 @@ globby@^9.2.0: slash "^2.0.0" got@^11.5.2: - version "11.6.2" - resolved "https://registry.yarnpkg.com/got/-/got-11.6.2.tgz#79d7bb8c11df212b97f25565407a1f4ae73210ec" - integrity sha512-/21qgUePCeus29Jk7MEti8cgQUNXFSWfIevNIk4H7u1wmXNDrGPKPY6YsPY+o9CIT/a2DjCjRz0x1nM9FtS2/A== + version "11.7.0" + resolved "https://registry.yarnpkg.com/got/-/got-11.7.0.tgz#a386360305571a74548872e674932b4ef70d3b24" + integrity sha512-7en2XwH2MEqOsrK0xaKhbWibBoZqy+f1RSUoIeF1BLcnf+pyQdDsljWMfmOh+QKJwuvDIiKx38GtPh5wFdGGjg== dependencies: "@sindresorhus/is" "^3.1.1" "@szmarczak/http-timer" "^4.0.5" @@ -7177,13 +7209,6 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.5.1: - version "0.5.2" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.5.2.tgz#af6d628dccfb463b7364d97f715e4b74b8c8c2b8" - integrity sha512-kERHXvpSaB4aU3eANwidg79K8FlrN77m8G9V+0vOR3HYaRifrlwMEpT7ZBJqLSEIHnEgJTHcWK82wwLwwKwtag== - dependencies: - safer-buffer ">= 2.1.2 < 3" - iconv-lite@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" @@ -7393,25 +7418,6 @@ inquirer@6.5.2, inquirer@^6.2.0, inquirer@^6.4.1: strip-ansi "^5.1.0" through "^2.3.6" -inquirer@7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" - integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== - dependencies: - ansi-escapes "^4.2.1" - chalk "^3.0.0" - cli-cursor "^3.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^3.0.0" - lodash "^4.17.15" - mute-stream "0.0.8" - run-async "^2.4.0" - rxjs "^6.5.3" - string-width "^4.1.0" - strip-ansi "^6.0.0" - through "^2.3.6" - inquirer@7.3.3: version "7.3.3" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" @@ -7525,9 +7531,9 @@ is-buffer@^1.1.5: integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-callable@^1.1.4, is-callable@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.1.tgz#4d1e21a4f437509d25ce55f8184350771421c96d" - integrity sha512-wliAfSzx6V+6WfMOmus1xy0XvSgf/dlStkvTfq7F0g4bOIW0PSUbnyse3NhDwdyYS1ozfUtAAySqTws3z9Eqgg== + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.2.tgz#c7c6715cd22d4ddb48d3e19970223aceabb080d9" + integrity sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA== is-ci@^2.0.0: version "2.0.0" @@ -7861,7 +7867,7 @@ istanbul-lib-coverage@^3.0.0: resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.1: +istanbul-lib-instrument@^4.0.0, istanbul-lib-instrument@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz#873c6fff897450118222774696a3f28902d77c1d" integrity sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ== @@ -8257,18 +8263,6 @@ jest-snapshot@^25.5.1: pretty-format "^25.5.0" semver "^6.3.0" -jest-util@26.x: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.3.0.tgz#a8974b191df30e2bf523ebbfdbaeb8efca535b3e" - integrity sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw== - dependencies: - "@jest/types" "^26.3.0" - "@types/node" "*" - chalk "^4.0.0" - graceful-fs "^4.2.4" - is-ci "^2.0.0" - micromatch "^4.0.2" - jest-util@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.5.0.tgz#31c63b5d6e901274d264a4fec849230aa3fa35b0" @@ -8280,6 +8274,18 @@ jest-util@^25.5.0: is-ci "^2.0.0" make-dir "^3.0.0" +jest-util@^26.1.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-26.3.0.tgz#a8974b191df30e2bf523ebbfdbaeb8efca535b3e" + integrity sha512-4zpn6bwV0+AMFN0IYhH/wnzIQzRaYVrz1A8sYnRnj4UXDXbOVtWmlaZkO9mipFqZ13okIfN87aDoJWB7VH6hcw== + dependencies: + "@jest/types" "^26.3.0" + "@types/node" "*" + chalk "^4.0.0" + graceful-fs "^4.2.4" + is-ci "^2.0.0" + micromatch "^4.0.2" + jest-validate@^25.5.0: version "25.5.0" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.5.0.tgz#fb4c93f332c2e4cf70151a628e58a35e459a413a" @@ -8304,11 +8310,12 @@ jest-watcher@^25.5.0: jest-util "^25.5.0" string-length "^3.1.0" -jest-worker@26.0.0: - version "26.0.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.0.0.tgz#4920c7714f0a96c6412464718d0c58a3df3fb066" - integrity sha512-pPaYa2+JnwmiZjK9x7p9BoZht+47ecFCDFA/CJxspHzeDvQcfVBLWzCiWyo+EGrSiQMWZtCFo9iSvMZnAAo8vw== +jest-worker@26.3.0, jest-worker@^26.3.0: + version "26.3.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" + integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== dependencies: + "@types/node" "*" merge-stream "^2.0.0" supports-color "^7.0.0" @@ -8320,15 +8327,6 @@ jest-worker@^25.5.0: merge-stream "^2.0.0" supports-color "^7.0.0" -jest-worker@^26.0.0: - version "26.3.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" - integrity sha512-Vmpn2F6IASefL+DVBhPzI2J9/GJUsqzomdeN+P+dK8/jKxbh8R3BtFnx3FIta7wYlPU62cpJMJQo4kuOowcMnw== - dependencies: - "@types/node" "*" - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest@^25.0.0: version "25.5.4" resolved "https://registry.yarnpkg.com/jest/-/jest-25.5.4.tgz#f21107b6489cfe32b076ce2adcadee3587acb9db" @@ -8452,11 +8450,16 @@ json5@^1.0.1: dependencies: minimist "^1.2.0" -jsonc-parser@^2.3.0: +jsonc-parser@2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.0.tgz#7c7fc988ee1486d35734faaaa866fadb00fa91ee" integrity sha512-b0EBt8SWFNnixVdvoR2ZtEGa9ZqLhbJnOjezn+WP+8kspFm+PFYDN8Z4Bc7pRlDjvuVcADSUkroIuTWWn/YiIA== +jsonc-parser@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-2.3.1.tgz#59549150b133f2efacca48fe9ce1ec0659af2342" + integrity sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -8516,9 +8519,9 @@ karma-source-map-support@1.4.0: source-map-support "^0.5.5" keyv@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.1.tgz#9fe703cb4a94d6d11729d320af033307efd02ee6" - integrity sha512-xz6Jv6oNkbhrFCvCP7HQa8AaII8y8LRpoSm661NOKLr4uHuBwhX4epXrPQgF3+xdJnN4Esm5X0xwY4bOlALOtw== + version "4.0.3" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.0.3.tgz#4f3aa98de254803cafcd2896734108daa35e4254" + integrity sha512-zdGa2TOpSZPq5mU6iowDARnMBZgtCqJ11dJROFi6tg6kTn4nuUdU09lFyLFSaHrWqpIJ+EBq4E8/Dc0Vx5vLdA== dependencies: json-buffer "3.0.1" @@ -8556,6 +8559,11 @@ kleur@^3.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== +klona@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/klona/-/klona-2.0.4.tgz#7bb1e3affb0cb8624547ef7e8f6708ea2e39dfc0" + integrity sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA== + lerna@^3.19.0: version "3.22.1" resolved "https://registry.yarnpkg.com/lerna/-/lerna-3.22.1.tgz#82027ac3da9c627fd8bf02ccfeff806a98e65b62" @@ -8580,17 +8588,17 @@ lerna@^3.19.0: import-local "^2.0.0" npmlog "^4.1.2" -less-loader@6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-6.1.0.tgz#59fd591df408ced89a40fce11a2aea449b005631" - integrity sha512-/jLzOwLyqJ7Kt3xg5sHHkXtOyShWwFj410K9Si9WO+/h8rmYxxkSR0A3/hFEntWudE20zZnWMtpMYnLzqTVdUA== +less-loader@6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/less-loader/-/less-loader-6.2.0.tgz#8b26f621c155b342eefc24f5bd6e9dc40c42a719" + integrity sha512-Cl5h95/Pz/PWub/tCBgT1oNMFeH1WTD33piG80jn5jr12T4XbxZcjThwNXDQ7AG649WEynuIzO4b0+2Tn9Qolg== dependencies: clone "^2.1.2" - less "^3.11.1" + less "^3.11.3" loader-utils "^2.0.0" - schema-utils "^2.6.6" + schema-utils "^2.7.0" -less@^3.10.3, less@^3.11.1: +less@^3.10.3, less@^3.11.3: version "3.12.2" resolved "https://registry.yarnpkg.com/less/-/less-3.12.2.tgz#157e6dd32a68869df8859314ad38e70211af3ab4" integrity sha512-+1V2PCMFkL+OIj2/HrtrvZw0BC0sYLMICJfbQjuj/K8CEnlrFX6R5cKKgzzttsZDHyxQNL1jqMREjKN3ja/E3Q== @@ -8625,10 +8633,10 @@ levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -license-webpack-plugin@2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-2.2.0.tgz#5c964380d7d0e0c27c349d86a6f856c82924590e" - integrity sha512-XPsdL/0brSHf+7dXIlRqotnCQ58RX2au6otkOg4U3dm8uH+Ka/fW4iukEs95uXm+qKe/SBs+s1Ll/aQddKG+tg== +license-webpack-plugin@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/license-webpack-plugin/-/license-webpack-plugin-2.3.0.tgz#c00f70d5725ba0408de208acb9e66612cc2eceda" + integrity sha512-JK/DXrtN6UeYQSgkg5q1+pgJ8aiKPL9tnz9Wzw+Ikkf+8mJxG56x6t8O+OH/tAeF/5NREnelTEMyFtbJNkjH4w== dependencies: "@types/webpack-sources" "^0.1.5" webpack-sources "^1.2.0" @@ -9168,10 +9176,10 @@ min-indent@^1.0.0: resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== -mini-css-extract-plugin@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" - integrity sha512-lp3GeY7ygcgAmVIcRPBVhIkf8Us7FZjA+ILpal44qLdSu11wmjKQ3d9k15lfD7pO4esu9eUIAW7qiYIBppv40A== +mini-css-extract-plugin@0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.10.0.tgz#a0e6bfcad22a9c73f6c882a3c7557a98e2d3d27d" + integrity sha512-QgKgJBjaJhxVPwrLNqqwNS0AGkuQQ31Hp4xGXEK/P7wehEg6qmNtReHKai3zRXqY60wGVWLYcOMJK2b98aGc3A== dependencies: loader-utils "^1.1.0" normalize-url "1.9.1" @@ -9304,7 +9312,7 @@ mkdirp@*, mkdirp@1.x, mkdirp@^1.0.3, mkdirp@^1.0.4, mkdirp@~1.0.4: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1, mkdirp@~0.5.x: +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@^0.5.5, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -9317,9 +9325,9 @@ modify-values@^1.0.0: integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== moment@^2.10.2: - version "2.28.0" - resolved "https://registry.yarnpkg.com/moment/-/moment-2.28.0.tgz#cdfe73ce01327cee6537b0fafac2e0f21a237d75" - integrity sha512-Z5KOjYmnHyd/ukynmFd/WwyXHd7L4J9vTI/nn5Ap9AVUgaAE15VvQ9MOGmJJygEUklupqIrFnor/tjTwRU+tQw== + version "2.29.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.0.tgz#fcbef955844d91deb55438613ddcec56e86a3425" + integrity sha512-z6IJ5HXYiuxvFTI6eiQ9dm77uE0gyy1yXNApVHqTcnIKfY9tIwEjlzsZ6u1LQXvVgKeTnv9Xm7NDvJ7lso3MtA== move-concurrently@^1.0.1: version "1.0.1" @@ -9333,13 +9341,6 @@ move-concurrently@^1.0.1: rimraf "^2.5.4" run-queue "^1.0.3" -move-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/move-file/-/move-file-2.0.0.tgz#83ffa309b5d7f69d518b28e1333e2ffadf331e3e" - integrity sha512-cdkdhNCgbP5dvS4tlGxZbD+nloio9GIimP57EjqFhwLcMjnU+XJKAZzlmg/TN/AK1LuNAdTSvm3CPPP4Xkv0iQ== - dependencies: - path-exists "^4.0.0" - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -9350,7 +9351,7 @@ ms@2.1.1: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== -ms@^2.0.0, ms@^2.1.1: +ms@2.1.2, ms@^2.0.0, ms@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== @@ -9434,7 +9435,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: +neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1, neo-async@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -9524,10 +9525,10 @@ node-fetch@^2.5.0, node-fetch@^2.6.1: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-forge@0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" - integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== +node-forge@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.10.0.tgz#32dea2afb3e9926f02ee5ce8794902691a676bf3" + integrity sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA== node-gyp@^5.0.2: version "5.1.1" @@ -9928,10 +9929,10 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -open@7.0.4: - version "7.0.4" - resolved "https://registry.yarnpkg.com/open/-/open-7.0.4.tgz#c28a9d315e5c98340bf979fdcb2e58664aa10d83" - integrity sha512-brSA+/yq+b08Hsr4c8fsEW2CRzk1BmfN3SAK/5VCHQ9bdoZJ4qa/+AfR0xHjlbbZUyPkUHs1b8x1RqdyZdkVqQ== +open@7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/open/-/open-7.2.0.tgz#212959bd7b0ce2e8e3676adc76e3cf2f0a2498b4" + integrity sha512-4HeyhxCvBTI5uBePsAdi55C5fmqnWZ2e2MlmvWi5KW5tdH5rxoiv/aMtbeVxKZc3eWkT1GymMnLG8XC4Rq4TDQ== dependencies: is-docker "^2.0.0" is-wsl "^2.1.1" @@ -10060,14 +10061,14 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== dependencies: p-try "^2.0.0" -p-limit@^3.0.1: +p-limit@^3.0.1, p-limit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.0.2.tgz#1664e010af3cadc681baafd3e2a437be7b0fb5fe" integrity sha512-iwqZSOoWIW+Ew4kAGUlN16J4M7OB3ysMLSZtnhmqx7njIHFPlxWBX8xo3lVTyFVq6mI/lL9qt2IsN1sHwaxJkg== @@ -10283,16 +10284,23 @@ parse-url@^5.0.0: parse-path "^4.0.0" protocols "^1.4.0" -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== +parse5-htmlparser2-tree-adapter@6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== + dependencies: + parse5 "^6.0.1" parse5@5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== +parse5@6.0.1, parse5@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== + parse5@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178" @@ -10548,9 +10556,9 @@ postcss-import@12.0.1: resolve "^1.1.7" postcss-load-config@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" - integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.1.tgz#0a684bb8beb05e55baf922f7ab44c3edb17cf78e" + integrity sha512-D2ENobdoZsW0+BHy4x1CAkXtbXtYWYRIxL/JbtRBqrRGOPtJ2zoga/bEZWhV/ShWB5saVxJMzbMdSyA/vv4tXw== dependencies: cosmiconfig "^5.0.0" import-cwd "^2.0.0" @@ -10634,7 +10642,7 @@ postcss-modules-extract-imports@^2.0.0: dependencies: postcss "^7.0.5" -postcss-modules-local-by-default@^3.0.2: +postcss-modules-local-by-default@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.3.tgz#bb14e0cc78279d504dbdcbfd7e0ca28993ffbbb0" integrity sha512-e3xDq+LotiGesympRlKNgaJ0PCzoUIdpH0dj47iWAui/kyTgh3CiAr1qP54uodmJhl6p9rN6BoNcdEDVJx9RDw== @@ -10780,13 +10788,14 @@ postcss-selector-parser@^3.0.0: uniq "^1.0.1" postcss-selector-parser@^6.0.0, postcss-selector-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" - integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== + version "6.0.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.3.tgz#766d77728728817cc140fa1ac6da5e77f9fada98" + integrity sha512-0ClFaY4X1ra21LRqbW6y3rUbWcxnSVkDFG57R7Nxus9J9myPFlv+jYDMohzpkBx0RrjjiqjtycpchQ+PLGmZ9w== dependencies: cssesc "^3.0.0" indexes-of "^1.0.1" uniq "^1.0.1" + util-deprecate "^1.0.2" postcss-svgo@^4.0.2: version "4.0.2" @@ -10823,7 +10832,7 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== @@ -10837,19 +10846,19 @@ postcss@7.0.21: source-map "^0.6.1" supports-color "^6.1.0" -postcss@7.0.31: - version "7.0.31" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.31.tgz#332af45cb73e26c0ee2614d7c7fb02dfcc2bd6dd" - integrity sha512-a937VDHE1ftkjk+8/7nj/mrjtmkn69xxzJgRETXdAUU+IgOYPQNJF17haGWbeDxSyk++HA14UA98FurvPyBJOA== +postcss@7.0.32: + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== dependencies: chalk "^2.4.2" source-map "^0.6.1" supports-color "^6.1.0" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.29, postcss@^7.0.30, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: - version "7.0.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" - integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.27, postcss@^7.0.29, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: + version "7.0.34" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.34.tgz#f2baf57c36010df7de4009940f21532c16d65c20" + integrity sha512-H/7V2VeNScX9KE83GDrDZNiGT1m2H+UTnlinIzhjlLX9hfMUn1mHNnGeX81a1c8JSBdBvqk7c2ZOG6ZPn5itGw== dependencies: chalk "^2.4.2" source-map "^0.6.1" @@ -11349,12 +11358,7 @@ regenerate@^1.4.0: resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.1.tgz#cad92ad8e6b591773485fbe05a485caf4f457e6f" integrity sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A== -regenerator-runtime@0.13.5: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== - -regenerator-runtime@^0.13.4: +regenerator-runtime@0.13.7, regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -11388,9 +11392,9 @@ regexp.prototype.flags@^1.2.0: es-abstract "^1.17.0-next.1" regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== + version "4.7.1" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" + integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== dependencies: regenerate "^1.4.0" regenerate-unicode-properties "^8.2.0" @@ -11458,7 +11462,7 @@ request-promise-native@^1.0.7: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.87.0, request@^2.88.0: +request@^2.87.0, request@^2.88.0, request@^2.88.2: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -11687,17 +11691,17 @@ rollup-plugin-sourcemaps@^0.6.0: "@rollup/pluginutils" "^3.0.9" source-map-resolve "^0.6.0" -rollup@2.10.9: - version "2.10.9" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.10.9.tgz#17dcc6753c619efcc1be2cf61d73a87827eebdf9" - integrity sha512-dY/EbjiWC17ZCUSyk14hkxATAMAShkMsD43XmZGWjLrgFj15M3Dw2kEkA9ns64BiLFm9PKN6vTQw8neHwK74eg== +rollup@2.26.5: + version "2.26.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.26.5.tgz#5562ec36fcba3eed65cfd630bd78e037ad0e0307" + integrity sha512-rCyFG3ZtQdnn9YwfuAVH0l/Om34BdO5lwCA0W6Hq+bNB21dVEBbCRxhaHOmu1G7OBFDWytbzAC104u7rxHwGjA== optionalDependencies: fsevents "~2.1.2" rollup@^2.8.0: - version "2.26.11" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.26.11.tgz#4fc31de9c7b83d50916fc8395f8c3d24730cdaae" - integrity sha512-xyfxxhsE6hW57xhfL1I+ixH8l2bdoIMaAecdQiWF3N7IgJEMu99JG+daBiSZQjnBpzFxa0/xZm+3pbCdAQehHw== + version "2.28.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.28.1.tgz#ceedca3cdb013c2fa8f22f958a29c203368159ea" + integrity sha512-DOtVoqOZt3+FjPJWLU8hDIvBjUylc9s6IZvy76XklxzcLvAQLtVAG/bbhsMhcWnYxC0TKKcf1QQ/tg29zeID0Q== optionalDependencies: fsevents "~2.1.2" @@ -11788,28 +11792,28 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sass-loader@8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" - integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== +sass-loader@10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.0.1.tgz#10c0364d8034f22fee25ddcc9eded20f99bbe3b4" + integrity sha512-b2PSldKVTS3JcFPHSrEXh3BeAfR7XknGiGCAO5aHruR3Pf3kqLP3Gb2ypXLglRrAzgZkloNxLZ7GXEGDX0hBUQ== dependencies: - clone-deep "^4.0.1" - loader-utils "^1.2.3" - neo-async "^2.6.1" - schema-utils "^2.6.1" - semver "^6.3.0" + klona "^2.0.3" + loader-utils "^2.0.0" + neo-async "^2.6.2" + schema-utils "^2.7.0" + semver "^7.3.2" -sass@1.26.5: - version "1.26.5" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.5.tgz#2d7aecfbbabfa298567c8f06615b6e24d2d68099" - integrity sha512-FG2swzaZUiX53YzZSjSakzvGtlds0lcbF+URuU9mxOv7WBh7NhXEVDa4kPKN4hN6fC2TkOTOKqiqp6d53N9X5Q== +sass@1.26.10: + version "1.26.10" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.10.tgz#851d126021cdc93decbf201d1eca2a20ee434760" + integrity sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw== dependencies: chokidar ">=2.0.0 <4.0.0" sass@^1.23.0: - version "1.26.10" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.10.tgz#851d126021cdc93decbf201d1eca2a20ee434760" - integrity sha512-bzN0uvmzfsTvjz0qwccN1sPm2HxxpNI/Xa+7PlUEMS+nQvbyuEK7Y0qFqxlPHhiNHb1Ze8WQJtU31olMObkAMw== + version "1.26.11" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.11.tgz#0f22cc4ab2ba27dad1d4ca30837beb350b709847" + integrity sha512-W1l/+vjGjIamsJ6OnTe0K37U2DBO/dgsv2Z4c89XQ8ZOO6l/VwkqwLSqoYzJeJs6CLuGSTRWc91GbQFL3lvrvw== dependencies: chokidar ">=2.0.0 <4.0.0" @@ -11841,7 +11845,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.6.1, schema-utils@^2.6.4, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: +schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -11866,11 +11870,11 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: xml2js "^0.4.17" selfsigned@^1.10.7: - version "1.10.7" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.7.tgz#da5819fd049d5574f28e88a9bcc6dbc6e6f3906b" - integrity sha512-8M3wBCzeWIJnQfl43IKwOmC4H/RAp50S8DF60znzjW5GVqTcSe2vWclt7hmYVPkKPlHWOu5EaWOMZ2Y6W8ZXTA== + version "1.10.8" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.8.tgz#0d17208b7d12c33f8eac85c41835f27fc3d81a30" + integrity sha512-2P4PtieJeEwVgTU9QEcwIRDQ/mXJLX8/+I3ur+Pg16nS8oNbrGxEso9NyYWy8NAmXiNl4dlAp5MwoNeCWzON4w== dependencies: - node-forge "0.9.0" + node-forge "^0.10.0" semver-dsl@^1.0.1: version "1.0.1" @@ -11896,7 +11900,7 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@7.3.2, semver@7.x, semver@^7.0.0, semver@^7.1.1: +semver@7.3.2, semver@7.x, semver@^7.0.0, semver@^7.1.1, semver@^7.3.2: version "7.3.2" resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== @@ -11925,13 +11929,6 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" -serialize-javascript@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-3.1.0.tgz#8bf3a9170712664ef2561b44b691eafe399214ea" - integrity sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg== - dependencies: - randombytes "^2.1.0" - serialize-javascript@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" @@ -12178,16 +12175,16 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== -source-map-loader@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.0.0.tgz#240b88575a9b0d27214aeecbd4e7686af95cfa56" - integrity sha512-ZayyQCSCrQazN50aCvuS84lJT4xc1ZAcykH5blHaBdVveSwjiFK8UGMPvao0ho54DTb0Jf7m57uRRG/YYUZ2Fg== +source-map-loader@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-1.0.2.tgz#b0a6582b2eaa387ede1ecf8061ae0b93c23f9eb0" + integrity sha512-oX8d6ndRjN+tVyjj6PlXSyFPhDdVAPsZA30nD3/II8g4uOv8fCz0DMn5sy8KtVbDfKQxOpGwGJnK3xIW3tauDw== dependencies: data-urls "^2.0.0" - iconv-lite "^0.5.1" + iconv-lite "^0.6.2" loader-utils "^2.0.0" - schema-utils "^2.6.6" - source-map "^0.6.0" + schema-utils "^2.7.0" + source-map "^0.6.1" source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" @@ -12270,9 +12267,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + version "3.0.6" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.6.tgz#c80757383c28abf7296744998cbc106ae8b854ce" + integrity sha512-+orQK83kyMva3WyPf59k1+Y525csj5JejicWut55zeTWANuN17qSiSLUXWtzHeNWORSvT7GLDJ/E/XiIWoXBTw== spdy-transport@^3.0.0: version "3.0.0" @@ -12616,21 +12613,7 @@ stylus-loader@3.0.2: lodash.clonedeep "^4.5.0" when "~3.6.x" -stylus@0.54.7: - version "0.54.7" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2" - integrity sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug== - dependencies: - css-parse "~2.0.0" - debug "~3.1.0" - glob "^7.1.3" - mkdirp "~0.5.x" - safer-buffer "^2.1.2" - sax "~1.2.4" - semver "^6.0.0" - source-map "^0.7.3" - -stylus@^0.54.7: +stylus@0.54.8, stylus@^0.54.7: version "0.54.8" resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.8.tgz#3da3e65966bc567a7b044bfe0eece653e099d147" integrity sha512-vr54Or4BZ7pJafo2mpf0ZcwA74rpuYCZbxrHBsH8kbcXOwSfvBFwsRfpGO5OD5fhG5HDCFW737PKaawI7OqEAg== @@ -12794,19 +12777,19 @@ terminal-link@^2.0.0: ansi-escapes "^4.2.1" supports-hyperlinks "^2.0.0" -terser-webpack-plugin@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-3.0.1.tgz#31928c9330a582fb5ec6f90805337289b85cb8fe" - integrity sha512-eFDtq8qPUEa9hXcUzTwKXTnugIVtlqc1Z/ZVhG8LmRT3lgRY13+pQTnFLY2N7ATB6TKCHuW/IGjoAnZz9wOIqw== +terser-webpack-plugin@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-4.1.0.tgz#6e9d6ae4e1a900d88ddce8da6a47507ea61f44bc" + integrity sha512-0ZWDPIP8BtEDZdChbufcXUigOYk6dOX/P/X0hWxqDDcVAQLb8Yy/0FAaemSfax3PAA67+DJR778oz8qVbmy4hA== dependencies: - cacache "^15.0.3" + cacache "^15.0.5" find-cache-dir "^3.3.1" - jest-worker "^26.0.0" - p-limit "^2.3.0" + jest-worker "^26.3.0" + p-limit "^3.0.2" schema-utils "^2.6.6" - serialize-javascript "^3.0.0" + serialize-javascript "^4.0.0" source-map "^0.6.1" - terser "^4.6.13" + terser "^5.0.0" webpack-sources "^1.4.3" terser-webpack-plugin@^1.4.3: @@ -12824,16 +12807,16 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser@4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.7.0.tgz#15852cf1a08e3256a80428e865a2fa893ffba006" - integrity sha512-Lfb0RiZcjRDXCC3OSHJpEkxJ9Qeqs6mp2v4jf2MHfy8vGERmVDuvjXdd/EnP5Deme5F2yBRBymKmKHCBg2echw== +terser@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.0.tgz#c481f4afecdcc182d5e2bdd2ff2dc61555161e81" + integrity sha512-XTT3D3AwxC54KywJijmY2mxZ8nJiEjBHVYzq8l9OaYuRFWeQNBwvipuzzYEP4e+/AVcd1hqG/CqgsdIRyT45Fg== dependencies: commander "^2.20.0" source-map "~0.6.1" source-map-support "~0.5.12" -terser@^4.1.2, terser@^4.6.13: +terser@^4.1.2: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -12843,9 +12826,9 @@ terser@^4.1.2, terser@^4.6.13: source-map-support "~0.5.12" terser@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.1.tgz#f50fe20ab48b15234fe9bdd86b10148ad5fca787" - integrity sha512-yD80f4hdwCWTH5mojzxe1q8bN1oJbsK/vfJGLcPZM/fl+/jItIVNKhFIHqqR71OipFWMLgj3Kc+GIp6CeIqfnA== + version "5.3.2" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.3.2.tgz#f4bea90eb92945b2a028ceef79181b9bb586e7af" + integrity sha512-H67sydwBz5jCUA32ZRL319ULu+Su1cAoZnnc+lXnenGRYWyLE3Scgkt8mNoAsMx0h5kdo758zdoS0LG9rYZXDQ== dependencies: commander "^2.20.0" source-map "~0.6.1" @@ -13050,21 +13033,21 @@ trim-off-newlines@^1.0.0: integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= ts-jest@26.x: - version "26.3.0" - resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.3.0.tgz#6b2845045347dce394f069bb59358253bc1338a9" - integrity sha512-Jq2uKfx6bPd9+JDpZNMBJMdMQUC3sJ08acISj8NXlVgR2d5OqslEHOR2KHMgwymu8h50+lKIm0m0xj/ioYdW2Q== + version "26.4.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.4.0.tgz#903c7827f3d3bc33efc2f91be294b164400c32e3" + integrity sha512-ofBzoCqf6Nv/PoWb/ByV3VNKy2KJSikamOBxvR3E6eVdIw10GwAXoyvMWXXjZJK2s6S27ZE8fI+JBTnGaovl6Q== dependencies: "@types/jest" "26.x" bs-logger "0.x" buffer-from "1.x" fast-json-stable-stringify "2.x" - jest-util "26.x" + jest-util "^26.1.0" json5 "2.x" lodash.memoize "4.x" make-error "1.x" mkdirp "1.x" semver "7.x" - yargs-parser "18.x" + yargs-parser "20.x" ts-node@~7.0.0: version "7.0.1" @@ -13090,26 +13073,21 @@ ts-toolbelt@6.15.4: resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-6.15.4.tgz#f7fad584e197d0f495f77b5e3ee75a8f4c4dd3da" integrity sha512-Ifp2yNo4I8q5UwNARUBMnBiFpv5DEtTbCtS8RCjjLOz+PNcThbjUsPJCK3hRnz0dTygM1Fi3Mgvnt/DoKUTU2g== -tsickle@^0.38.1: - version "0.38.1" - resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.38.1.tgz#30762db759d40c435943093b6972c7f2efb384ef" - integrity sha512-4xZfvC6+etRu6ivKCNqMOd1FqcY/m6JY3Y+yr5+Xw+i751ciwrWINi6x/3l1ekcODH9GZhlf0ny2LpzWxnjWYA== +tsickle@^0.39.1: + version "0.39.1" + resolved "https://registry.yarnpkg.com/tsickle/-/tsickle-0.39.1.tgz#7ccf672cde5b430f5dd0b281ee49e170ef390ff9" + integrity sha512-CCc9cZhZbKoNizVM+K3Uqgit/go8GacjpqTv1cpwG/n2P0gB9GMoWZbxrUULDE9Wz26Lh86CGf6QyIPUVV1lnQ== -tslib@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.0.tgz#18d13fc2dce04051e20f074cc8387fd8089ce4f3" - integrity sha512-lTqkx847PI7xEDYJntxZH89L2/aXInsyF2luSafe/+0fHOMjlBNXdH6th7f70qxLDhul7KZK0zC8V5ZIyHl0/g== +tslib@2.0.1, tslib@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" + integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== tslib@^1.10.0, tslib@^1.13.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: version "1.13.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== -tslib@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" - integrity sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ== - tslint@~6.1.0: version "6.1.3" resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.3.tgz#5c23b2eccc32487d5523bd3a470e9aa31789d904" @@ -13220,11 +13198,21 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -typescript@^3.5.2, typescript@~3.9.2, typescript@~3.9.5: +typescript@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.2.tgz#7ea7c88777c723c681e33bf7988be5d008d05ac2" + integrity sha512-e4ERvRV2wb+rRZ/IQeb3jm2VxBsirQLpQhdxplZ2MEzGvDkkMmPglecnNDfSUBivMjP93vRbngYYDQqQ/78bcQ== + +typescript@^3.5.2, typescript@~3.9.2: version "3.9.7" resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.7.tgz#98d600a5ebdc38f40cb277522f12dc800e9e25fa" integrity sha512-BLbiRkiBzAwsjut4x/dsibSTB6yWpwT5qWmC2OfuCg3GgVQCSgMs4vEctYPhsaGtd0AeuuHMkjZ2h2WG8MSzRw== +typescript@~4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.0.3.tgz#153bbd468ef07725c1df9c77e8b453f8d36abba5" + integrity sha512-tEu6DGxGgRJPb/mVPIZ48e69xCn2yRmCgYmDugAVwmJ6o+0u1RI18eO7E7WBTLYLaEVVOhwQmcdhQHweux/WPg== + uglify-js@^3.1.4: version "3.10.4" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.10.4.tgz#dd680f5687bc0d7a93b14a3482d16db6eba2bfbb" @@ -13297,13 +13285,13 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" -universal-analytics@0.4.20: - version "0.4.20" - resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.20.tgz#d6b64e5312bf74f7c368e3024a922135dbf24b03" - integrity sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw== +universal-analytics@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.23.tgz#d915e676850c25c4156762471bdd7cf2eaaca8ac" + integrity sha512-lgMIH7XBI6OgYn1woDEmxhGdj8yDefMKg7GkWdeATAlQZFrMrNyxSkpDzY57iY0/6fdlzTbBV03OawvvzG+q7A== dependencies: - debug "^3.0.0" - request "^2.88.0" + debug "^4.1.1" + request "^2.88.2" uuid "^3.0.0" universal-user-agent@^4.0.0: @@ -13384,7 +13372,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1, util-deprecate@^1.0.2, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -13425,10 +13413,10 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.1.0.tgz#6f1536eb43249f473abc6bd58ff983da1ca30d8d" - integrity sha512-CI18flHDznR0lq54xBycOVmphdCYnQLKn8abKn7PXUiKUGdEd+/l9LWNJmugXel4hXq7S+RMNl34ecyC9TntWg== +uuid@8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" + integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ== uuid@^3.0.0, uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" @@ -13518,7 +13506,7 @@ watchpack-chokidar2@^2.0.0: dependencies: chokidar "^2.1.8" -watchpack@^1.6.1: +watchpack@^1.7.4: version "1.7.4" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.4.tgz#6e9da53b3c80bb2d6508188f5b200410866cd30b" integrity sha512-aWAgTW4MoSJzZPAicljkO1hsi1oKj/RRq/OJQh2PKI2UKL04c2Bs+MBOB+BBABHTXJpf9mCwHN7ANCvYsvY2sg== @@ -13658,10 +13646,10 @@ webpack-subresource-integrity@1.4.1: dependencies: webpack-sources "^1.3.0" -webpack@4.43.0: - version "4.43.0" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" - integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== +webpack@4.44.1: + version "4.44.1" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.1.tgz#17e69fff9f321b8f117d1fda714edfc0b939cc21" + integrity sha512-4UOGAohv/VGUNQJstzEywwNxqX417FnjZgZJpJQegddzPmTvph37eBIRbRTfdySXzVtJXLJfbMN3mMYhM6GdmQ== dependencies: "@webassemblyjs/ast" "1.9.0" "@webassemblyjs/helper-module-context" "1.9.0" @@ -13671,7 +13659,7 @@ webpack@4.43.0: ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" - enhanced-resolve "^4.1.0" + enhanced-resolve "^4.3.0" eslint-scope "^4.0.3" json-parse-better-errors "^1.0.2" loader-runner "^2.4.0" @@ -13684,7 +13672,7 @@ webpack@4.43.0: schema-utils "^1.0.0" tapable "^1.1.3" terser-webpack-plugin "^1.4.3" - watchpack "^1.6.1" + watchpack "^1.7.4" webpack-sources "^1.4.1" websocket-driver@0.6.5: @@ -13793,10 +13781,10 @@ worker-farm@^1.7.0: dependencies: errno "~0.1.7" -worker-plugin@4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/worker-plugin/-/worker-plugin-4.0.3.tgz#7c42e600d5931ad154d3d5f187a32446df64db0f" - integrity sha512-7hFDYWiKcE3yHZvemsoM9lZis/PzurHAEX1ej8PLCu818Rt6QqUAiDdxHPCKZctzmhqzPpcFSgvMCiPbtooqAg== +worker-plugin@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/worker-plugin/-/worker-plugin-5.0.0.tgz#113b5fe1f4a5d6a957cecd29915bedafd70bb537" + integrity sha512-AXMUstURCxDD6yGam2r4E34aJg6kW85IiaeX72hi+I1cxyaMUtrvVY6sbfpGKAj5e7f68Acl62BjQF5aOOx2IQ== dependencies: loader-utils "^1.1.0" @@ -13941,13 +13929,10 @@ yaml@^1.10.0: resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.0.tgz#3b593add944876077d4d683fee01081bd9fff31e" integrity sha512-yr2icI4glYaNG+KWONODapy2/jDdMSDnrONSjblABjD9B4Z5LgiircSt8m8sRZFNi08kG9Sm0uSHtEmP3zaEGg== -yargs-parser@18.x, yargs-parser@^18.1.0, yargs-parser@^18.1.2, yargs-parser@^18.1.3: - version "18.1.3" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" - integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" +yargs-parser@20.x: + version "20.2.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.0.tgz#944791ca2be2e08ddadd3d87e9de4c6484338605" + integrity sha512-2agPoRFPoIcFzOIp6656gcvsg2ohtscpw2OINr/q46+Sq41xz2OYLqx5HRHabmFU1OARIPAYH5uteICE7mn/5A== yargs-parser@^13.1.2: version "13.1.2" @@ -13965,6 +13950,14 @@ yargs-parser@^15.0.1: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^18.1.0, yargs-parser@^18.1.2, yargs-parser@^18.1.3: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs@15.3.0: version "15.3.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976" @@ -14037,7 +14030,7 @@ yn@^2.0.0: resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" integrity sha1-5a2ryKz0CPY4X8dklWhMiOavaJo= -zone.js@~0.10.2: +zone.js@~0.10.2, zone.js@~0.10.3: version "0.10.3" resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" integrity sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg== From a467f3511a7b95e0b950a12e4313da584eeda051 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 22 Sep 2020 13:20:25 +0300 Subject: [PATCH 023/143] feat: upgrade module template angular version to the latest #5389 --- templates/module/angular/package.json | 36 +++++++++---------- .../projects/dev-app/e2e/tsconfig.json | 2 +- .../projects/dev-app/tsconfig.app.json | 2 +- .../projects/dev-app/tsconfig.spec.json | 2 +- .../my-project-name/tsconfig.spec.json | 2 +- templates/module/angular/tsconfig.base.json | 15 -------- templates/module/angular/tsconfig.json | 34 +++++++----------- 7 files changed, 35 insertions(+), 58 deletions(-) delete mode 100644 templates/module/angular/tsconfig.base.json diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index 0de3f194b7..a4240fc61b 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -20,40 +20,40 @@ "@abp/ng.setting-management": "~3.2.0-rc.2", "@abp/ng.tenant-management": "~3.2.0-rc.2", "@abp/ng.theme.basic": "~3.2.0-rc.2", - "@angular/animations": "~10.0.0", - "@angular/common": "~10.0.0", - "@angular/compiler": "~10.0.0", - "@angular/core": "~10.0.0", - "@angular/forms": "~10.0.0", - "@angular/platform-browser": "~10.0.0", - "@angular/platform-browser-dynamic": "~10.0.0", - "@angular/router": "~10.0.0", - "rxjs": "~6.5.4", + "@angular/animations": "~10.1.2", + "@angular/common": "~10.1.2", + "@angular/compiler": "~10.1.2", + "@angular/core": "~10.1.2", + "@angular/forms": "~10.1.2", + "@angular/platform-browser": "~10.1.2", + "@angular/platform-browser-dynamic": "~10.1.2", + "@angular/router": "~10.1.2", + "rxjs": "~6.6.3", "tslib": "^2.0.0", "zone.js": "~0.10.2" }, "devDependencies": { "@abp/ng.schematics": "~3.2.0-rc.2", - "@angular-devkit/build-angular": "~0.1000.0", - "@angular-devkit/build-ng-packagr": "~0.1000.0", - "@angular/cli": "~10.0.0", - "@angular/compiler-cli": "~10.0.0", + "@angular-devkit/build-angular": "~0.1001.2", + "@angular-devkit/build-ng-packagr": "~0.1001.2", + "@angular/cli": "~10.1.2", + "@angular/compiler-cli": "~10.1.2", "@types/jasmine": "~3.5.0", "@types/jasminewd2": "~2.0.3", "@types/node": "^12.11.1", - "codelyzer": "^5.1.2", - "jasmine-core": "~3.5.0", + "codelyzer": "^6.0.0", + "jasmine-core": "~3.6.0", "jasmine-spec-reporter": "~5.0.0", "karma": "~5.0.0", "karma-chrome-launcher": "~3.1.0", "karma-coverage-istanbul-reporter": "~3.0.2", - "karma-jasmine": "~3.3.0", + "karma-jasmine": "~4.0.0", "karma-jasmine-html-reporter": "^1.5.0", "ng-packagr": "^10.0.0", "protractor": "~7.0.0", "symlink-manager": "^1.5.0", "ts-node": "~8.3.0", "tslint": "~6.1.0", - "typescript": "~3.9.5" + "typescript": "~4.0.3" } -} +} \ No newline at end of file diff --git a/templates/module/angular/projects/dev-app/e2e/tsconfig.json b/templates/module/angular/projects/dev-app/e2e/tsconfig.json index 746a242801..3d809e80f6 100644 --- a/templates/module/angular/projects/dev-app/e2e/tsconfig.json +++ b/templates/module/angular/projects/dev-app/e2e/tsconfig.json @@ -1,5 +1,5 @@ { - "extends": "../../../tsconfig.base.json", + "extends": "../../../tsconfig.json", "compilerOptions": { "outDir": "../../../out-tsc/e2e", "module": "commonjs", diff --git a/templates/module/angular/projects/dev-app/tsconfig.app.json b/templates/module/angular/projects/dev-app/tsconfig.app.json index 406dd61a4a..809c09ca71 100644 --- a/templates/module/angular/projects/dev-app/tsconfig.app.json +++ b/templates/module/angular/projects/dev-app/tsconfig.app.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "../../out-tsc/app", "types": [] diff --git a/templates/module/angular/projects/dev-app/tsconfig.spec.json b/templates/module/angular/projects/dev-app/tsconfig.spec.json index ed5461c09c..a8ce1d396b 100644 --- a/templates/module/angular/projects/dev-app/tsconfig.spec.json +++ b/templates/module/angular/projects/dev-app/tsconfig.spec.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "../../out-tsc/spec", "types": [ diff --git a/templates/module/angular/projects/my-project-name/tsconfig.spec.json b/templates/module/angular/projects/my-project-name/tsconfig.spec.json index a9ea5ea114..16da33db07 100644 --- a/templates/module/angular/projects/my-project-name/tsconfig.spec.json +++ b/templates/module/angular/projects/my-project-name/tsconfig.spec.json @@ -1,5 +1,5 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.json", "compilerOptions": { "outDir": "../../out-tsc/spec", "types": [ diff --git a/templates/module/angular/tsconfig.base.json b/templates/module/angular/tsconfig.base.json deleted file mode 100644 index 5879bfbc59..0000000000 --- a/templates/module/angular/tsconfig.base.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "extends": "./tsconfig.prod.json", - "compilerOptions": { - "paths": { - "@my-company-name/my-project-name": [ - "projects/my-project-name/src/public-api.ts" - ], - "@my-company-name/my-project-name/config": [ - "projects/my-project-name/config/src/public-api.ts" - ], - "@proxy": ["projects/my-project-name/src/lib/proxy/index.ts"], - "@proxy/*": ["projects/my-project-name/src/lib/proxy/*"] - } - } -} diff --git a/templates/module/angular/tsconfig.json b/templates/module/angular/tsconfig.json index 35742b66e3..5879bfbc59 100644 --- a/templates/module/angular/tsconfig.json +++ b/templates/module/angular/tsconfig.json @@ -1,23 +1,15 @@ -/* - This is a "Solution Style" tsconfig.json file, and is used by editors and TypeScript’s language server to improve development experience. - It is not intended to be used to perform a compilation. - - To learn more about this file see: https://angular.io/config/solution-tsconfig. -*/ { - "files": [], - "references": [ - { - "path": "./projects/my-project-name/tsconfig.lib.json" - }, - { - "path": "./projects/my-project-name/tsconfig.spec.json" - }, - { - "path": "./projects/dev-app/tsconfig.app.json" - }, - { - "path": "./projects/dev-app/tsconfig.spec.json" + "extends": "./tsconfig.prod.json", + "compilerOptions": { + "paths": { + "@my-company-name/my-project-name": [ + "projects/my-project-name/src/public-api.ts" + ], + "@my-company-name/my-project-name/config": [ + "projects/my-project-name/config/src/public-api.ts" + ], + "@proxy": ["projects/my-project-name/src/lib/proxy/index.ts"], + "@proxy/*": ["projects/my-project-name/src/lib/proxy/*"] } - ] -} \ No newline at end of file + } +} From 83e1a78e79d7147dcad01d11f4ed809724aa1285 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Tue, 22 Sep 2020 21:58:26 +0800 Subject: [PATCH 024/143] Use blob storing system to store files --- .../BloggingTestAppDbContext.cs | 2 + ...loggingTestAppEntityFrameworkCoreModule.cs | 5 +- ...0200922115311_Added_BlobStoing.Designer.cs | 1260 +++ .../20200922115311_Added_BlobStoing.cs | 73 + .../BloggingTestAppDbContextModelSnapshot.cs | 82 + ...BloggingTestApp.EntityFrameworkCore.csproj | 1 + .../Volo.BloggingTestApp.MongoDB.csproj | 1 + .../MongoDB/BloggingTestAppMongoDbModule.cs | 7 +- .../BloggingTestAppModule.cs | 12 +- .../Properties/launchSettings.json | 6 +- .../Volo.BloggingTestApp.csproj | 2 +- .../wwwroot/libs/abp/luxon/abp.luxon.js | 46 + .../wwwroot/libs/luxon/luxon.js | 8258 +++++++++++++++++ .../wwwroot/libs/luxon/luxon.js.map | 1 + .../wwwroot/libs/luxon/luxon.min.js | 1 + .../wwwroot/libs/luxon/luxon.min.js.map | 1 + ...ogging.Application.Contracts.Shared.csproj | 1 + ...loggingApplicationContractsSharedModule.cs | 4 +- .../Volo/Blogging/BloggingFileContainer.cs | 10 + .../Volo/Blogging/Files/FileAppService.cs | 48 +- 20 files changed, 9775 insertions(+), 46 deletions(-) create mode 100644 modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/20200922115311_Added_BlobStoing.Designer.cs create mode 100644 modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/20200922115311_Added_BlobStoing.cs create mode 100644 modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/luxon/abp.luxon.js create mode 100644 modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.js create mode 100644 modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.js.map create mode 100644 modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.min.js create mode 100644 modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.min.js.map create mode 100644 modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingFileContainer.cs diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/BloggingTestAppDbContext.cs b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/BloggingTestAppDbContext.cs index c73422be7e..16e610dc81 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/BloggingTestAppDbContext.cs +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/BloggingTestAppDbContext.cs @@ -1,4 +1,5 @@ using Microsoft.EntityFrameworkCore; +using Volo.Abp.BlobStoring.Database.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.PermissionManagement.EntityFrameworkCore; @@ -23,6 +24,7 @@ namespace Volo.BloggingTestApp.EntityFrameworkCore modelBuilder.ConfigureSettingManagement(); modelBuilder.ConfigureIdentity(); modelBuilder.ConfigureBlogging(); + modelBuilder.ConfigureBlobStoring(); } } } diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/BloggingTestAppEntityFrameworkCoreModule.cs b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/BloggingTestAppEntityFrameworkCoreModule.cs index fd8ff13b2a..bdc6a380e7 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/BloggingTestAppEntityFrameworkCoreModule.cs +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/BloggingTestAppEntityFrameworkCoreModule.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.BlobStoring.Database.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.SqlServer; using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.Modularity; @@ -13,9 +14,9 @@ namespace Volo.BloggingTestApp.EntityFrameworkCore typeof(AbpIdentityEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreSqlServerModule))] + typeof(AbpEntityFrameworkCoreSqlServerModule), + typeof(BlobStoringDatabaseEntityFrameworkCoreModule))] public class BloggingTestAppEntityFrameworkCoreModule : AbpModule { - } } diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/20200922115311_Added_BlobStoing.Designer.cs b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/20200922115311_Added_BlobStoing.Designer.cs new file mode 100644 index 0000000000..5ef64bb0c8 --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/20200922115311_Added_BlobStoing.Designer.cs @@ -0,0 +1,1260 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; +using Volo.BloggingTestApp.EntityFrameworkCore; + +namespace Volo.BloggingTestApp.EntityFrameworkCore.Migrations +{ + [DbContext(typeof(BloggingTestAppDbContext))] + [Migration("20200922115311_Added_BlobStoing")] + partial class Added_BlobStoing + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("ProductVersion", "3.1.6") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("ContainerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .HasColumnType("varbinary(max)") + .HasMaxLength(2147483647); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("TenantId", "ContainerId", "Name"); + + b.ToTable("AbpBlobs"); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("Description") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Regex") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("RegexDescription") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDefault") + .HasColumnName("IsDefault") + .HasColumnType("bit"); + + b.Property("IsPublic") + .HasColumnName("IsPublic") + .HasColumnType("bit"); + + b.Property("IsStatic") + .HasColumnName("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedName") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Action") + .HasColumnType("nvarchar(96)") + .HasMaxLength(96); + + b.Property("ApplicationName") + .HasColumnType("nvarchar(96)") + .HasMaxLength(96); + + b.Property("BrowserInfo") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("ClientId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientIpAddress") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CorrelationId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Identity") + .HasColumnType("nvarchar(96)") + .HasMaxLength(96); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnName("AccessFailedCount") + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Email") + .IsRequired() + .HasColumnName("Email") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("EmailConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnName("IsExternal") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("LockoutEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasColumnName("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("NormalizedEmail") + .IsRequired() + .HasColumnName("NormalizedEmail") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("NormalizedUserName") + .IsRequired() + .HasColumnName("NormalizedUserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PasswordHash") + .HasColumnName("PasswordHash") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("PhoneNumber") + .HasColumnName("PhoneNumber") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("PhoneNumberConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("SecurityStamp") + .IsRequired() + .HasColumnName("SecurityStamp") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("Surname") + .HasColumnName("Surname") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnName("TwoFactorEnabled") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("UserName") + .IsRequired() + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(196)") + .HasMaxLength(196); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Name") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasColumnName("Code") + .HasColumnType("nvarchar(95)") + .HasMaxLength(95); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("DisplayName") + .IsRequired() + .HasColumnName("DisplayName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2048)") + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Blogging.Blogs.Blog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnName("Description") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnName("Name") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ShortName") + .IsRequired() + .HasColumnName("ShortName") + .HasColumnType("nvarchar(32)") + .HasMaxLength(32); + + b.HasKey("Id"); + + b.ToTable("BlgBlogs"); + }); + + modelBuilder.Entity("Volo.Blogging.Comments.Comment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("PostId") + .HasColumnName("PostId") + .HasColumnType("uniqueidentifier"); + + b.Property("RepliedCommentId") + .HasColumnName("RepliedCommentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Text") + .IsRequired() + .HasColumnName("Text") + .HasColumnType("nvarchar(1024)") + .HasMaxLength(1024); + + b.HasKey("Id"); + + b.HasIndex("PostId"); + + b.HasIndex("RepliedCommentId"); + + b.ToTable("BlgComments"); + }); + + modelBuilder.Entity("Volo.Blogging.Posts.Post", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("BlogId") + .HasColumnName("BlogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("Content") + .HasColumnName("Content") + .HasColumnType("nvarchar(max)") + .HasMaxLength(1048576); + + b.Property("CoverImage") + .IsRequired() + .HasColumnName("CoverImage") + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnName("Description") + .HasColumnType("nvarchar(1000)") + .HasMaxLength(1000); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("ReadCount") + .HasColumnType("int"); + + b.Property("Title") + .IsRequired() + .HasColumnName("Title") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("Url") + .IsRequired() + .HasColumnName("Url") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.HasKey("Id"); + + b.HasIndex("BlogId"); + + b.ToTable("BlgPosts"); + }); + + modelBuilder.Entity("Volo.Blogging.Posts.PostTag", b => + { + b.Property("PostId") + .HasColumnName("PostId") + .HasColumnType("uniqueidentifier"); + + b.Property("TagId") + .HasColumnName("TagId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("PostId", "TagId"); + + b.HasIndex("TagId"); + + b.ToTable("BlgPostTags"); + }); + + modelBuilder.Entity("Volo.Blogging.Tagging.Tag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("BlogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CreationTime") + .HasColumnName("CreationTime") + .HasColumnType("datetime2"); + + b.Property("CreatorId") + .HasColumnName("CreatorId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnName("DeleterId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeletionTime") + .HasColumnName("DeletionTime") + .HasColumnType("datetime2"); + + b.Property("Description") + .HasColumnName("Description") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnName("IsDeleted") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("LastModificationTime") + .HasColumnName("LastModificationTime") + .HasColumnType("datetime2"); + + b.Property("LastModifierId") + .HasColumnName("LastModifierId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnName("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("UsageCount") + .HasColumnName("UsageCount") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("BlgTags"); + }); + + modelBuilder.Entity("Volo.Blogging.Users.BlogUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("Email") + .IsRequired() + .HasColumnName("Email") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("EmailConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasColumnName("Name") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("PhoneNumber") + .HasColumnName("PhoneNumber") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnName("PhoneNumberConfirmed") + .HasColumnType("bit") + .HasDefaultValue(false); + + b.Property("Surname") + .HasColumnName("Surname") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .IsRequired() + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.ToTable("BlgUsers"); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.HasOne("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Blogging.Comments.Comment", b => + { + b.HasOne("Volo.Blogging.Posts.Post", null) + .WithMany() + .HasForeignKey("PostId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Blogging.Comments.Comment", null) + .WithMany() + .HasForeignKey("RepliedCommentId"); + }); + + modelBuilder.Entity("Volo.Blogging.Posts.Post", b => + { + b.HasOne("Volo.Blogging.Blogs.Blog", null) + .WithMany() + .HasForeignKey("BlogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Blogging.Posts.PostTag", b => + { + b.HasOne("Volo.Blogging.Posts.Post", null) + .WithMany("Tags") + .HasForeignKey("PostId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Blogging.Tagging.Tag", null) + .WithMany() + .HasForeignKey("TagId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/20200922115311_Added_BlobStoing.cs b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/20200922115311_Added_BlobStoing.cs new file mode 100644 index 0000000000..9ad5b7fcc2 --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/20200922115311_Added_BlobStoing.cs @@ -0,0 +1,73 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace Volo.BloggingTestApp.EntityFrameworkCore.Migrations +{ + public partial class Added_BlobStoing : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpBlobContainers", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + TenantId = table.Column(nullable: true), + Name = table.Column(maxLength: 128, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobContainers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpBlobs", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + ContainerId = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + Name = table.Column(maxLength: 256, nullable: false), + Content = table.Column(maxLength: 2147483647, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobs", x => x.Id); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobContainers_ContainerId", + column: x => x.ContainerId, + principalTable: "AbpBlobContainers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobContainers_TenantId_Name", + table: "AbpBlobContainers", + columns: new[] { "TenantId", "Name" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ContainerId", + table: "AbpBlobs", + column: "ContainerId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_TenantId_ContainerId_Name", + table: "AbpBlobs", + columns: new[] { "TenantId", "ContainerId", "Name" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpBlobs"); + + migrationBuilder.DropTable( + name: "AbpBlobContainers"); + } + } +} diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/BloggingTestAppDbContextModelSnapshot.cs b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/BloggingTestAppDbContextModelSnapshot.cs index 47647bb25e..a52f7e6b95 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/BloggingTestAppDbContextModelSnapshot.cs +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Migrations/BloggingTestAppDbContextModelSnapshot.cs @@ -21,6 +21,79 @@ namespace Volo.BloggingTestApp.EntityFrameworkCore.Migrations .HasAnnotation("Relational:MaxIdentifierLength", 128) .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("ContainerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .HasColumnType("varbinary(max)") + .HasMaxLength(2147483647); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("TenantId", "ContainerId", "Name"); + + b.ToTable("AbpBlobs"); + }); + + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers"); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => { b.Property("Id") @@ -1046,6 +1119,15 @@ namespace Volo.BloggingTestApp.EntityFrameworkCore.Migrations b.ToTable("BlgUsers"); }); + modelBuilder.Entity("Volo.Abp.BlobStoring.Database.DatabaseBlob", b => + { + b.HasOne("Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => { b.HasOne("Volo.Abp.Identity.IdentityRole", null) diff --git a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj index 5d3175a12a..b6705f41c8 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.csproj @@ -12,6 +12,7 @@ + diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj index cf886e234f..a846bb0ca6 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.csproj @@ -12,6 +12,7 @@ + diff --git a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo/BloggingTestApp/MongoDB/BloggingTestAppMongoDbModule.cs b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo/BloggingTestApp/MongoDB/BloggingTestAppMongoDbModule.cs index b86d5fdec5..621fbbbafd 100644 --- a/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo/BloggingTestApp/MongoDB/BloggingTestAppMongoDbModule.cs +++ b/modules/blogging/app/Volo.BloggingTestApp.MongoDB/Volo/BloggingTestApp/MongoDB/BloggingTestAppMongoDbModule.cs @@ -1,6 +1,4 @@ -using System; -using System.Collections.Generic; -using System.Text; +using Volo.Abp.BlobStoring.Database.MongoDB; using Volo.Abp.Identity.MongoDB; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.MongoDB; @@ -13,7 +11,8 @@ namespace Volo.BloggingTestApp.MongoDB typeof(AbpIdentityMongoDbModule), typeof(BloggingMongoDbModule), typeof(AbpSettingManagementMongoDbModule), - typeof(AbpPermissionManagementMongoDbModule) + typeof(AbpPermissionManagementMongoDbModule), + typeof(BlobStoringDatabaseMongoDbModule) )] public class BloggingTestAppMongoDbModule : AbpModule { diff --git a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs index 0cbdeaf6fc..4f04b56d0b 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs +++ b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs @@ -23,6 +23,8 @@ using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AspNetCore.Mvc.UI.Theming; using Volo.Abp.Authorization.Permissions; using Volo.Abp.Autofac; +using Volo.Abp.BlobStoring; +using Volo.Abp.BlobStoring.Database; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.Identity; @@ -37,7 +39,6 @@ using Volo.Blogging; using Volo.Blogging.Admin; using Volo.Blogging.Files; using Volo.BloggingTestApp.EntityFrameworkCore; -using Volo.BloggingTestApp.MongoDB; namespace Volo.BloggingTestApp { @@ -57,6 +58,7 @@ namespace Volo.BloggingTestApp typeof(AbpIdentityApplicationModule), typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpPermissionManagementApplicationModule), + typeof(BlobStoringDatabaseDomainModule), typeof(AbpAutofacModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule) )] @@ -134,6 +136,14 @@ namespace Volo.BloggingTestApp { options.FileUploadLocalFolder = Path.Combine(hostingEnvironment.WebRootPath, "files"); }); + + Configure(options => + { + options.Containers.ConfigureDefault(container => + { + container.UseDatabase(); + }); + }); } public override void OnApplicationInitialization(ApplicationInitializationContext context) diff --git a/modules/blogging/app/Volo.BloggingTestApp/Properties/launchSettings.json b/modules/blogging/app/Volo.BloggingTestApp/Properties/launchSettings.json index a6901d0c07..50c5ad8eff 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/Properties/launchSettings.json +++ b/modules/blogging/app/Volo.BloggingTestApp/Properties/launchSettings.json @@ -3,7 +3,7 @@ "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { - "applicationUrl": "http://localhost:50013/", + "applicationUrl": "https://localhost:40013/", "sslPort": 0 } }, @@ -21,7 +21,7 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, - "applicationUrl": "http://localhost:50017/" + "applicationUrl": "https://localhost:40017/" } } -} \ No newline at end of file +} diff --git a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj index 5d56d83ec9..dc8670d4b7 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj +++ b/modules/blogging/app/Volo.BloggingTestApp/Volo.BloggingTestApp.csproj @@ -34,7 +34,7 @@ - + diff --git a/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/luxon/abp.luxon.js b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/luxon/abp.luxon.js new file mode 100644 index 0000000000..b04de7cadf --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/abp/luxon/abp.luxon.js @@ -0,0 +1,46 @@ +var abp = abp || {}; +(function () { + + if (!luxon) { + throw "abp/luxon library requires the luxon library included to the page!"; + } + + /* TIMING *************************************************/ + + abp.timing = abp.timing || {}; + + var setObjectValue = function (obj, property, value) { + if (typeof property === "string") { + property = property.split('.'); + } + + if (property.length > 1) { + var p = property.shift(); + setObjectValue(obj[p], property, value); + } else { + obj[property[0]] = value; + } + } + + var getObjectValue = function (obj, property) { + return property.split('.').reduce((a, v) => a[v], obj) + } + + abp.timing.convertFieldsToIsoDate = function (form, fields) { + for (var field of fields) { + var dateTime = luxon.DateTime + .fromFormat( + getObjectValue(form, field), + abp.localization.currentCulture.dateTimeFormat.shortDatePattern, + {locale: abp.localization.currentCulture.cultureName} + ); + + if (!dateTime.invalid) { + setObjectValue(form, field, dateTime.toFormat("yyyy-MM-dd HH:mm:ss")) + } + } + + return form; + } + +})(jQuery); diff --git a/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.js b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.js new file mode 100644 index 0000000000..aa6e8caa20 --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.js @@ -0,0 +1,8258 @@ +var luxon = (function (exports) { + 'use strict'; + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + + function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); + } + + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); + } + + function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); + return true; + } catch (e) { + return false; + } + } + + function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct; + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + + return _construct.apply(null, arguments); + } + + function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; + } + + function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + + _cache.set(Class, Wrapper); + } + + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + + return _wrapNativeSuper(Class); + } + + function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _createForOfIteratorHelperLoose(o) { + var i = 0; + + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) return function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + i = o[Symbol.iterator](); + return i.next.bind(i); + } + + // these aren't really private, but nor are they really useful to document + + /** + * @private + */ + var LuxonError = /*#__PURE__*/function (_Error) { + _inheritsLoose(LuxonError, _Error); + + function LuxonError() { + return _Error.apply(this, arguments) || this; + } + + return LuxonError; + }( /*#__PURE__*/_wrapNativeSuper(Error)); + /** + * @private + */ + + + var InvalidDateTimeError = /*#__PURE__*/function (_LuxonError) { + _inheritsLoose(InvalidDateTimeError, _LuxonError); + + function InvalidDateTimeError(reason) { + return _LuxonError.call(this, "Invalid DateTime: " + reason.toMessage()) || this; + } + + return InvalidDateTimeError; + }(LuxonError); + /** + * @private + */ + + var InvalidIntervalError = /*#__PURE__*/function (_LuxonError2) { + _inheritsLoose(InvalidIntervalError, _LuxonError2); + + function InvalidIntervalError(reason) { + return _LuxonError2.call(this, "Invalid Interval: " + reason.toMessage()) || this; + } + + return InvalidIntervalError; + }(LuxonError); + /** + * @private + */ + + var InvalidDurationError = /*#__PURE__*/function (_LuxonError3) { + _inheritsLoose(InvalidDurationError, _LuxonError3); + + function InvalidDurationError(reason) { + return _LuxonError3.call(this, "Invalid Duration: " + reason.toMessage()) || this; + } + + return InvalidDurationError; + }(LuxonError); + /** + * @private + */ + + var ConflictingSpecificationError = /*#__PURE__*/function (_LuxonError4) { + _inheritsLoose(ConflictingSpecificationError, _LuxonError4); + + function ConflictingSpecificationError() { + return _LuxonError4.apply(this, arguments) || this; + } + + return ConflictingSpecificationError; + }(LuxonError); + /** + * @private + */ + + var InvalidUnitError = /*#__PURE__*/function (_LuxonError5) { + _inheritsLoose(InvalidUnitError, _LuxonError5); + + function InvalidUnitError(unit) { + return _LuxonError5.call(this, "Invalid unit " + unit) || this; + } + + return InvalidUnitError; + }(LuxonError); + /** + * @private + */ + + var InvalidArgumentError = /*#__PURE__*/function (_LuxonError6) { + _inheritsLoose(InvalidArgumentError, _LuxonError6); + + function InvalidArgumentError() { + return _LuxonError6.apply(this, arguments) || this; + } + + return InvalidArgumentError; + }(LuxonError); + /** + * @private + */ + + var ZoneIsAbstractError = /*#__PURE__*/function (_LuxonError7) { + _inheritsLoose(ZoneIsAbstractError, _LuxonError7); + + function ZoneIsAbstractError() { + return _LuxonError7.call(this, "Zone is an abstract class") || this; + } + + return ZoneIsAbstractError; + }(LuxonError); + + /** + * @private + */ + var n = "numeric", + s = "short", + l = "long"; + var DATE_SHORT = { + year: n, + month: n, + day: n + }; + var DATE_MED = { + year: n, + month: s, + day: n + }; + var DATE_FULL = { + year: n, + month: l, + day: n + }; + var DATE_HUGE = { + year: n, + month: l, + day: n, + weekday: l + }; + var TIME_SIMPLE = { + hour: n, + minute: n + }; + var TIME_WITH_SECONDS = { + hour: n, + minute: n, + second: n + }; + var TIME_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: s + }; + var TIME_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: l + }; + var TIME_24_SIMPLE = { + hour: n, + minute: n, + hour12: false + }; + /** + * {@link toLocaleString}; format like '09:30:23', always 24-hour. + */ + + var TIME_24_WITH_SECONDS = { + hour: n, + minute: n, + second: n, + hour12: false + }; + /** + * {@link toLocaleString}; format like '09:30:23 EDT', always 24-hour. + */ + + var TIME_24_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + hour12: false, + timeZoneName: s + }; + /** + * {@link toLocaleString}; format like '09:30:23 Eastern Daylight Time', always 24-hour. + */ + + var TIME_24_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + hour12: false, + timeZoneName: l + }; + /** + * {@link toLocaleString}; format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + */ + + var DATETIME_SHORT = { + year: n, + month: n, + day: n, + hour: n, + minute: n + }; + /** + * {@link toLocaleString}; format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + */ + + var DATETIME_SHORT_WITH_SECONDS = { + year: n, + month: n, + day: n, + hour: n, + minute: n, + second: n + }; + var DATETIME_MED = { + year: n, + month: s, + day: n, + hour: n, + minute: n + }; + var DATETIME_MED_WITH_SECONDS = { + year: n, + month: s, + day: n, + hour: n, + minute: n, + second: n + }; + var DATETIME_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s, + hour: n, + minute: n + }; + var DATETIME_FULL = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + timeZoneName: s + }; + var DATETIME_FULL_WITH_SECONDS = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + second: n, + timeZoneName: s + }; + var DATETIME_HUGE = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + timeZoneName: l + }; + var DATETIME_HUGE_WITH_SECONDS = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + second: n, + timeZoneName: l + }; + + /* + This is just a junk drawer, containing anything used across multiple classes. + Because Luxon is small(ish), this should stay small and we won't worry about splitting + it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area. + */ + /** + * @private + */ + // TYPES + + function isUndefined(o) { + return typeof o === "undefined"; + } + function isNumber(o) { + return typeof o === "number"; + } + function isInteger(o) { + return typeof o === "number" && o % 1 === 0; + } + function isString(o) { + return typeof o === "string"; + } + function isDate(o) { + return Object.prototype.toString.call(o) === "[object Date]"; + } // CAPABILITIES + + function hasIntl() { + try { + return typeof Intl !== "undefined" && Intl.DateTimeFormat; + } catch (e) { + return false; + } + } + function hasFormatToParts() { + return !isUndefined(Intl.DateTimeFormat.prototype.formatToParts); + } + function hasRelative() { + try { + return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; + } catch (e) { + return false; + } + } // OBJECTS AND ARRAYS + + function maybeArray(thing) { + return Array.isArray(thing) ? thing : [thing]; + } + function bestBy(arr, by, compare) { + if (arr.length === 0) { + return undefined; + } + + return arr.reduce(function (best, next) { + var pair = [by(next), next]; + + if (!best) { + return pair; + } else if (compare(best[0], pair[0]) === best[0]) { + return best; + } else { + return pair; + } + }, null)[1]; + } + function pick(obj, keys) { + return keys.reduce(function (a, k) { + a[k] = obj[k]; + return a; + }, {}); + } + function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + } // NUMBERS AND STRINGS + + function integerBetween(thing, bottom, top) { + return isInteger(thing) && thing >= bottom && thing <= top; + } // x % n but takes the sign of n instead of x + + function floorMod(x, n) { + return x - n * Math.floor(x / n); + } + function padStart(input, n) { + if (n === void 0) { + n = 2; + } + + if (input.toString().length < n) { + return ("0".repeat(n) + input).slice(-n); + } else { + return input.toString(); + } + } + function parseInteger(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseInt(string, 10); + } + } + function parseMillis(fraction) { + // Return undefined (instead of 0) in these cases, where fraction is not set + if (isUndefined(fraction) || fraction === null || fraction === "") { + return undefined; + } else { + var f = parseFloat("0." + fraction) * 1000; + return Math.floor(f); + } + } + function roundTo(number, digits, towardZero) { + if (towardZero === void 0) { + towardZero = false; + } + + var factor = Math.pow(10, digits), + rounder = towardZero ? Math.trunc : Math.round; + return rounder(number * factor) / factor; + } // DATE BASICS + + function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); + } + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + function daysInMonth(year, month) { + var modMonth = floorMod(month - 1, 12) + 1, + modYear = year + (month - modMonth) / 12; + + if (modMonth === 2) { + return isLeapYear(modYear) ? 29 : 28; + } else { + return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; + } + } // covert a calendar object to a local timestamp (epoch, but with the offset baked in) + + function objToLocalTS(obj) { + var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that + + if (obj.year < 100 && obj.year >= 0) { + d = new Date(d); + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + + return +d; + } + function weeksInWeekYear(weekYear) { + var p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7, + last = weekYear - 1, + p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7; + return p1 === 4 || p2 === 3 ? 53 : 52; + } + function untruncateYear(year) { + if (year > 99) { + return year; + } else return year > 60 ? 1900 + year : 2000 + year; + } // PARSING + + function parseZoneInfo(ts, offsetFormat, locale, timeZone) { + if (timeZone === void 0) { + timeZone = null; + } + + var date = new Date(ts), + intlOpts = { + hour12: false, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit" + }; + + if (timeZone) { + intlOpts.timeZone = timeZone; + } + + var modified = Object.assign({ + timeZoneName: offsetFormat + }, intlOpts), + intl = hasIntl(); + + if (intl && hasFormatToParts()) { + var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) { + return m.type.toLowerCase() === "timezonename"; + }); + return parsed ? parsed.value : null; + } else if (intl) { + // this probably doesn't work for all locales + var without = new Intl.DateTimeFormat(locale, intlOpts).format(date), + included = new Intl.DateTimeFormat(locale, modified).format(date), + diffed = included.substring(without.length), + trimmed = diffed.replace(/^[, \u200e]+/, ""); + return trimmed; + } else { + return null; + } + } // signedOffset('-5', '30') -> -330 + + function signedOffset(offHourStr, offMinuteStr) { + var offHour = parseInt(offHourStr, 10); // don't || this because we want to preserve -0 + + if (Number.isNaN(offHour)) { + offHour = 0; + } + + var offMin = parseInt(offMinuteStr, 10) || 0, + offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; + return offHour * 60 + offMinSigned; + } // COERCION + + function asNumber(value) { + var numericValue = Number(value); + if (typeof value === "boolean" || value === "" || Number.isNaN(numericValue)) throw new InvalidArgumentError("Invalid unit value " + value); + return numericValue; + } + function normalizeObject(obj, normalizer, nonUnitKeys) { + var normalized = {}; + + for (var u in obj) { + if (hasOwnProperty(obj, u)) { + if (nonUnitKeys.indexOf(u) >= 0) continue; + var v = obj[u]; + if (v === undefined || v === null) continue; + normalized[normalizer(u)] = asNumber(v); + } + } + + return normalized; + } + function formatOffset(offset, format) { + var hours = Math.trunc(offset / 60), + minutes = Math.abs(offset % 60), + sign = hours >= 0 && !Object.is(hours, -0) ? "+" : "-", + base = "" + sign + Math.abs(hours); + + switch (format) { + case "short": + return "" + sign + padStart(Math.abs(hours), 2) + ":" + padStart(minutes, 2); + + case "narrow": + return minutes > 0 ? base + ":" + minutes : base; + + case "techie": + return "" + sign + padStart(Math.abs(hours), 2) + padStart(minutes, 2); + + default: + throw new RangeError("Value format " + format + " is out of range for property format"); + } + } + function timeObject(obj) { + return pick(obj, ["hour", "minute", "second", "millisecond"]); + } + var ianaRegex = /[A-Za-z_+-]{1,256}(:?\/[A-Za-z_+-]{1,256}(\/[A-Za-z_+-]{1,256})?)?/; + + function stringify(obj) { + return JSON.stringify(obj, Object.keys(obj).sort()); + } + /** + * @private + */ + + + var monthsLong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + var monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + var monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; + function months(length) { + switch (length) { + case "narrow": + return monthsNarrow; + + case "short": + return monthsShort; + + case "long": + return monthsLong; + + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; + + case "2-digit": + return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; + + default: + return null; + } + } + var weekdaysLong = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; + var weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + var weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; + function weekdays(length) { + switch (length) { + case "narrow": + return weekdaysNarrow; + + case "short": + return weekdaysShort; + + case "long": + return weekdaysLong; + + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7"]; + + default: + return null; + } + } + var meridiems = ["AM", "PM"]; + var erasLong = ["Before Christ", "Anno Domini"]; + var erasShort = ["BC", "AD"]; + var erasNarrow = ["B", "A"]; + function eras(length) { + switch (length) { + case "narrow": + return erasNarrow; + + case "short": + return erasShort; + + case "long": + return erasLong; + + default: + return null; + } + } + function meridiemForDateTime(dt) { + return meridiems[dt.hour < 12 ? 0 : 1]; + } + function weekdayForDateTime(dt, length) { + return weekdays(length)[dt.weekday - 1]; + } + function monthForDateTime(dt, length) { + return months(length)[dt.month - 1]; + } + function eraForDateTime(dt, length) { + return eras(length)[dt.year < 0 ? 0 : 1]; + } + function formatRelativeTime(unit, count, numeric, narrow) { + if (numeric === void 0) { + numeric = "always"; + } + + if (narrow === void 0) { + narrow = false; + } + + var units = { + years: ["year", "yr."], + quarters: ["quarter", "qtr."], + months: ["month", "mo."], + weeks: ["week", "wk."], + days: ["day", "day", "days"], + hours: ["hour", "hr."], + minutes: ["minute", "min."], + seconds: ["second", "sec."] + }; + var lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; + + if (numeric === "auto" && lastable) { + var isDay = unit === "days"; + + switch (count) { + case 1: + return isDay ? "tomorrow" : "next " + units[unit][0]; + + case -1: + return isDay ? "yesterday" : "last " + units[unit][0]; + + case 0: + return isDay ? "today" : "this " + units[unit][0]; + + } + } + + var isInPast = Object.is(count, -0) || count < 0, + fmtValue = Math.abs(count), + singular = fmtValue === 1, + lilUnits = units[unit], + fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit; + return isInPast ? fmtValue + " " + fmtUnit + " ago" : "in " + fmtValue + " " + fmtUnit; + } + function formatString(knownFormat) { + // these all have the offsets removed because we don't have access to them + // without all the intl stuff this is backfilling + var filtered = pick(knownFormat, ["weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZoneName", "hour12"]), + key = stringify(filtered), + dateTimeHuge = "EEEE, LLLL d, yyyy, h:mm a"; + + switch (key) { + case stringify(DATE_SHORT): + return "M/d/yyyy"; + + case stringify(DATE_MED): + return "LLL d, yyyy"; + + case stringify(DATE_FULL): + return "LLLL d, yyyy"; + + case stringify(DATE_HUGE): + return "EEEE, LLLL d, yyyy"; + + case stringify(TIME_SIMPLE): + return "h:mm a"; + + case stringify(TIME_WITH_SECONDS): + return "h:mm:ss a"; + + case stringify(TIME_WITH_SHORT_OFFSET): + return "h:mm a"; + + case stringify(TIME_WITH_LONG_OFFSET): + return "h:mm a"; + + case stringify(TIME_24_SIMPLE): + return "HH:mm"; + + case stringify(TIME_24_WITH_SECONDS): + return "HH:mm:ss"; + + case stringify(TIME_24_WITH_SHORT_OFFSET): + return "HH:mm"; + + case stringify(TIME_24_WITH_LONG_OFFSET): + return "HH:mm"; + + case stringify(DATETIME_SHORT): + return "M/d/yyyy, h:mm a"; + + case stringify(DATETIME_MED): + return "LLL d, yyyy, h:mm a"; + + case stringify(DATETIME_FULL): + return "LLLL d, yyyy, h:mm a"; + + case stringify(DATETIME_HUGE): + return dateTimeHuge; + + case stringify(DATETIME_SHORT_WITH_SECONDS): + return "M/d/yyyy, h:mm:ss a"; + + case stringify(DATETIME_MED_WITH_SECONDS): + return "LLL d, yyyy, h:mm:ss a"; + + case stringify(DATETIME_MED_WITH_WEEKDAY): + return "EEE, d LLL yyyy, h:mm a"; + + case stringify(DATETIME_FULL_WITH_SECONDS): + return "LLLL d, yyyy, h:mm:ss a"; + + case stringify(DATETIME_HUGE_WITH_SECONDS): + return "EEEE, LLLL d, yyyy, h:mm:ss a"; + + default: + return dateTimeHuge; + } + } + + function stringifyTokens(splits, tokenToString) { + var s = ""; + + for (var _iterator = _createForOfIteratorHelperLoose(splits), _step; !(_step = _iterator()).done;) { + var token = _step.value; + + if (token.literal) { + s += token.val; + } else { + s += tokenToString(token.val); + } + } + + return s; + } + + var _macroTokenToFormatOpts = { + D: DATE_SHORT, + DD: DATE_MED, + DDD: DATE_FULL, + DDDD: DATE_HUGE, + t: TIME_SIMPLE, + tt: TIME_WITH_SECONDS, + ttt: TIME_WITH_SHORT_OFFSET, + tttt: TIME_WITH_LONG_OFFSET, + T: TIME_24_SIMPLE, + TT: TIME_24_WITH_SECONDS, + TTT: TIME_24_WITH_SHORT_OFFSET, + TTTT: TIME_24_WITH_LONG_OFFSET, + f: DATETIME_SHORT, + ff: DATETIME_MED, + fff: DATETIME_FULL, + ffff: DATETIME_HUGE, + F: DATETIME_SHORT_WITH_SECONDS, + FF: DATETIME_MED_WITH_SECONDS, + FFF: DATETIME_FULL_WITH_SECONDS, + FFFF: DATETIME_HUGE_WITH_SECONDS + }; + /** + * @private + */ + + var Formatter = /*#__PURE__*/function () { + Formatter.create = function create(locale, opts) { + if (opts === void 0) { + opts = {}; + } + + return new Formatter(locale, opts); + }; + + Formatter.parseFormat = function parseFormat(fmt) { + var current = null, + currentFull = "", + bracketed = false; + var splits = []; + + for (var i = 0; i < fmt.length; i++) { + var c = fmt.charAt(i); + + if (c === "'") { + if (currentFull.length > 0) { + splits.push({ + literal: bracketed, + val: currentFull + }); + } + + current = null; + currentFull = ""; + bracketed = !bracketed; + } else if (bracketed) { + currentFull += c; + } else if (c === current) { + currentFull += c; + } else { + if (currentFull.length > 0) { + splits.push({ + literal: false, + val: currentFull + }); + } + + currentFull = c; + current = c; + } + } + + if (currentFull.length > 0) { + splits.push({ + literal: bracketed, + val: currentFull + }); + } + + return splits; + }; + + Formatter.macroTokenToFormatOpts = function macroTokenToFormatOpts(token) { + return _macroTokenToFormatOpts[token]; + }; + + function Formatter(locale, formatOpts) { + this.opts = formatOpts; + this.loc = locale; + this.systemLoc = null; + } + + var _proto = Formatter.prototype; + + _proto.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) { + if (this.systemLoc === null) { + this.systemLoc = this.loc.redefaultToSystem(); + } + + var df = this.systemLoc.dtFormatter(dt, Object.assign({}, this.opts, opts)); + return df.format(); + }; + + _proto.formatDateTime = function formatDateTime(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts)); + return df.format(); + }; + + _proto.formatDateTimeParts = function formatDateTimeParts(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts)); + return df.formatToParts(); + }; + + _proto.resolvedOptions = function resolvedOptions(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts)); + return df.resolvedOptions(); + }; + + _proto.num = function num(n, p) { + if (p === void 0) { + p = 0; + } + + // we get some perf out of doing this here, annoyingly + if (this.opts.forceSimple) { + return padStart(n, p); + } + + var opts = Object.assign({}, this.opts); + + if (p > 0) { + opts.padTo = p; + } + + return this.loc.numberFormatter(opts).format(n); + }; + + _proto.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) { + var _this = this; + + var knownEnglish = this.loc.listingMode() === "en", + useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory" && hasFormatToParts(), + string = function string(opts, extract) { + return _this.loc.extract(dt, opts, extract); + }, + formatOffset = function formatOffset(opts) { + if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { + return "Z"; + } + + return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; + }, + meridiem = function meridiem() { + return knownEnglish ? meridiemForDateTime(dt) : string({ + hour: "numeric", + hour12: true + }, "dayperiod"); + }, + month = function month(length, standalone) { + return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { + month: length + } : { + month: length, + day: "numeric" + }, "month"); + }, + weekday = function weekday(length, standalone) { + return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { + weekday: length + } : { + weekday: length, + month: "long", + day: "numeric" + }, "weekday"); + }, + maybeMacro = function maybeMacro(token) { + var formatOpts = Formatter.macroTokenToFormatOpts(token); + + if (formatOpts) { + return _this.formatWithSystemDefault(dt, formatOpts); + } else { + return token; + } + }, + era = function era(length) { + return knownEnglish ? eraForDateTime(dt, length) : string({ + era: length + }, "era"); + }, + tokenToString = function tokenToString(token) { + // Where possible: http://cldr.unicode.org/translation/date-time#TOC-Stand-Alone-vs.-Format-Styles + switch (token) { + // ms + case "S": + return _this.num(dt.millisecond); + + case "u": // falls through + + case "SSS": + return _this.num(dt.millisecond, 3); + // seconds + + case "s": + return _this.num(dt.second); + + case "ss": + return _this.num(dt.second, 2); + // minutes + + case "m": + return _this.num(dt.minute); + + case "mm": + return _this.num(dt.minute, 2); + // hours + + case "h": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); + + case "hh": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); + + case "H": + return _this.num(dt.hour); + + case "HH": + return _this.num(dt.hour, 2); + // offset + + case "Z": + // like +6 + return formatOffset({ + format: "narrow", + allowZ: _this.opts.allowZ + }); + + case "ZZ": + // like +06:00 + return formatOffset({ + format: "short", + allowZ: _this.opts.allowZ + }); + + case "ZZZ": + // like +0600 + return formatOffset({ + format: "techie", + allowZ: _this.opts.allowZ + }); + + case "ZZZZ": + // like EST + return dt.zone.offsetName(dt.ts, { + format: "short", + locale: _this.loc.locale + }); + + case "ZZZZZ": + // like Eastern Standard Time + return dt.zone.offsetName(dt.ts, { + format: "long", + locale: _this.loc.locale + }); + // zone + + case "z": + // like America/New_York + return dt.zoneName; + // meridiems + + case "a": + return meridiem(); + // dates + + case "d": + return useDateTimeFormatter ? string({ + day: "numeric" + }, "day") : _this.num(dt.day); + + case "dd": + return useDateTimeFormatter ? string({ + day: "2-digit" + }, "day") : _this.num(dt.day, 2); + // weekdays - standalone + + case "c": + // like 1 + return _this.num(dt.weekday); + + case "ccc": + // like 'Tues' + return weekday("short", true); + + case "cccc": + // like 'Tuesday' + return weekday("long", true); + + case "ccccc": + // like 'T' + return weekday("narrow", true); + // weekdays - format + + case "E": + // like 1 + return _this.num(dt.weekday); + + case "EEE": + // like 'Tues' + return weekday("short", false); + + case "EEEE": + // like 'Tuesday' + return weekday("long", false); + + case "EEEEE": + // like 'T' + return weekday("narrow", false); + // months - standalone + + case "L": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric", + day: "numeric" + }, "month") : _this.num(dt.month); + + case "LL": + // like 01, doesn't seem to work + return useDateTimeFormatter ? string({ + month: "2-digit", + day: "numeric" + }, "month") : _this.num(dt.month, 2); + + case "LLL": + // like Jan + return month("short", true); + + case "LLLL": + // like January + return month("long", true); + + case "LLLLL": + // like J + return month("narrow", true); + // months - format + + case "M": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric" + }, "month") : _this.num(dt.month); + + case "MM": + // like 01 + return useDateTimeFormatter ? string({ + month: "2-digit" + }, "month") : _this.num(dt.month, 2); + + case "MMM": + // like Jan + return month("short", false); + + case "MMMM": + // like January + return month("long", false); + + case "MMMMM": + // like J + return month("narrow", false); + // years + + case "y": + // like 2014 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year); + + case "yy": + // like 14 + return useDateTimeFormatter ? string({ + year: "2-digit" + }, "year") : _this.num(dt.year.toString().slice(-2), 2); + + case "yyyy": + // like 0012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 4); + + case "yyyyyy": + // like 000012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 6); + // eras + + case "G": + // like AD + return era("short"); + + case "GG": + // like Anno Domini + return era("long"); + + case "GGGGG": + return era("narrow"); + + case "kk": + return _this.num(dt.weekYear.toString().slice(-2), 2); + + case "kkkk": + return _this.num(dt.weekYear, 4); + + case "W": + return _this.num(dt.weekNumber); + + case "WW": + return _this.num(dt.weekNumber, 2); + + case "o": + return _this.num(dt.ordinal); + + case "ooo": + return _this.num(dt.ordinal, 3); + + case "q": + // like 1 + return _this.num(dt.quarter); + + case "qq": + // like 01 + return _this.num(dt.quarter, 2); + + case "X": + return _this.num(Math.floor(dt.ts / 1000)); + + case "x": + return _this.num(dt.ts); + + default: + return maybeMacro(token); + } + }; + + return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + }; + + _proto.formatDurationFromString = function formatDurationFromString(dur, fmt) { + var _this2 = this; + + var tokenToField = function tokenToField(token) { + switch (token[0]) { + case "S": + return "millisecond"; + + case "s": + return "second"; + + case "m": + return "minute"; + + case "h": + return "hour"; + + case "d": + return "day"; + + case "M": + return "month"; + + case "y": + return "year"; + + default: + return null; + } + }, + tokenToString = function tokenToString(lildur) { + return function (token) { + var mapped = tokenToField(token); + + if (mapped) { + return _this2.num(lildur.get(mapped), token.length); + } else { + return token; + } + }; + }, + tokens = Formatter.parseFormat(fmt), + realTokens = tokens.reduce(function (found, _ref) { + var literal = _ref.literal, + val = _ref.val; + return literal ? found : found.concat(val); + }, []), + collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) { + return t; + })); + + return stringifyTokens(tokens, tokenToString(collapsed)); + }; + + return Formatter; + }(); + + var Invalid = /*#__PURE__*/function () { + function Invalid(reason, explanation) { + this.reason = reason; + this.explanation = explanation; + } + + var _proto = Invalid.prototype; + + _proto.toMessage = function toMessage() { + if (this.explanation) { + return this.reason + ": " + this.explanation; + } else { + return this.reason; + } + }; + + return Invalid; + }(); + + /** + * @interface + */ + + var Zone = /*#__PURE__*/function () { + function Zone() {} + + var _proto = Zone.prototype; + + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + _proto.offsetName = function offsetName(ts, opts) { + throw new ZoneIsAbstractError(); + } + /** + * Returns the offset's value as a string + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + ; + + _proto.formatOffset = function formatOffset(ts, format) { + throw new ZoneIsAbstractError(); + } + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @abstract + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */ + ; + + _proto.offset = function offset(ts) { + throw new ZoneIsAbstractError(); + } + /** + * Return whether this Zone is equal to another zone + * @abstract + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */ + ; + + _proto.equals = function equals(otherZone) { + throw new ZoneIsAbstractError(); + } + /** + * Return whether this Zone is valid. + * @abstract + * @type {boolean} + */ + ; + + _createClass(Zone, [{ + key: "type", + + /** + * The type of zone + * @abstract + * @type {string} + */ + get: function get() { + throw new ZoneIsAbstractError(); + } + /** + * The name of this zone. + * @abstract + * @type {string} + */ + + }, { + key: "name", + get: function get() { + throw new ZoneIsAbstractError(); + } + /** + * Returns whether the offset is known to be fixed for the whole year. + * @abstract + * @type {boolean} + */ + + }, { + key: "universal", + get: function get() { + throw new ZoneIsAbstractError(); + } + }, { + key: "isValid", + get: function get() { + throw new ZoneIsAbstractError(); + } + }]); + + return Zone; + }(); + + var singleton = null; + /** + * Represents the local zone for this Javascript environment. + * @implements {Zone} + */ + + var LocalZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(LocalZone, _Zone); + + function LocalZone() { + return _Zone.apply(this, arguments) || this; + } + + var _proto = LocalZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale); + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + /** @override **/ + ; + + _proto.offset = function offset(ts) { + return -new Date(ts).getTimezoneOffset(); + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "local"; + } + /** @override **/ + ; + + _createClass(LocalZone, [{ + key: "type", + + /** @override **/ + get: function get() { + return "local"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + if (hasIntl()) { + return new Intl.DateTimeFormat().resolvedOptions().timeZone; + } else return "local"; + } + /** @override **/ + + }, { + key: "universal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "instance", + + /** + * Get a singleton instance of the local zone + * @return {LocalZone} + */ + get: function get() { + if (singleton === null) { + singleton = new LocalZone(); + } + + return singleton; + } + }]); + + return LocalZone; + }(Zone); + + var matchingRegex = RegExp("^" + ianaRegex.source + "$"); + var dtfCache = {}; + + function makeDTF(zone) { + if (!dtfCache[zone]) { + dtfCache[zone] = new Intl.DateTimeFormat("en-US", { + hour12: false, + timeZone: zone, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit" + }); + } + + return dtfCache[zone]; + } + + var typeToPos = { + year: 0, + month: 1, + day: 2, + hour: 3, + minute: 4, + second: 5 + }; + + function hackyOffset(dtf, date) { + var formatted = dtf.format(date).replace(/\u200E/g, ""), + parsed = /(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(formatted), + fMonth = parsed[1], + fDay = parsed[2], + fYear = parsed[3], + fHour = parsed[4], + fMinute = parsed[5], + fSecond = parsed[6]; + return [fYear, fMonth, fDay, fHour, fMinute, fSecond]; + } + + function partsOffset(dtf, date) { + var formatted = dtf.formatToParts(date), + filled = []; + + for (var i = 0; i < formatted.length; i++) { + var _formatted$i = formatted[i], + type = _formatted$i.type, + value = _formatted$i.value, + pos = typeToPos[type]; + + if (!isUndefined(pos)) { + filled[pos] = parseInt(value, 10); + } + } + + return filled; + } + + var ianaZoneCache = {}; + /** + * A zone identified by an IANA identifier, like America/New_York + * @implements {Zone} + */ + + var IANAZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(IANAZone, _Zone); + + /** + * @param {string} name - Zone name + * @return {IANAZone} + */ + IANAZone.create = function create(name) { + if (!ianaZoneCache[name]) { + ianaZoneCache[name] = new IANAZone(name); + } + + return ianaZoneCache[name]; + } + /** + * Reset local caches. Should only be necessary in testing scenarios. + * @return {void} + */ + ; + + IANAZone.resetCache = function resetCache() { + ianaZoneCache = {}; + dtfCache = {}; + } + /** + * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that. + * @param {string} s - The string to check validity on + * @example IANAZone.isValidSpecifier("America/New_York") //=> true + * @example IANAZone.isValidSpecifier("Fantasia/Castle") //=> true + * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false + * @return {boolean} + */ + ; + + IANAZone.isValidSpecifier = function isValidSpecifier(s) { + return !!(s && s.match(matchingRegex)); + } + /** + * Returns whether the provided string identifies a real zone + * @param {string} zone - The string to check + * @example IANAZone.isValidZone("America/New_York") //=> true + * @example IANAZone.isValidZone("Fantasia/Castle") //=> false + * @example IANAZone.isValidZone("Sport~~blorp") //=> false + * @return {boolean} + */ + ; + + IANAZone.isValidZone = function isValidZone(zone) { + try { + new Intl.DateTimeFormat("en-US", { + timeZone: zone + }).format(); + return true; + } catch (e) { + return false; + } + } // Etc/GMT+8 -> -480 + + /** @ignore */ + ; + + IANAZone.parseGMTOffset = function parseGMTOffset(specifier) { + if (specifier) { + var match = specifier.match(/^Etc\/GMT([+-]\d{1,2})$/i); + + if (match) { + return -60 * parseInt(match[1]); + } + } + + return null; + }; + + function IANAZone(name) { + var _this; + + _this = _Zone.call(this) || this; + /** @private **/ + + _this.zoneName = name; + /** @private **/ + + _this.valid = IANAZone.isValidZone(name); + return _this; + } + /** @override **/ + + + var _proto = IANAZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale, this.name); + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + /** @override **/ + ; + + _proto.offset = function offset(ts) { + var date = new Date(ts), + dtf = makeDTF(this.name), + _ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date), + year = _ref2[0], + month = _ref2[1], + day = _ref2[2], + hour = _ref2[3], + minute = _ref2[4], + second = _ref2[5], + adjustedHour = hour === 24 ? 0 : hour; + + var asUTC = objToLocalTS({ + year: year, + month: month, + day: day, + hour: adjustedHour, + minute: minute, + second: second, + millisecond: 0 + }); + var asTS = +date; + var over = asTS % 1000; + asTS -= over >= 0 ? over : 1000 + over; + return (asUTC - asTS) / (60 * 1000); + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "iana" && otherZone.name === this.name; + } + /** @override **/ + ; + + _createClass(IANAZone, [{ + key: "type", + get: function get() { + return "iana"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.zoneName; + } + /** @override **/ + + }, { + key: "universal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return this.valid; + } + }]); + + return IANAZone; + }(Zone); + + var singleton$1 = null; + /** + * A zone with a fixed offset (meaning no DST) + * @implements {Zone} + */ + + var FixedOffsetZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(FixedOffsetZone, _Zone); + + /** + * Get an instance with a specified offset + * @param {number} offset - The offset in minutes + * @return {FixedOffsetZone} + */ + FixedOffsetZone.instance = function instance(offset) { + return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset); + } + /** + * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" + * @param {string} s - The offset string to parse + * @example FixedOffsetZone.parseSpecifier("UTC+6") + * @example FixedOffsetZone.parseSpecifier("UTC+06") + * @example FixedOffsetZone.parseSpecifier("UTC-6:00") + * @return {FixedOffsetZone} + */ + ; + + FixedOffsetZone.parseSpecifier = function parseSpecifier(s) { + if (s) { + var r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + + if (r) { + return new FixedOffsetZone(signedOffset(r[1], r[2])); + } + } + + return null; + }; + + _createClass(FixedOffsetZone, null, [{ + key: "utcInstance", + + /** + * Get a singleton instance of UTC + * @return {FixedOffsetZone} + */ + get: function get() { + if (singleton$1 === null) { + singleton$1 = new FixedOffsetZone(0); + } + + return singleton$1; + } + }]); + + function FixedOffsetZone(offset) { + var _this; + + _this = _Zone.call(this) || this; + /** @private **/ + + _this.fixed = offset; + return _this; + } + /** @override **/ + + + var _proto = FixedOffsetZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName() { + return this.name; + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.fixed, format); + } + /** @override **/ + ; + + /** @override **/ + _proto.offset = function offset() { + return this.fixed; + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "fixed" && otherZone.fixed === this.fixed; + } + /** @override **/ + ; + + _createClass(FixedOffsetZone, [{ + key: "type", + get: function get() { + return "fixed"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.fixed === 0 ? "UTC" : "UTC" + formatOffset(this.fixed, "narrow"); + } + }, { + key: "universal", + get: function get() { + return true; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }]); + + return FixedOffsetZone; + }(Zone); + + /** + * A zone that failed to parse. You should never need to instantiate this. + * @implements {Zone} + */ + + var InvalidZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(InvalidZone, _Zone); + + function InvalidZone(zoneName) { + var _this; + + _this = _Zone.call(this) || this; + /** @private */ + + _this.zoneName = zoneName; + return _this; + } + /** @override **/ + + + var _proto = InvalidZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName() { + return null; + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset() { + return ""; + } + /** @override **/ + ; + + _proto.offset = function offset() { + return NaN; + } + /** @override **/ + ; + + _proto.equals = function equals() { + return false; + } + /** @override **/ + ; + + _createClass(InvalidZone, [{ + key: "type", + get: function get() { + return "invalid"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.zoneName; + } + /** @override **/ + + }, { + key: "universal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return false; + } + }]); + + return InvalidZone; + }(Zone); + + /** + * @private + */ + function normalizeZone(input, defaultZone) { + var offset; + + if (isUndefined(input) || input === null) { + return defaultZone; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + var lowered = input.toLowerCase(); + if (lowered === "local") return defaultZone;else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance;else if ((offset = IANAZone.parseGMTOffset(input)) != null) { + // handle Etc/GMT-4, which V8 chokes on + return FixedOffsetZone.instance(offset); + } else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && input.offset && typeof input.offset === "number") { + // This is dumb, but the instanceof check above doesn't seem to really work + // so we're duck checking it + return input; + } else { + return new InvalidZone(input); + } + } + + var now = function now() { + return Date.now(); + }, + defaultZone = null, + // not setting this directly to LocalZone.instance bc loading order issues + defaultLocale = null, + defaultNumberingSystem = null, + defaultOutputCalendar = null, + throwOnInvalid = false; + /** + * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here. + */ + + + var Settings = /*#__PURE__*/function () { + function Settings() {} + + /** + * Reset Luxon's global caches. Should only be necessary in testing scenarios. + * @return {void} + */ + Settings.resetCaches = function resetCaches() { + Locale.resetCache(); + IANAZone.resetCache(); + }; + + _createClass(Settings, null, [{ + key: "now", + + /** + * Get the callback for returning the current timestamp. + * @type {function} + */ + get: function get() { + return now; + } + /** + * Set the callback for returning the current timestamp. + * The function should return a number, which will be interpreted as an Epoch millisecond count + * @type {function} + * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future + * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time + */ + , + set: function set(n) { + now = n; + } + /** + * Get the default time zone to create DateTimes in. + * @type {string} + */ + + }, { + key: "defaultZoneName", + get: function get() { + return Settings.defaultZone.name; + } + /** + * Set the default time zone to create DateTimes in. Does not affect existing instances. + * @type {string} + */ + , + set: function set(z) { + if (!z) { + defaultZone = null; + } else { + defaultZone = normalizeZone(z); + } + } + /** + * Get the default time zone object to create DateTimes in. Does not affect existing instances. + * @type {Zone} + */ + + }, { + key: "defaultZone", + get: function get() { + return defaultZone || LocalZone.instance; + } + /** + * Get the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + + }, { + key: "defaultLocale", + get: function get() { + return defaultLocale; + } + /** + * Set the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(locale) { + defaultLocale = locale; + } + /** + * Get the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + + }, { + key: "defaultNumberingSystem", + get: function get() { + return defaultNumberingSystem; + } + /** + * Set the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(numberingSystem) { + defaultNumberingSystem = numberingSystem; + } + /** + * Get the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + + }, { + key: "defaultOutputCalendar", + get: function get() { + return defaultOutputCalendar; + } + /** + * Set the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(outputCalendar) { + defaultOutputCalendar = outputCalendar; + } + /** + * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + + }, { + key: "throwOnInvalid", + get: function get() { + return throwOnInvalid; + } + /** + * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + , + set: function set(t) { + throwOnInvalid = t; + } + }]); + + return Settings; + }(); + + var intlDTCache = {}; + + function getCachedDTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var key = JSON.stringify([locString, opts]); + var dtf = intlDTCache[key]; + + if (!dtf) { + dtf = new Intl.DateTimeFormat(locString, opts); + intlDTCache[key] = dtf; + } + + return dtf; + } + + var intlNumCache = {}; + + function getCachedINF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var key = JSON.stringify([locString, opts]); + var inf = intlNumCache[key]; + + if (!inf) { + inf = new Intl.NumberFormat(locString, opts); + intlNumCache[key] = inf; + } + + return inf; + } + + var intlRelCache = {}; + + function getCachedRTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var _opts = opts, + base = _opts.base, + cacheKeyOpts = _objectWithoutPropertiesLoose(_opts, ["base"]); // exclude `base` from the options + + + var key = JSON.stringify([locString, cacheKeyOpts]); + var inf = intlRelCache[key]; + + if (!inf) { + inf = new Intl.RelativeTimeFormat(locString, opts); + intlRelCache[key] = inf; + } + + return inf; + } + + var sysLocaleCache = null; + + function systemLocale() { + if (sysLocaleCache) { + return sysLocaleCache; + } else if (hasIntl()) { + var computedSys = new Intl.DateTimeFormat().resolvedOptions().locale; // node sometimes defaults to "und". Override that because that is dumb + + sysLocaleCache = !computedSys || computedSys === "und" ? "en-US" : computedSys; + return sysLocaleCache; + } else { + sysLocaleCache = "en-US"; + return sysLocaleCache; + } + } + + function parseLocaleString(localeStr) { + // I really want to avoid writing a BCP 47 parser + // see, e.g. https://github.com/wooorm/bcp-47 + // Instead, we'll do this: + // a) if the string has no -u extensions, just leave it alone + // b) if it does, use Intl to resolve everything + // c) if Intl fails, try again without the -u + var uIndex = localeStr.indexOf("-u-"); + + if (uIndex === -1) { + return [localeStr]; + } else { + var options; + var smaller = localeStr.substring(0, uIndex); + + try { + options = getCachedDTF(localeStr).resolvedOptions(); + } catch (e) { + options = getCachedDTF(smaller).resolvedOptions(); + } + + var _options = options, + numberingSystem = _options.numberingSystem, + calendar = _options.calendar; // return the smaller one so that we can append the calendar and numbering overrides to it + + return [smaller, numberingSystem, calendar]; + } + } + + function intlConfigString(localeStr, numberingSystem, outputCalendar) { + if (hasIntl()) { + if (outputCalendar || numberingSystem) { + localeStr += "-u"; + + if (outputCalendar) { + localeStr += "-ca-" + outputCalendar; + } + + if (numberingSystem) { + localeStr += "-nu-" + numberingSystem; + } + + return localeStr; + } else { + return localeStr; + } + } else { + return []; + } + } + + function mapMonths(f) { + var ms = []; + + for (var i = 1; i <= 12; i++) { + var dt = DateTime.utc(2016, i, 1); + ms.push(f(dt)); + } + + return ms; + } + + function mapWeekdays(f) { + var ms = []; + + for (var i = 1; i <= 7; i++) { + var dt = DateTime.utc(2016, 11, 13 + i); + ms.push(f(dt)); + } + + return ms; + } + + function listStuff(loc, length, defaultOK, englishFn, intlFn) { + var mode = loc.listingMode(defaultOK); + + if (mode === "error") { + return null; + } else if (mode === "en") { + return englishFn(length); + } else { + return intlFn(length); + } + } + + function supportsFastNumbers(loc) { + if (loc.numberingSystem && loc.numberingSystem !== "latn") { + return false; + } else { + return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || hasIntl() && new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === "latn"; + } + } + /** + * @private + */ + + + var PolyNumberFormatter = /*#__PURE__*/function () { + function PolyNumberFormatter(intl, forceSimple, opts) { + this.padTo = opts.padTo || 0; + this.floor = opts.floor || false; + + if (!forceSimple && hasIntl()) { + var intlOpts = { + useGrouping: false + }; + if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; + this.inf = getCachedINF(intl, intlOpts); + } + } + + var _proto = PolyNumberFormatter.prototype; + + _proto.format = function format(i) { + if (this.inf) { + var fixed = this.floor ? Math.floor(i) : i; + return this.inf.format(fixed); + } else { + // to match the browser's numberformatter defaults + var _fixed = this.floor ? Math.floor(i) : roundTo(i, 3); + + return padStart(_fixed, this.padTo); + } + }; + + return PolyNumberFormatter; + }(); + /** + * @private + */ + + + var PolyDateFormatter = /*#__PURE__*/function () { + function PolyDateFormatter(dt, intl, opts) { + this.opts = opts; + this.hasIntl = hasIntl(); + var z; + + if (dt.zone.universal && this.hasIntl) { + // Chromium doesn't support fixed-offset zones like Etc/GMT+8 in its formatter, + // See https://bugs.chromium.org/p/chromium/issues/detail?id=364374. + // So we have to make do. Two cases: + // 1. The format options tell us to show the zone. We can't do that, so the best + // we can do is format the date in UTC. + // 2. The format options don't tell us to show the zone. Then we can adjust them + // the time and tell the formatter to show it to us in UTC, so that the time is right + // and the bad zone doesn't show up. + // We can clean all this up when Chrome fixes this. + z = "UTC"; + + if (opts.timeZoneName) { + this.dt = dt; + } else { + this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000); + } + } else if (dt.zone.type === "local") { + this.dt = dt; + } else { + this.dt = dt; + z = dt.zone.name; + } + + if (this.hasIntl) { + var intlOpts = Object.assign({}, this.opts); + + if (z) { + intlOpts.timeZone = z; + } + + this.dtf = getCachedDTF(intl, intlOpts); + } + } + + var _proto2 = PolyDateFormatter.prototype; + + _proto2.format = function format() { + if (this.hasIntl) { + return this.dtf.format(this.dt.toJSDate()); + } else { + var tokenFormat = formatString(this.opts), + loc = Locale.create("en-US"); + return Formatter.create(loc).formatDateTimeFromString(this.dt, tokenFormat); + } + }; + + _proto2.formatToParts = function formatToParts() { + if (this.hasIntl && hasFormatToParts()) { + return this.dtf.formatToParts(this.dt.toJSDate()); + } else { + // This is kind of a cop out. We actually could do this for English. However, we couldn't do it for intl strings + // and IMO it's too weird to have an uncanny valley like that + return []; + } + }; + + _proto2.resolvedOptions = function resolvedOptions() { + if (this.hasIntl) { + return this.dtf.resolvedOptions(); + } else { + return { + locale: "en-US", + numberingSystem: "latn", + outputCalendar: "gregory" + }; + } + }; + + return PolyDateFormatter; + }(); + /** + * @private + */ + + + var PolyRelFormatter = /*#__PURE__*/function () { + function PolyRelFormatter(intl, isEnglish, opts) { + this.opts = Object.assign({ + style: "long" + }, opts); + + if (!isEnglish && hasRelative()) { + this.rtf = getCachedRTF(intl, opts); + } + } + + var _proto3 = PolyRelFormatter.prototype; + + _proto3.format = function format(count, unit) { + if (this.rtf) { + return this.rtf.format(count, unit); + } else { + return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); + } + }; + + _proto3.formatToParts = function formatToParts(count, unit) { + if (this.rtf) { + return this.rtf.formatToParts(count, unit); + } else { + return []; + } + }; + + return PolyRelFormatter; + }(); + /** + * @private + */ + + + var Locale = /*#__PURE__*/function () { + Locale.fromOpts = function fromOpts(opts) { + return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN); + }; + + Locale.create = function create(locale, numberingSystem, outputCalendar, defaultToEN) { + if (defaultToEN === void 0) { + defaultToEN = false; + } + + var specifiedLocale = locale || Settings.defaultLocale, + // the system locale is useful for human readable strings but annoying for parsing/formatting known formats + localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()), + numberingSystemR = numberingSystem || Settings.defaultNumberingSystem, + outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; + return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale); + }; + + Locale.resetCache = function resetCache() { + sysLocaleCache = null; + intlDTCache = {}; + intlNumCache = {}; + intlRelCache = {}; + }; + + Locale.fromObject = function fromObject(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + locale = _ref.locale, + numberingSystem = _ref.numberingSystem, + outputCalendar = _ref.outputCalendar; + + return Locale.create(locale, numberingSystem, outputCalendar); + }; + + function Locale(locale, numbering, outputCalendar, specifiedLocale) { + var _parseLocaleString = parseLocaleString(locale), + parsedLocale = _parseLocaleString[0], + parsedNumberingSystem = _parseLocaleString[1], + parsedOutputCalendar = _parseLocaleString[2]; + + this.locale = parsedLocale; + this.numberingSystem = numbering || parsedNumberingSystem || null; + this.outputCalendar = outputCalendar || parsedOutputCalendar || null; + this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); + this.weekdaysCache = { + format: {}, + standalone: {} + }; + this.monthsCache = { + format: {}, + standalone: {} + }; + this.meridiemCache = null; + this.eraCache = {}; + this.specifiedLocale = specifiedLocale; + this.fastNumbersCached = null; + } + + var _proto4 = Locale.prototype; + + _proto4.listingMode = function listingMode(defaultOK) { + if (defaultOK === void 0) { + defaultOK = true; + } + + var intl = hasIntl(), + hasFTP = intl && hasFormatToParts(), + isActuallyEn = this.isEnglish(), + hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory"); + + if (!hasFTP && !(isActuallyEn && hasNoWeirdness) && !defaultOK) { + return "error"; + } else if (!hasFTP || isActuallyEn && hasNoWeirdness) { + return "en"; + } else { + return "intl"; + } + }; + + _proto4.clone = function clone(alts) { + if (!alts || Object.getOwnPropertyNames(alts).length === 0) { + return this; + } else { + return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, alts.defaultToEN || false); + } + }; + + _proto4.redefaultToEN = function redefaultToEN(alts) { + if (alts === void 0) { + alts = {}; + } + + return this.clone(Object.assign({}, alts, { + defaultToEN: true + })); + }; + + _proto4.redefaultToSystem = function redefaultToSystem(alts) { + if (alts === void 0) { + alts = {}; + } + + return this.clone(Object.assign({}, alts, { + defaultToEN: false + })); + }; + + _proto4.months = function months$1(length, format, defaultOK) { + var _this = this; + + if (format === void 0) { + format = false; + } + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, months, function () { + var intl = format ? { + month: length, + day: "numeric" + } : { + month: length + }, + formatStr = format ? "format" : "standalone"; + + if (!_this.monthsCache[formatStr][length]) { + _this.monthsCache[formatStr][length] = mapMonths(function (dt) { + return _this.extract(dt, intl, "month"); + }); + } + + return _this.monthsCache[formatStr][length]; + }); + }; + + _proto4.weekdays = function weekdays$1(length, format, defaultOK) { + var _this2 = this; + + if (format === void 0) { + format = false; + } + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, weekdays, function () { + var intl = format ? { + weekday: length, + year: "numeric", + month: "long", + day: "numeric" + } : { + weekday: length + }, + formatStr = format ? "format" : "standalone"; + + if (!_this2.weekdaysCache[formatStr][length]) { + _this2.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) { + return _this2.extract(dt, intl, "weekday"); + }); + } + + return _this2.weekdaysCache[formatStr][length]; + }); + }; + + _proto4.meridiems = function meridiems$1(defaultOK) { + var _this3 = this; + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, undefined, defaultOK, function () { + return meridiems; + }, function () { + // In theory there could be aribitrary day periods. We're gonna assume there are exactly two + // for AM and PM. This is probably wrong, but it's makes parsing way easier. + if (!_this3.meridiemCache) { + var intl = { + hour: "numeric", + hour12: true + }; + _this3.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) { + return _this3.extract(dt, intl, "dayperiod"); + }); + } + + return _this3.meridiemCache; + }); + }; + + _proto4.eras = function eras$1(length, defaultOK) { + var _this4 = this; + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, eras, function () { + var intl = { + era: length + }; // This is utter bullshit. Different calendars are going to define eras totally differently. What I need is the minimum set of dates + // to definitely enumerate them. + + if (!_this4.eraCache[length]) { + _this4.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) { + return _this4.extract(dt, intl, "era"); + }); + } + + return _this4.eraCache[length]; + }); + }; + + _proto4.extract = function extract(dt, intlOpts, field) { + var df = this.dtFormatter(dt, intlOpts), + results = df.formatToParts(), + matching = results.find(function (m) { + return m.type.toLowerCase() === field; + }); + return matching ? matching.value : null; + }; + + _proto4.numberFormatter = function numberFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + + // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave) + // (in contrast, the rest of the condition is used heavily) + return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); + }; + + _proto4.dtFormatter = function dtFormatter(dt, intlOpts) { + if (intlOpts === void 0) { + intlOpts = {}; + } + + return new PolyDateFormatter(dt, this.intl, intlOpts); + }; + + _proto4.relFormatter = function relFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + + return new PolyRelFormatter(this.intl, this.isEnglish(), opts); + }; + + _proto4.isEnglish = function isEnglish() { + return this.locale === "en" || this.locale.toLowerCase() === "en-us" || hasIntl() && new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us"); + }; + + _proto4.equals = function equals(other) { + return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar; + }; + + _createClass(Locale, [{ + key: "fastNumbers", + get: function get() { + if (this.fastNumbersCached == null) { + this.fastNumbersCached = supportsFastNumbers(this); + } + + return this.fastNumbersCached; + } + }]); + + return Locale; + }(); + + /* + * This file handles parsing for well-specified formats. Here's how it works: + * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match. + * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object + * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence. + * Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors. + * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions. + * Some extractions are super dumb and simpleParse and fromStrings help DRY them. + */ + + function combineRegexes() { + for (var _len = arguments.length, regexes = new Array(_len), _key = 0; _key < _len; _key++) { + regexes[_key] = arguments[_key]; + } + + var full = regexes.reduce(function (f, r) { + return f + r.source; + }, ""); + return RegExp("^" + full + "$"); + } + + function combineExtractors() { + for (var _len2 = arguments.length, extractors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + extractors[_key2] = arguments[_key2]; + } + + return function (m) { + return extractors.reduce(function (_ref, ex) { + var mergedVals = _ref[0], + mergedZone = _ref[1], + cursor = _ref[2]; + + var _ex = ex(m, cursor), + val = _ex[0], + zone = _ex[1], + next = _ex[2]; + + return [Object.assign(mergedVals, val), mergedZone || zone, next]; + }, [{}, null, 1]).slice(0, 2); + }; + } + + function parse(s) { + if (s == null) { + return [null, null]; + } + + for (var _len3 = arguments.length, patterns = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + patterns[_key3 - 1] = arguments[_key3]; + } + + for (var _i = 0, _patterns = patterns; _i < _patterns.length; _i++) { + var _patterns$_i = _patterns[_i], + regex = _patterns$_i[0], + extractor = _patterns$_i[1]; + var m = regex.exec(s); + + if (m) { + return extractor(m); + } + } + + return [null, null]; + } + + function simpleParse() { + for (var _len4 = arguments.length, keys = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + keys[_key4] = arguments[_key4]; + } + + return function (match, cursor) { + var ret = {}; + var i; + + for (i = 0; i < keys.length; i++) { + ret[keys[i]] = parseInteger(match[cursor + i]); + } + + return [ret, null, cursor + i]; + }; + } // ISO and SQL parsing + + + var offsetRegex = /(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/, + isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,9}))?)?)?/, + isoTimeRegex = RegExp("" + isoTimeBaseRegex.source + offsetRegex.source + "?"), + isoTimeExtensionRegex = RegExp("(?:T" + isoTimeRegex.source + ")?"), + isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/, + isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/, + isoOrdinalRegex = /(\d{4})-?(\d{3})/, + extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"), + extractISOOrdinalData = simpleParse("year", "ordinal"), + sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/, + // dumbed-down version of the ISO one + sqlTimeRegex = RegExp(isoTimeBaseRegex.source + " ?(?:" + offsetRegex.source + "|(" + ianaRegex.source + "))?"), + sqlTimeExtensionRegex = RegExp("(?: " + sqlTimeRegex.source + ")?"); + + function int(match, pos, fallback) { + var m = match[pos]; + return isUndefined(m) ? fallback : parseInteger(m); + } + + function extractISOYmd(match, cursor) { + var item = { + year: int(match, cursor), + month: int(match, cursor + 1, 1), + day: int(match, cursor + 2, 1) + }; + return [item, null, cursor + 3]; + } + + function extractISOTime(match, cursor) { + var item = { + hour: int(match, cursor, 0), + minute: int(match, cursor + 1, 0), + second: int(match, cursor + 2, 0), + millisecond: parseMillis(match[cursor + 3]) + }; + return [item, null, cursor + 4]; + } + + function extractISOOffset(match, cursor) { + var local = !match[cursor] && !match[cursor + 1], + fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]), + zone = local ? null : FixedOffsetZone.instance(fullOffset); + return [{}, zone, cursor + 3]; + } + + function extractIANAZone(match, cursor) { + var zone = match[cursor] ? IANAZone.create(match[cursor]) : null; + return [{}, zone, cursor + 1]; + } // ISO duration parsing + + + var isoDuration = /^-?P(?:(?:(-?\d{1,9})Y)?(?:(-?\d{1,9})M)?(?:(-?\d{1,9})W)?(?:(-?\d{1,9})D)?(?:T(?:(-?\d{1,9})H)?(?:(-?\d{1,9})M)?(?:(-?\d{1,9})(?:[.,](-?\d{1,9}))?S)?)?)$/; + + function extractISODuration(match) { + var s = match[0], + yearStr = match[1], + monthStr = match[2], + weekStr = match[3], + dayStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + millisecondsStr = match[8]; + var hasNegativePrefix = s[0] === "-"; + + var maybeNegate = function maybeNegate(num) { + return num && hasNegativePrefix ? -num : num; + }; + + return [{ + years: maybeNegate(parseInteger(yearStr)), + months: maybeNegate(parseInteger(monthStr)), + weeks: maybeNegate(parseInteger(weekStr)), + days: maybeNegate(parseInteger(dayStr)), + hours: maybeNegate(parseInteger(hourStr)), + minutes: maybeNegate(parseInteger(minuteStr)), + seconds: maybeNegate(parseInteger(secondStr)), + milliseconds: maybeNegate(parseMillis(millisecondsStr)) + }]; + } // These are a little braindead. EDT *should* tell us that we're in, say, America/New_York + // and not just that we're in -240 *right now*. But since I don't think these are used that often + // I'm just going to ignore that + + + var obsOffsets = { + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60 + }; + + function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + var result = { + year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), + month: monthsShort.indexOf(monthStr) + 1, + day: parseInteger(dayStr), + hour: parseInteger(hourStr), + minute: parseInteger(minuteStr) + }; + if (secondStr) result.second = parseInteger(secondStr); + + if (weekdayStr) { + result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1; + } + + return result; + } // RFC 2822/5322 + + + var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; + + function extractRFC2822(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + obsOffset = match[8], + milOffset = match[9], + offHourStr = match[10], + offMinuteStr = match[11], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + var offset; + + if (obsOffset) { + offset = obsOffsets[obsOffset]; + } else if (milOffset) { + offset = 0; + } else { + offset = signedOffset(offHourStr, offMinuteStr); + } + + return [result, new FixedOffsetZone(offset)]; + } + + function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s.replace(/\([^)]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim(); + } // http date + + + var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/, + rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/, + ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; + + function extractRFC1123Or850(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; + } + + function extractASCII(match) { + var weekdayStr = match[1], + monthStr = match[2], + dayStr = match[3], + hourStr = match[4], + minuteStr = match[5], + secondStr = match[6], + yearStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; + } + + var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); + var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); + var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); + var isoTimeCombinedRegex = combineRegexes(isoTimeRegex); + var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset); + var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset); + var extractISOOrdinalDataAndTime = combineExtractors(extractISOOrdinalData, extractISOTime); + var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset); + /** + * @private + */ + + function parseISODate(s) { + return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDataAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]); + } + function parseRFC2822Date(s) { + return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]); + } + function parseHTTPDate(s) { + return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]); + } + function parseISODuration(s) { + return parse(s, [isoDuration, extractISODuration]); + } + var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); + var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); + var extractISOYmdTimeOffsetAndIANAZone = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone); + var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); + function parseSQL(s) { + return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]); + } + + var INVALID = "Invalid Duration"; // unit conversion constants + + var lowOrderMatrix = { + weeks: { + days: 7, + hours: 7 * 24, + minutes: 7 * 24 * 60, + seconds: 7 * 24 * 60 * 60, + milliseconds: 7 * 24 * 60 * 60 * 1000 + }, + days: { + hours: 24, + minutes: 24 * 60, + seconds: 24 * 60 * 60, + milliseconds: 24 * 60 * 60 * 1000 + }, + hours: { + minutes: 60, + seconds: 60 * 60, + milliseconds: 60 * 60 * 1000 + }, + minutes: { + seconds: 60, + milliseconds: 60 * 1000 + }, + seconds: { + milliseconds: 1000 + } + }, + casualMatrix = Object.assign({ + years: { + months: 12, + weeks: 52, + days: 365, + hours: 365 * 24, + minutes: 365 * 24 * 60, + seconds: 365 * 24 * 60 * 60, + milliseconds: 365 * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: 13, + days: 91, + hours: 91 * 24, + minutes: 91 * 24 * 60, + milliseconds: 91 * 24 * 60 * 60 * 1000 + }, + months: { + weeks: 4, + days: 30, + hours: 30 * 24, + minutes: 30 * 24 * 60, + seconds: 30 * 24 * 60 * 60, + milliseconds: 30 * 24 * 60 * 60 * 1000 + } + }, lowOrderMatrix), + daysInYearAccurate = 146097.0 / 400, + daysInMonthAccurate = 146097.0 / 4800, + accurateMatrix = Object.assign({ + years: { + months: 12, + weeks: daysInYearAccurate / 7, + days: daysInYearAccurate, + hours: daysInYearAccurate * 24, + minutes: daysInYearAccurate * 24 * 60, + seconds: daysInYearAccurate * 24 * 60 * 60, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: daysInYearAccurate / 28, + days: daysInYearAccurate / 4, + hours: daysInYearAccurate * 24 / 4, + minutes: daysInYearAccurate * 24 * 60 / 4, + seconds: daysInYearAccurate * 24 * 60 * 60 / 4, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4 + }, + months: { + weeks: daysInMonthAccurate / 7, + days: daysInMonthAccurate, + hours: daysInMonthAccurate * 24, + minutes: daysInMonthAccurate * 24 * 60, + seconds: daysInMonthAccurate * 24 * 60 * 60, + milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000 + } + }, lowOrderMatrix); // units ordered by size + + var orderedUnits = ["years", "quarters", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"]; + var reverseUnits = orderedUnits.slice(0).reverse(); // clone really means "create another instance just like this one, but with these changes" + + function clone(dur, alts, clear) { + if (clear === void 0) { + clear = false; + } + + // deep merge for vals + var conf = { + values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}), + loc: dur.loc.clone(alts.loc), + conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy + }; + return new Duration(conf); + } + + function antiTrunc(n) { + return n < 0 ? Math.floor(n) : Math.ceil(n); + } // NB: mutates parameters + + + function convert(matrix, fromMap, fromUnit, toMap, toUnit) { + var conv = matrix[toUnit][fromUnit], + raw = fromMap[fromUnit] / conv, + sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]), + // ok, so this is wild, but see the matrix in the tests + added = !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw); + toMap[toUnit] += added; + fromMap[fromUnit] -= added * conv; + } // NB: mutates parameters + + + function normalizeValues(matrix, vals) { + reverseUnits.reduce(function (previous, current) { + if (!isUndefined(vals[current])) { + if (previous) { + convert(matrix, vals, previous, vals, current); + } + + return current; + } else { + return previous; + } + }, null); + } + /** + * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime. + * + * Here is a brief overview of commonly used methods and getters in Duration: + * + * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}. + * * **Unit values** See the {@link Duration.years}, {@link Duration.months}, {@link Duration.weeks}, {@link Duration.days}, {@link Duration.hours}, {@link Duration.minutes}, {@link Duration.seconds}, {@link Duration.milliseconds} accessors. + * * **Configuration** See {@link Duration.locale} and {@link Duration.numberingSystem} accessors. + * * **Transformation** To create new Durations out of old ones use {@link Duration.plus}, {@link Duration.minus}, {@link Duration.normalize}, {@link Duration.set}, {@link Duration.reconfigure}, {@link Duration.shiftTo}, and {@link Duration.negate}. + * * **Output** To convert the Duration into other representations, see {@link Duration.as}, {@link Duration.toISO}, {@link Duration.toFormat}, and {@link Duration.toJSON} + * + * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation. + */ + + + var Duration = /*#__PURE__*/function () { + /** + * @private + */ + function Duration(config) { + var accurate = config.conversionAccuracy === "longterm" || false; + /** + * @access private + */ + + this.values = config.values; + /** + * @access private + */ + + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + + this.conversionAccuracy = accurate ? "longterm" : "casual"; + /** + * @access private + */ + + this.invalid = config.invalid || null; + /** + * @access private + */ + + this.matrix = accurate ? accurateMatrix : casualMatrix; + /** + * @access private + */ + + this.isLuxonDuration = true; + } + /** + * Create Duration from a number of milliseconds. + * @param {number} count of milliseconds + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + + + Duration.fromMillis = function fromMillis(count, opts) { + return Duration.fromObject(Object.assign({ + milliseconds: count + }, opts)); + } + /** + * Create a Duration from a Javascript object with keys like 'years' and 'hours. + * If this object is empty then a zero milliseconds duration is returned. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.years + * @param {number} obj.quarters + * @param {number} obj.months + * @param {number} obj.weeks + * @param {number} obj.days + * @param {number} obj.hours + * @param {number} obj.minutes + * @param {number} obj.seconds + * @param {number} obj.milliseconds + * @param {string} [obj.locale='en-US'] - the locale to use + * @param {string} obj.numberingSystem - the numbering system to use + * @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + ; + + Duration.fromObject = function fromObject(obj) { + if (obj == null || typeof obj !== "object") { + throw new InvalidArgumentError("Duration.fromObject: argument expected to be an object, got " + (obj === null ? "null" : typeof obj)); + } + + return new Duration({ + values: normalizeObject(obj, Duration.normalizeUnit, ["locale", "numberingSystem", "conversionAccuracy", "zone" // a bit of debt; it's super inconvenient internally not to be able to blindly pass this + ]), + loc: Locale.fromObject(obj), + conversionAccuracy: obj.conversionAccuracy + }); + } + /** + * Create a Duration from an ISO 8601 duration string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 } + * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 } + * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 } + * @return {Duration} + */ + ; + + Duration.fromISO = function fromISO(text, opts) { + var _parseISODuration = parseISODuration(text), + parsed = _parseISODuration[0]; + + if (parsed) { + var obj = Object.assign(parsed, opts); + return Duration.fromObject(obj); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + /** + * Create an invalid Duration. + * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Duration} + */ + ; + + Duration.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDurationError(invalid); + } else { + return new Duration({ + invalid: invalid + }); + } + } + /** + * @private + */ + ; + + Duration.normalizeUnit = function normalizeUnit(unit) { + var normalized = { + year: "years", + years: "years", + quarter: "quarters", + quarters: "quarters", + month: "months", + months: "months", + week: "weeks", + weeks: "weeks", + day: "days", + days: "days", + hour: "hours", + hours: "hours", + minute: "minutes", + minutes: "minutes", + second: "seconds", + seconds: "seconds", + millisecond: "milliseconds", + milliseconds: "milliseconds" + }[unit ? unit.toLowerCase() : unit]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } + /** + * Check if an object is a Duration. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + Duration.isDuration = function isDuration(o) { + return o && o.isLuxonDuration || false; + } + /** + * Get the locale of a Duration, such 'en-GB' + * @type {string} + */ + ; + + var _proto = Duration.prototype; + + /** + * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens: + * * `S` for milliseconds + * * `s` for seconds + * * `m` for minutes + * * `h` for hours + * * `d` for days + * * `M` for months + * * `y` for years + * Notes: + * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits + * * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting. + * @param {string} fmt - the format string + * @param {Object} opts - options + * @param {boolean} [opts.floor=true] - floor numerical values + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000" + * @return {string} + */ + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + // reverse-compat since 1.2; we always round down now, never up, and we do it by default + var fmtOpts = Object.assign({}, opts, { + floor: opts.round !== false && opts.floor !== false + }); + return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID; + } + /** + * Returns a Javascript object with this Duration's values. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 } + * @return {Object} + */ + ; + + _proto.toObject = function toObject(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) return {}; + var base = Object.assign({}, this.values); + + if (opts.includeConfig) { + base.conversionAccuracy = this.conversionAccuracy; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + + return base; + } + /** + * Returns an ISO 8601-compliant string representation of this Duration. + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S' + * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S' + * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M' + * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M' + * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S' + * @return {string} + */ + ; + + _proto.toISO = function toISO() { + // we could use the formatter, but this is an easier way to get the minimum string + if (!this.isValid) return null; + var s = "P"; + if (this.years !== 0) s += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) s += this.weeks + "W"; + if (this.days !== 0) s += this.days + "D"; + if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += "T"; + if (this.hours !== 0) s += this.hours + "H"; + if (this.minutes !== 0) s += this.minutes + "M"; + if (this.seconds !== 0 || this.milliseconds !== 0) // this will handle "floating point madness" by removing extra decimal places + // https://stackoverflow.com/questions/588004/is-floating-point-math-broken + s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S"; + if (s === "P") s += "T0S"; + return s; + } + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in JSON. + * @return {string} + */ + ; + + _proto.toJSON = function toJSON() { + return this.toISO(); + } + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in debugging. + * @return {string} + */ + ; + + _proto.toString = function toString() { + return this.toISO(); + } + /** + * Returns an milliseconds value of this Duration. + * @return {number} + */ + ; + + _proto.valueOf = function valueOf() { + return this.as("milliseconds"); + } + /** + * Make this Duration longer by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + ; + + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration), + result = {}; + + for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits), _step; !(_step = _iterator()).done;) { + var k = _step.value; + + if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { + result[k] = dur.get(k) + this.get(k); + } + } + + return clone(this, { + values: result + }, true); + } + /** + * Make this Duration shorter by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + ; + + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration); + return this.plus(dur.negate()); + } + /** + * Scale this Duration by the specified amount. Return a newly-constructed Duration. + * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number. + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit(x => x * 2) //=> { hours: 2, minutes: 60 } + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit((x, u) => u === "hour" ? x * 2 : x) //=> { hours: 2, minutes: 30 } + * @return {Duration} + */ + ; + + _proto.mapUnits = function mapUnits(fn) { + if (!this.isValid) return this; + var result = {}; + + for (var _i = 0, _Object$keys = Object.keys(this.values); _i < _Object$keys.length; _i++) { + var k = _Object$keys[_i]; + result[k] = asNumber(fn(this.values[k], k)); + } + + return clone(this, { + values: result + }, true); + } + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example Duration.fromObject({years: 2, days: 3}).years //=> 2 + * @example Duration.fromObject({years: 2, days: 3}).months //=> 0 + * @example Duration.fromObject({years: 2, days: 3}).days //=> 3 + * @return {number} + */ + ; + + _proto.get = function get(unit) { + return this[Duration.normalizeUnit(unit)]; + } + /** + * "Set" the values of specified units. Return a newly-constructed Duration. + * @param {Object} values - a mapping of units to numbers + * @example dur.set({ years: 2017 }) + * @example dur.set({ hours: 8, minutes: 30 }) + * @return {Duration} + */ + ; + + _proto.set = function set(values) { + if (!this.isValid) return this; + var mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit, [])); + return clone(this, { + values: mixed + }); + } + /** + * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration. + * @example dur.reconfigure({ locale: 'en-GB' }) + * @return {Duration} + */ + ; + + _proto.reconfigure = function reconfigure(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + locale = _ref.locale, + numberingSystem = _ref.numberingSystem, + conversionAccuracy = _ref.conversionAccuracy; + + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem + }), + opts = { + loc: loc + }; + + if (conversionAccuracy) { + opts.conversionAccuracy = conversionAccuracy; + } + + return clone(this, opts); + } + /** + * Return the length of the duration in the specified unit. + * @param {string} unit - a unit such as 'minutes' or 'days' + * @example Duration.fromObject({years: 1}).as('days') //=> 365 + * @example Duration.fromObject({years: 1}).as('months') //=> 12 + * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5 + * @return {number} + */ + ; + + _proto.as = function as(unit) { + return this.isValid ? this.shiftTo(unit).get(unit) : NaN; + } + /** + * Reduce this Duration to its canonical representation in its current units. + * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 } + * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 } + * @return {Duration} + */ + ; + + _proto.normalize = function normalize() { + if (!this.isValid) return this; + var vals = this.toObject(); + normalizeValues(this.matrix, vals); + return clone(this, { + values: vals + }, true); + } + /** + * Convert this Duration into its representation in a different set of units. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 } + * @return {Duration} + */ + ; + + _proto.shiftTo = function shiftTo() { + for (var _len = arguments.length, units = new Array(_len), _key = 0; _key < _len; _key++) { + units[_key] = arguments[_key]; + } + + if (!this.isValid) return this; + + if (units.length === 0) { + return this; + } + + units = units.map(function (u) { + return Duration.normalizeUnit(u); + }); + var built = {}, + accumulated = {}, + vals = this.toObject(); + var lastUnit; + normalizeValues(this.matrix, vals); + + for (var _iterator2 = _createForOfIteratorHelperLoose(orderedUnits), _step2; !(_step2 = _iterator2()).done;) { + var k = _step2.value; + + if (units.indexOf(k) >= 0) { + lastUnit = k; + var own = 0; // anything we haven't boiled down yet should get boiled to this unit + + for (var ak in accumulated) { + own += this.matrix[ak][k] * accumulated[ak]; + accumulated[ak] = 0; + } // plus anything that's already in this unit + + + if (isNumber(vals[k])) { + own += vals[k]; + } + + var i = Math.trunc(own); + built[k] = i; + accumulated[k] = own - i; // we'd like to absorb these fractions in another unit + // plus anything further down the chain that should be rolled up in to this + + for (var down in vals) { + if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) { + convert(this.matrix, vals, down, built, k); + } + } // otherwise, keep it in the wings to boil it later + + } else if (isNumber(vals[k])) { + accumulated[k] = vals[k]; + } + } // anything leftover becomes the decimal for the last unit + // lastUnit must be defined since units is not empty + + + for (var key in accumulated) { + if (accumulated[key] !== 0) { + built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; + } + } + + return clone(this, { + values: built + }, true).normalize(); + } + /** + * Return the negative of this Duration. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 } + * @return {Duration} + */ + ; + + _proto.negate = function negate() { + if (!this.isValid) return this; + var negated = {}; + + for (var _i2 = 0, _Object$keys2 = Object.keys(this.values); _i2 < _Object$keys2.length; _i2++) { + var k = _Object$keys2[_i2]; + negated[k] = -this.values[k]; + } + + return clone(this, { + values: negated + }, true); + } + /** + * Get the years. + * @type {number} + */ + ; + + /** + * Equality check + * Two Durations are equal iff they have the same units and the same values for each unit. + * @param {Duration} other + * @return {boolean} + */ + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + if (!this.loc.equals(other.loc)) { + return false; + } + + for (var _iterator3 = _createForOfIteratorHelperLoose(orderedUnits), _step3; !(_step3 = _iterator3()).done;) { + var u = _step3.value; + + if (this.values[u] !== other.values[u]) { + return false; + } + } + + return true; + }; + + _createClass(Duration, [{ + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + /** + * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration + * + * @type {string} + */ + + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + }, { + key: "years", + get: function get() { + return this.isValid ? this.values.years || 0 : NaN; + } + /** + * Get the quarters. + * @type {number} + */ + + }, { + key: "quarters", + get: function get() { + return this.isValid ? this.values.quarters || 0 : NaN; + } + /** + * Get the months. + * @type {number} + */ + + }, { + key: "months", + get: function get() { + return this.isValid ? this.values.months || 0 : NaN; + } + /** + * Get the weeks + * @type {number} + */ + + }, { + key: "weeks", + get: function get() { + return this.isValid ? this.values.weeks || 0 : NaN; + } + /** + * Get the days. + * @type {number} + */ + + }, { + key: "days", + get: function get() { + return this.isValid ? this.values.days || 0 : NaN; + } + /** + * Get the hours. + * @type {number} + */ + + }, { + key: "hours", + get: function get() { + return this.isValid ? this.values.hours || 0 : NaN; + } + /** + * Get the minutes. + * @type {number} + */ + + }, { + key: "minutes", + get: function get() { + return this.isValid ? this.values.minutes || 0 : NaN; + } + /** + * Get the seconds. + * @return {number} + */ + + }, { + key: "seconds", + get: function get() { + return this.isValid ? this.values.seconds || 0 : NaN; + } + /** + * Get the milliseconds. + * @return {number} + */ + + }, { + key: "milliseconds", + get: function get() { + return this.isValid ? this.values.milliseconds || 0 : NaN; + } + /** + * Returns whether the Duration is invalid. Invalid durations are returned by diff operations + * on invalid DateTimes or Intervals. + * @return {boolean} + */ + + }, { + key: "isValid", + get: function get() { + return this.invalid === null; + } + /** + * Returns an error code if this Duration became invalid, or null if the Duration is valid + * @return {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this Duration became invalid, or null if the Duration is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + + return Duration; + }(); + function friendlyDuration(durationish) { + if (isNumber(durationish)) { + return Duration.fromMillis(durationish); + } else if (Duration.isDuration(durationish)) { + return durationish; + } else if (typeof durationish === "object") { + return Duration.fromObject(durationish); + } else { + throw new InvalidArgumentError("Unknown duration argument " + durationish + " of type " + typeof durationish); + } + } + + var INVALID$1 = "Invalid Interval"; // checks if the start is equal to or before the end + + function validateStartEnd(start, end) { + if (!start || !start.isValid) { + return Interval.invalid("missing or invalid start"); + } else if (!end || !end.isValid) { + return Interval.invalid("missing or invalid end"); + } else if (end < start) { + return Interval.invalid("end before start", "The end of an interval must be after its start, but you had start=" + start.toISO() + " and end=" + end.toISO()); + } else { + return null; + } + } + /** + * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them. + * + * Here is a brief overview of the most commonly used methods and getters in Interval: + * + * * **Creation** To create an Interval, use {@link fromDateTimes}, {@link after}, {@link before}, or {@link fromISO}. + * * **Accessors** Use {@link start} and {@link end} to get the start and end. + * * **Interrogation** To analyze the Interval, use {@link count}, {@link length}, {@link hasSame}, {@link contains}, {@link isAfter}, or {@link isBefore}. + * * **Transformation** To create other Intervals out of this one, use {@link set}, {@link splitAt}, {@link splitBy}, {@link divideEqually}, {@link merge}, {@link xor}, {@link union}, {@link intersection}, or {@link difference}. + * * **Comparison** To compare this Interval to another one, use {@link equals}, {@link overlaps}, {@link abutsStart}, {@link abutsEnd}, {@link engulfs} + * * **Output** To convert the Interval into other representations, see {@link toString}, {@link toISO}, {@link toISODate}, {@link toISOTime}, {@link toFormat}, and {@link toDuration}. + */ + + + var Interval = /*#__PURE__*/function () { + /** + * @private + */ + function Interval(config) { + /** + * @access private + */ + this.s = config.start; + /** + * @access private + */ + + this.e = config.end; + /** + * @access private + */ + + this.invalid = config.invalid || null; + /** + * @access private + */ + + this.isLuxonInterval = true; + } + /** + * Create an invalid Interval. + * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Interval} + */ + + + Interval.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidIntervalError(invalid); + } else { + return new Interval({ + invalid: invalid + }); + } + } + /** + * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end. + * @param {DateTime|Date|Object} start + * @param {DateTime|Date|Object} end + * @return {Interval} + */ + ; + + Interval.fromDateTimes = function fromDateTimes(start, end) { + var builtStart = friendlyDateTime(start), + builtEnd = friendlyDateTime(end); + var validateError = validateStartEnd(builtStart, builtEnd); + + if (validateError == null) { + return new Interval({ + start: builtStart, + end: builtEnd + }); + } else { + return validateError; + } + } + /** + * Create an Interval from a start DateTime and a Duration to extend to. + * @param {DateTime|Date|Object} start + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + ; + + Interval.after = function after(start, duration) { + var dur = friendlyDuration(duration), + dt = friendlyDateTime(start); + return Interval.fromDateTimes(dt, dt.plus(dur)); + } + /** + * Create an Interval from an end DateTime and a Duration to extend backwards to. + * @param {DateTime|Date|Object} end + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + ; + + Interval.before = function before(end, duration) { + var dur = friendlyDuration(duration), + dt = friendlyDateTime(end); + return Interval.fromDateTimes(dt.minus(dur), dt); + } + /** + * Create an Interval from an ISO 8601 string. + * Accepts `/`, `/`, and `/` formats. + * @param {string} text - the ISO string to parse + * @param {Object} [opts] - options to pass {@link DateTime.fromISO} and optionally {@link Duration.fromISO} + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {Interval} + */ + ; + + Interval.fromISO = function fromISO(text, opts) { + var _split = (text || "").split("/", 2), + s = _split[0], + e = _split[1]; + + if (s && e) { + var start = DateTime.fromISO(s, opts), + end = DateTime.fromISO(e, opts); + + if (start.isValid && end.isValid) { + return Interval.fromDateTimes(start, end); + } + + if (start.isValid) { + var dur = Duration.fromISO(e, opts); + + if (dur.isValid) { + return Interval.after(start, dur); + } + } else if (end.isValid) { + var _dur = Duration.fromISO(s, opts); + + if (_dur.isValid) { + return Interval.before(end, _dur); + } + } + } + + return Interval.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + /** + * Check if an object is an Interval. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + Interval.isInterval = function isInterval(o) { + return o && o.isLuxonInterval || false; + } + /** + * Returns the start of the Interval + * @type {DateTime} + */ + ; + + var _proto = Interval.prototype; + + /** + * Returns the length of the Interval in the specified unit. + * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in. + * @return {number} + */ + _proto.length = function length(unit) { + if (unit === void 0) { + unit = "milliseconds"; + } + + return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN; + } + /** + * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part. + * Unlike {@link length} this counts sections of the calendar, not periods of time, e.g. specifying 'day' + * asks 'what dates are included in this interval?', not 'how many days long is this interval?' + * @param {string} [unit='milliseconds'] - the unit of time to count. + * @return {number} + */ + ; + + _proto.count = function count(unit) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (!this.isValid) return NaN; + var start = this.start.startOf(unit), + end = this.end.startOf(unit); + return Math.floor(end.diff(start, unit).get(unit)) + 1; + } + /** + * Returns whether this Interval's start and end are both in the same unit of time + * @param {string} unit - the unit of time to check sameness on + * @return {boolean} + */ + ; + + _proto.hasSame = function hasSame(unit) { + return this.isValid ? this.e.minus(1).hasSame(this.s, unit) : false; + } + /** + * Return whether this Interval has the same start and end DateTimes. + * @return {boolean} + */ + ; + + _proto.isEmpty = function isEmpty() { + return this.s.valueOf() === this.e.valueOf(); + } + /** + * Return whether this Interval's start is after the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.isAfter = function isAfter(dateTime) { + if (!this.isValid) return false; + return this.s > dateTime; + } + /** + * Return whether this Interval's end is before the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.isBefore = function isBefore(dateTime) { + if (!this.isValid) return false; + return this.e <= dateTime; + } + /** + * Return whether this Interval contains the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.contains = function contains(dateTime) { + if (!this.isValid) return false; + return this.s <= dateTime && this.e > dateTime; + } + /** + * "Sets" the start and/or end dates. Returns a newly-constructed Interval. + * @param {Object} values - the values to set + * @param {DateTime} values.start - the starting DateTime + * @param {DateTime} values.end - the ending DateTime + * @return {Interval} + */ + ; + + _proto.set = function set(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + start = _ref.start, + end = _ref.end; + + if (!this.isValid) return this; + return Interval.fromDateTimes(start || this.s, end || this.e); + } + /** + * Split this Interval at each of the specified DateTimes + * @param {...[DateTime]} dateTimes - the unit of time to count. + * @return {[Interval]} + */ + ; + + _proto.splitAt = function splitAt() { + var _this = this; + + if (!this.isValid) return []; + + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + + var sorted = dateTimes.map(friendlyDateTime).filter(function (d) { + return _this.contains(d); + }).sort(), + results = []; + var s = this.s, + i = 0; + + while (s < this.e) { + var added = sorted[i] || this.e, + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + i += 1; + } + + return results; + } + /** + * Split this Interval into smaller Intervals, each of the specified length. + * Left over time is grouped into a smaller interval + * @param {Duration|Object|number} duration - The length of each resulting interval. + * @return {[Interval]} + */ + ; + + _proto.splitBy = function splitBy(duration) { + var dur = friendlyDuration(duration); + + if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { + return []; + } + + var s = this.s, + added, + next; + var results = []; + + while (s < this.e) { + added = s.plus(dur); + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + } + + return results; + } + /** + * Split this Interval into the specified number of smaller intervals. + * @param {number} numberOfParts - The number of Intervals to divide the Interval into. + * @return {[Interval]} + */ + ; + + _proto.divideEqually = function divideEqually(numberOfParts) { + if (!this.isValid) return []; + return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); + } + /** + * Return whether this Interval overlaps with the specified Interval + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.overlaps = function overlaps(other) { + return this.e > other.s && this.s < other.e; + } + /** + * Return whether this Interval's end is adjacent to the specified Interval's start. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.abutsStart = function abutsStart(other) { + if (!this.isValid) return false; + return +this.e === +other.s; + } + /** + * Return whether this Interval's start is adjacent to the specified Interval's end. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.abutsEnd = function abutsEnd(other) { + if (!this.isValid) return false; + return +other.e === +this.s; + } + /** + * Return whether this Interval engulfs the start and end of the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.engulfs = function engulfs(other) { + if (!this.isValid) return false; + return this.s <= other.s && this.e >= other.e; + } + /** + * Return whether this Interval has the same start and end as the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + return this.s.equals(other.s) && this.e.equals(other.e); + } + /** + * Return an Interval representing the intersection of this Interval and the specified Interval. + * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals. + * Returns null if the intersection is empty, meaning, the intervals don't intersect. + * @param {Interval} other + * @return {Interval} + */ + ; + + _proto.intersection = function intersection(other) { + if (!this.isValid) return this; + var s = this.s > other.s ? this.s : other.s, + e = this.e < other.e ? this.e : other.e; + + if (s > e) { + return null; + } else { + return Interval.fromDateTimes(s, e); + } + } + /** + * Return an Interval representing the union of this Interval and the specified Interval. + * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals. + * @param {Interval} other + * @return {Interval} + */ + ; + + _proto.union = function union(other) { + if (!this.isValid) return this; + var s = this.s < other.s ? this.s : other.s, + e = this.e > other.e ? this.e : other.e; + return Interval.fromDateTimes(s, e); + } + /** + * Merge an array of Intervals into a equivalent minimal set of Intervals. + * Combines overlapping and adjacent Intervals. + * @param {[Interval]} intervals + * @return {[Interval]} + */ + ; + + Interval.merge = function merge(intervals) { + var _intervals$sort$reduc = intervals.sort(function (a, b) { + return a.s - b.s; + }).reduce(function (_ref2, item) { + var sofar = _ref2[0], + current = _ref2[1]; + + if (!current) { + return [sofar, item]; + } else if (current.overlaps(item) || current.abutsStart(item)) { + return [sofar, current.union(item)]; + } else { + return [sofar.concat([current]), item]; + } + }, [[], null]), + found = _intervals$sort$reduc[0], + final = _intervals$sort$reduc[1]; + + if (final) { + found.push(final); + } + + return found; + } + /** + * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals. + * @param {[Interval]} intervals + * @return {[Interval]} + */ + ; + + Interval.xor = function xor(intervals) { + var _Array$prototype; + + var start = null, + currentCount = 0; + + var results = [], + ends = intervals.map(function (i) { + return [{ + time: i.s, + type: "s" + }, { + time: i.e, + type: "e" + }]; + }), + flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends), + arr = flattened.sort(function (a, b) { + return a.time - b.time; + }); + + for (var _iterator = _createForOfIteratorHelperLoose(arr), _step; !(_step = _iterator()).done;) { + var i = _step.value; + currentCount += i.type === "s" ? 1 : -1; + + if (currentCount === 1) { + start = i.time; + } else { + if (start && +start !== +i.time) { + results.push(Interval.fromDateTimes(start, i.time)); + } + + start = null; + } + } + + return Interval.merge(results); + } + /** + * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. + * @param {...Interval} intervals + * @return {[Interval]} + */ + ; + + _proto.difference = function difference() { + var _this2 = this; + + for (var _len2 = arguments.length, intervals = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + intervals[_key2] = arguments[_key2]; + } + + return Interval.xor([this].concat(intervals)).map(function (i) { + return _this2.intersection(i); + }).filter(function (i) { + return i && !i.isEmpty(); + }); + } + /** + * Returns a string representation of this Interval appropriate for debugging. + * @return {string} + */ + ; + + _proto.toString = function toString() { + if (!this.isValid) return INVALID$1; + return "[" + this.s.toISO() + " \u2013 " + this.e.toISO() + ")"; + } + /** + * Returns an ISO 8601-compliant string representation of this Interval. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime.toISO} + * @return {string} + */ + ; + + _proto.toISO = function toISO(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISO(opts) + "/" + this.e.toISO(opts); + } + /** + * Returns an ISO 8601-compliant string representation of date of this Interval. + * The time components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {string} + */ + ; + + _proto.toISODate = function toISODate() { + if (!this.isValid) return INVALID$1; + return this.s.toISODate() + "/" + this.e.toISODate(); + } + /** + * Returns an ISO 8601-compliant string representation of time of this Interval. + * The date components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime.toISO} + * @return {string} + */ + ; + + _proto.toISOTime = function toISOTime(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISOTime(opts) + "/" + this.e.toISOTime(opts); + } + /** + * Returns a string representation of this Interval formatted according to the specified format string. + * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details. + * @param {Object} opts - options + * @param {string} [opts.separator = ' – '] - a separator to place between the start and end representations + * @return {string} + */ + ; + + _proto.toFormat = function toFormat(dateFormat, _temp2) { + var _ref3 = _temp2 === void 0 ? {} : _temp2, + _ref3$separator = _ref3.separator, + separator = _ref3$separator === void 0 ? " – " : _ref3$separator; + + if (!this.isValid) return INVALID$1; + return "" + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat); + } + /** + * Return a Duration representing the time spanned by this interval. + * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 } + * @return {Duration} + */ + ; + + _proto.toDuration = function toDuration(unit, opts) { + if (!this.isValid) { + return Duration.invalid(this.invalidReason); + } + + return this.e.diff(this.s, unit, opts); + } + /** + * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes + * @param {function} mapFn + * @return {Interval} + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC()) + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) + */ + ; + + _proto.mapEndpoints = function mapEndpoints(mapFn) { + return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + }; + + _createClass(Interval, [{ + key: "start", + get: function get() { + return this.isValid ? this.s : null; + } + /** + * Returns the end of the Interval + * @type {DateTime} + */ + + }, { + key: "end", + get: function get() { + return this.isValid ? this.e : null; + } + /** + * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'. + * @type {boolean} + */ + + }, { + key: "isValid", + get: function get() { + return this.invalidReason === null; + } + /** + * Returns an error code if this Interval is invalid, or null if the Interval is valid + * @type {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this Interval became invalid, or null if the Interval is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + + return Interval; + }(); + + /** + * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment. + */ + + var Info = /*#__PURE__*/function () { + function Info() {} + + /** + * Return whether the specified zone contains a DST. + * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone. + * @return {boolean} + */ + Info.hasDST = function hasDST(zone) { + if (zone === void 0) { + zone = Settings.defaultZone; + } + + var proto = DateTime.local().setZone(zone).set({ + month: 12 + }); + return !zone.universal && proto.offset !== proto.set({ + month: 6 + }).offset; + } + /** + * Return whether the specified zone is a valid IANA specifier. + * @param {string} zone - Zone to check + * @return {boolean} + */ + ; + + Info.isValidIANAZone = function isValidIANAZone(zone) { + return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone); + } + /** + * Converts the input into a {@link Zone} instance. + * + * * If `input` is already a Zone instance, it is returned unchanged. + * * If `input` is a string containing a valid time zone name, a Zone instance + * with that name is returned. + * * If `input` is a string that doesn't refer to a known time zone, a Zone + * instance with {@link Zone.isValid} == false is returned. + * * If `input is a number, a Zone instance with the specified fixed offset + * in minutes is returned. + * * If `input` is `null` or `undefined`, the default zone is returned. + * @param {string|Zone|number} [input] - the value to be converted + * @return {Zone} + */ + ; + + Info.normalizeZone = function normalizeZone$1(input) { + return normalizeZone(input, Settings.defaultZone); + } + /** + * Return an array of standalone month names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @example Info.months()[0] //=> 'January' + * @example Info.months('short')[0] //=> 'Jan' + * @example Info.months('numeric')[0] //=> '1' + * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.' + * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١' + * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I' + * @return {[string]} + */ + ; + + Info.months = function months(length, _temp) { + if (length === void 0) { + length = "long"; + } + + var _ref = _temp === void 0 ? {} : _temp, + _ref$locale = _ref.locale, + locale = _ref$locale === void 0 ? null : _ref$locale, + _ref$numberingSystem = _ref.numberingSystem, + numberingSystem = _ref$numberingSystem === void 0 ? null : _ref$numberingSystem, + _ref$outputCalendar = _ref.outputCalendar, + outputCalendar = _ref$outputCalendar === void 0 ? "gregory" : _ref$outputCalendar; + + return Locale.create(locale, numberingSystem, outputCalendar).months(length); + } + /** + * Return an array of format month names. + * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that + * changes the string. + * See {@link months} + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @return {[string]} + */ + ; + + Info.monthsFormat = function monthsFormat(length, _temp2) { + if (length === void 0) { + length = "long"; + } + + var _ref2 = _temp2 === void 0 ? {} : _temp2, + _ref2$locale = _ref2.locale, + locale = _ref2$locale === void 0 ? null : _ref2$locale, + _ref2$numberingSystem = _ref2.numberingSystem, + numberingSystem = _ref2$numberingSystem === void 0 ? null : _ref2$numberingSystem, + _ref2$outputCalendar = _ref2.outputCalendar, + outputCalendar = _ref2$outputCalendar === void 0 ? "gregory" : _ref2$outputCalendar; + + return Locale.create(locale, numberingSystem, outputCalendar).months(length, true); + } + /** + * Return an array of standalone week names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @example Info.weekdays()[0] //=> 'Monday' + * @example Info.weekdays('short')[0] //=> 'Mon' + * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.' + * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين' + * @return {[string]} + */ + ; + + Info.weekdays = function weekdays(length, _temp3) { + if (length === void 0) { + length = "long"; + } + + var _ref3 = _temp3 === void 0 ? {} : _temp3, + _ref3$locale = _ref3.locale, + locale = _ref3$locale === void 0 ? null : _ref3$locale, + _ref3$numberingSystem = _ref3.numberingSystem, + numberingSystem = _ref3$numberingSystem === void 0 ? null : _ref3$numberingSystem; + + return Locale.create(locale, numberingSystem, null).weekdays(length); + } + /** + * Return an array of format week names. + * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that + * changes the string. + * See {@link weekdays} + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale=null] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @return {[string]} + */ + ; + + Info.weekdaysFormat = function weekdaysFormat(length, _temp4) { + if (length === void 0) { + length = "long"; + } + + var _ref4 = _temp4 === void 0 ? {} : _temp4, + _ref4$locale = _ref4.locale, + locale = _ref4$locale === void 0 ? null : _ref4$locale, + _ref4$numberingSystem = _ref4.numberingSystem, + numberingSystem = _ref4$numberingSystem === void 0 ? null : _ref4$numberingSystem; + + return Locale.create(locale, numberingSystem, null).weekdays(length, true); + } + /** + * Return an array of meridiems. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.meridiems() //=> [ 'AM', 'PM' ] + * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ] + * @return {[string]} + */ + ; + + Info.meridiems = function meridiems(_temp5) { + var _ref5 = _temp5 === void 0 ? {} : _temp5, + _ref5$locale = _ref5.locale, + locale = _ref5$locale === void 0 ? null : _ref5$locale; + + return Locale.create(locale).meridiems(); + } + /** + * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian. + * @param {string} [length='short'] - the length of the era representation, such as "short" or "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.eras() //=> [ 'BC', 'AD' ] + * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ] + * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ] + * @return {[string]} + */ + ; + + Info.eras = function eras(length, _temp6) { + if (length === void 0) { + length = "short"; + } + + var _ref6 = _temp6 === void 0 ? {} : _temp6, + _ref6$locale = _ref6.locale, + locale = _ref6$locale === void 0 ? null : _ref6$locale; + + return Locale.create(locale, null, "gregory").eras(length); + } + /** + * Return the set of available features in this environment. + * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case. + * Keys: + * * `zones`: whether this environment supports IANA timezones + * * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing + * * `intl`: whether this environment supports general internationalization + * * `relative`: whether this environment supports relative time formatting + * @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false } + * @return {Object} + */ + ; + + Info.features = function features() { + var intl = false, + intlTokens = false, + zones = false, + relative = false; + + if (hasIntl()) { + intl = true; + intlTokens = hasFormatToParts(); + relative = hasRelative(); + + try { + zones = new Intl.DateTimeFormat("en", { + timeZone: "America/New_York" + }).resolvedOptions().timeZone === "America/New_York"; + } catch (e) { + zones = false; + } + } + + return { + intl: intl, + intlTokens: intlTokens, + zones: zones, + relative: relative + }; + }; + + return Info; + }(); + + function dayDiff(earlier, later) { + var utcDayStart = function utcDayStart(dt) { + return dt.toUTC(0, { + keepLocalTime: true + }).startOf("day").valueOf(); + }, + ms = utcDayStart(later) - utcDayStart(earlier); + + return Math.floor(Duration.fromMillis(ms).as("days")); + } + + function highOrderDiffs(cursor, later, units) { + var differs = [["years", function (a, b) { + return b.year - a.year; + }], ["months", function (a, b) { + return b.month - a.month + (b.year - a.year) * 12; + }], ["weeks", function (a, b) { + var days = dayDiff(a, b); + return (days - days % 7) / 7; + }], ["days", dayDiff]]; + var results = {}; + var lowestOrder, highWater; + + for (var _i = 0, _differs = differs; _i < _differs.length; _i++) { + var _differs$_i = _differs[_i], + unit = _differs$_i[0], + differ = _differs$_i[1]; + + if (units.indexOf(unit) >= 0) { + var _cursor$plus; + + lowestOrder = unit; + var delta = differ(cursor, later); + highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[unit] = delta, _cursor$plus)); + + if (highWater > later) { + var _cursor$plus2; + + cursor = cursor.plus((_cursor$plus2 = {}, _cursor$plus2[unit] = delta - 1, _cursor$plus2)); + delta -= 1; + } else { + cursor = highWater; + } + + results[unit] = delta; + } + } + + return [cursor, results, highWater, lowestOrder]; + } + + function _diff (earlier, later, units, opts) { + var _highOrderDiffs = highOrderDiffs(earlier, later, units), + cursor = _highOrderDiffs[0], + results = _highOrderDiffs[1], + highWater = _highOrderDiffs[2], + lowestOrder = _highOrderDiffs[3]; + + var remainingMillis = later - cursor; + var lowerOrderUnits = units.filter(function (u) { + return ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0; + }); + + if (lowerOrderUnits.length === 0) { + if (highWater < later) { + var _cursor$plus3; + + highWater = cursor.plus((_cursor$plus3 = {}, _cursor$plus3[lowestOrder] = 1, _cursor$plus3)); + } + + if (highWater !== cursor) { + results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); + } + } + + var duration = Duration.fromObject(Object.assign(results, opts)); + + if (lowerOrderUnits.length > 0) { + var _Duration$fromMillis; + + return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration); + } else { + return duration; + } + } + + var numberingSystems = { + arab: "[\u0660-\u0669]", + arabext: "[\u06F0-\u06F9]", + bali: "[\u1B50-\u1B59]", + beng: "[\u09E6-\u09EF]", + deva: "[\u0966-\u096F]", + fullwide: "[\uFF10-\uFF19]", + gujr: "[\u0AE6-\u0AEF]", + hanidec: "[〇|一|二|三|四|五|六|七|八|九]", + khmr: "[\u17E0-\u17E9]", + knda: "[\u0CE6-\u0CEF]", + laoo: "[\u0ED0-\u0ED9]", + limb: "[\u1946-\u194F]", + mlym: "[\u0D66-\u0D6F]", + mong: "[\u1810-\u1819]", + mymr: "[\u1040-\u1049]", + orya: "[\u0B66-\u0B6F]", + tamldec: "[\u0BE6-\u0BEF]", + telu: "[\u0C66-\u0C6F]", + thai: "[\u0E50-\u0E59]", + tibt: "[\u0F20-\u0F29]", + latn: "\\d" + }; + var numberingSystemsUTF16 = { + arab: [1632, 1641], + arabext: [1776, 1785], + bali: [6992, 7001], + beng: [2534, 2543], + deva: [2406, 2415], + fullwide: [65296, 65303], + gujr: [2790, 2799], + khmr: [6112, 6121], + knda: [3302, 3311], + laoo: [3792, 3801], + limb: [6470, 6479], + mlym: [3430, 3439], + mong: [6160, 6169], + mymr: [4160, 4169], + orya: [2918, 2927], + tamldec: [3046, 3055], + telu: [3174, 3183], + thai: [3664, 3673], + tibt: [3872, 3881] + }; // eslint-disable-next-line + + var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); + function parseDigits(str) { + var value = parseInt(str, 10); + + if (isNaN(value)) { + value = ""; + + for (var i = 0; i < str.length; i++) { + var code = str.charCodeAt(i); + + if (str[i].search(numberingSystems.hanidec) !== -1) { + value += hanidecChars.indexOf(str[i]); + } else { + for (var key in numberingSystemsUTF16) { + var _numberingSystemsUTF = numberingSystemsUTF16[key], + min = _numberingSystemsUTF[0], + max = _numberingSystemsUTF[1]; + + if (code >= min && code <= max) { + value += code - min; + } + } + } + } + + return parseInt(value, 10); + } else { + return value; + } + } + function digitRegex(_ref, append) { + var numberingSystem = _ref.numberingSystem; + + if (append === void 0) { + append = ""; + } + + return new RegExp("" + numberingSystems[numberingSystem || "latn"] + append); + } + + var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; + + function intUnit(regex, post) { + if (post === void 0) { + post = function post(i) { + return i; + }; + } + + return { + regex: regex, + deser: function deser(_ref) { + var s = _ref[0]; + return post(parseDigits(s)); + } + }; + } + + function fixListRegex(s) { + // make dots optional and also make them literal + return s.replace(/\./, "\\.?"); + } + + function stripInsensitivities(s) { + return s.replace(/\./, "").toLowerCase(); + } + + function oneOf(strings, startIndex) { + if (strings === null) { + return null; + } else { + return { + regex: RegExp(strings.map(fixListRegex).join("|")), + deser: function deser(_ref2) { + var s = _ref2[0]; + return strings.findIndex(function (i) { + return stripInsensitivities(s) === stripInsensitivities(i); + }) + startIndex; + } + }; + } + } + + function offset(regex, groups) { + return { + regex: regex, + deser: function deser(_ref3) { + var h = _ref3[1], + m = _ref3[2]; + return signedOffset(h, m); + }, + groups: groups + }; + } + + function simple(regex) { + return { + regex: regex, + deser: function deser(_ref4) { + var s = _ref4[0]; + return s; + } + }; + } + + function escapeToken(value) { + // eslint-disable-next-line no-useless-escape + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); + } + + function unitForToken(token, loc) { + var one = digitRegex(loc), + two = digitRegex(loc, "{2}"), + three = digitRegex(loc, "{3}"), + four = digitRegex(loc, "{4}"), + six = digitRegex(loc, "{6}"), + oneOrTwo = digitRegex(loc, "{1,2}"), + oneToThree = digitRegex(loc, "{1,3}"), + oneToSix = digitRegex(loc, "{1,6}"), + oneToNine = digitRegex(loc, "{1,9}"), + twoToFour = digitRegex(loc, "{2,4}"), + fourToSix = digitRegex(loc, "{4,6}"), + literal = function literal(t) { + return { + regex: RegExp(escapeToken(t.val)), + deser: function deser(_ref5) { + var s = _ref5[0]; + return s; + }, + literal: true + }; + }, + unitate = function unitate(t) { + if (token.literal) { + return literal(t); + } + + switch (t.val) { + // era + case "G": + return oneOf(loc.eras("short", false), 0); + + case "GG": + return oneOf(loc.eras("long", false), 0); + // years + + case "y": + return intUnit(oneToSix); + + case "yy": + return intUnit(twoToFour, untruncateYear); + + case "yyyy": + return intUnit(four); + + case "yyyyy": + return intUnit(fourToSix); + + case "yyyyyy": + return intUnit(six); + // months + + case "M": + return intUnit(oneOrTwo); + + case "MM": + return intUnit(two); + + case "MMM": + return oneOf(loc.months("short", true, false), 1); + + case "MMMM": + return oneOf(loc.months("long", true, false), 1); + + case "L": + return intUnit(oneOrTwo); + + case "LL": + return intUnit(two); + + case "LLL": + return oneOf(loc.months("short", false, false), 1); + + case "LLLL": + return oneOf(loc.months("long", false, false), 1); + // dates + + case "d": + return intUnit(oneOrTwo); + + case "dd": + return intUnit(two); + // ordinals + + case "o": + return intUnit(oneToThree); + + case "ooo": + return intUnit(three); + // time + + case "HH": + return intUnit(two); + + case "H": + return intUnit(oneOrTwo); + + case "hh": + return intUnit(two); + + case "h": + return intUnit(oneOrTwo); + + case "mm": + return intUnit(two); + + case "m": + return intUnit(oneOrTwo); + + case "q": + return intUnit(oneOrTwo); + + case "qq": + return intUnit(two); + + case "s": + return intUnit(oneOrTwo); + + case "ss": + return intUnit(two); + + case "S": + return intUnit(oneToThree); + + case "SSS": + return intUnit(three); + + case "u": + return simple(oneToNine); + // meridiem + + case "a": + return oneOf(loc.meridiems(), 0); + // weekYear (k) + + case "kkkk": + return intUnit(four); + + case "kk": + return intUnit(twoToFour, untruncateYear); + // weekNumber (W) + + case "W": + return intUnit(oneOrTwo); + + case "WW": + return intUnit(two); + // weekdays + + case "E": + case "c": + return intUnit(one); + + case "EEE": + return oneOf(loc.weekdays("short", false, false), 1); + + case "EEEE": + return oneOf(loc.weekdays("long", false, false), 1); + + case "ccc": + return oneOf(loc.weekdays("short", true, false), 1); + + case "cccc": + return oneOf(loc.weekdays("long", true, false), 1); + // offset/zone + + case "Z": + case "ZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(?::(" + two.source + "))?"), 2); + + case "ZZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(" + two.source + ")?"), 2); + // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing + // because we don't have any way to figure out what they are + + case "z": + return simple(/[a-z_+-/]{1,256}?/i); + + default: + return literal(t); + } + }; + + var unit = unitate(token) || { + invalidReason: MISSING_FTP + }; + unit.token = token; + return unit; + } + + var partTypeStyleToTokenVal = { + year: { + "2-digit": "yy", + numeric: "yyyyy" + }, + month: { + numeric: "M", + "2-digit": "MM", + short: "MMM", + long: "MMMM" + }, + day: { + numeric: "d", + "2-digit": "dd" + }, + weekday: { + short: "EEE", + long: "EEEE" + }, + dayperiod: "a", + dayPeriod: "a", + hour: { + numeric: "h", + "2-digit": "hh" + }, + minute: { + numeric: "m", + "2-digit": "mm" + }, + second: { + numeric: "s", + "2-digit": "ss" + } + }; + + function tokenForPart(part, locale, formatOpts) { + var type = part.type, + value = part.value; + + if (type === "literal") { + return { + literal: true, + val: value + }; + } + + var style = formatOpts[type]; + var val = partTypeStyleToTokenVal[type]; + + if (typeof val === "object") { + val = val[style]; + } + + if (val) { + return { + literal: false, + val: val + }; + } + + return undefined; + } + + function buildRegex(units) { + var re = units.map(function (u) { + return u.regex; + }).reduce(function (f, r) { + return f + "(" + r.source + ")"; + }, ""); + return ["^" + re + "$", units]; + } + + function match(input, regex, handlers) { + var matches = input.match(regex); + + if (matches) { + var all = {}; + var matchIndex = 1; + + for (var i in handlers) { + if (hasOwnProperty(handlers, i)) { + var h = handlers[i], + groups = h.groups ? h.groups + 1 : 1; + + if (!h.literal && h.token) { + all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); + } + + matchIndex += groups; + } + } + + return [matches, all]; + } else { + return [matches, {}]; + } + } + + function dateTimeFromMatches(matches) { + var toField = function toField(token) { + switch (token) { + case "S": + return "millisecond"; + + case "s": + return "second"; + + case "m": + return "minute"; + + case "h": + case "H": + return "hour"; + + case "d": + return "day"; + + case "o": + return "ordinal"; + + case "L": + case "M": + return "month"; + + case "y": + return "year"; + + case "E": + case "c": + return "weekday"; + + case "W": + return "weekNumber"; + + case "k": + return "weekYear"; + + case "q": + return "quarter"; + + default: + return null; + } + }; + + var zone; + + if (!isUndefined(matches.Z)) { + zone = new FixedOffsetZone(matches.Z); + } else if (!isUndefined(matches.z)) { + zone = IANAZone.create(matches.z); + } else { + zone = null; + } + + if (!isUndefined(matches.q)) { + matches.M = (matches.q - 1) * 3 + 1; + } + + if (!isUndefined(matches.h)) { + if (matches.h < 12 && matches.a === 1) { + matches.h += 12; + } else if (matches.h === 12 && matches.a === 0) { + matches.h = 0; + } + } + + if (matches.G === 0 && matches.y) { + matches.y = -matches.y; + } + + if (!isUndefined(matches.u)) { + matches.S = parseMillis(matches.u); + } + + var vals = Object.keys(matches).reduce(function (r, k) { + var f = toField(k); + + if (f) { + r[f] = matches[k]; + } + + return r; + }, {}); + return [vals, zone]; + } + + var dummyDateTimeCache = null; + + function getDummyDateTime() { + if (!dummyDateTimeCache) { + dummyDateTimeCache = DateTime.fromMillis(1555555555555); + } + + return dummyDateTimeCache; + } + + function maybeExpandMacroToken(token, locale) { + if (token.literal) { + return token; + } + + var formatOpts = Formatter.macroTokenToFormatOpts(token.val); + + if (!formatOpts) { + return token; + } + + var formatter = Formatter.create(locale, formatOpts); + var parts = formatter.formatDateTimeParts(getDummyDateTime()); + var tokens = parts.map(function (p) { + return tokenForPart(p, locale, formatOpts); + }); + + if (tokens.includes(undefined)) { + return token; + } + + return tokens; + } + + function expandMacroTokens(tokens, locale) { + var _Array$prototype; + + return (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, tokens.map(function (t) { + return maybeExpandMacroToken(t, locale); + })); + } + /** + * @private + */ + + + function explainFromTokens(locale, input, format) { + var tokens = expandMacroTokens(Formatter.parseFormat(format), locale), + units = tokens.map(function (t) { + return unitForToken(t, locale); + }), + disqualifyingUnit = units.find(function (t) { + return t.invalidReason; + }); + + if (disqualifyingUnit) { + return { + input: input, + tokens: tokens, + invalidReason: disqualifyingUnit.invalidReason + }; + } else { + var _buildRegex = buildRegex(units), + regexString = _buildRegex[0], + handlers = _buildRegex[1], + regex = RegExp(regexString, "i"), + _match = match(input, regex, handlers), + rawMatches = _match[0], + matches = _match[1], + _ref6 = matches ? dateTimeFromMatches(matches) : [null, null], + result = _ref6[0], + zone = _ref6[1]; + + if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { + throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format"); + } + + return { + input: input, + tokens: tokens, + regex: regex, + rawMatches: rawMatches, + matches: matches, + result: result, + zone: zone + }; + } + } + function parseFromTokens(locale, input, format) { + var _explainFromTokens = explainFromTokens(locale, input, format), + result = _explainFromTokens.result, + zone = _explainFromTokens.zone, + invalidReason = _explainFromTokens.invalidReason; + + return [result, zone, invalidReason]; + } + + var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], + leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; + + function unitOutOfRange(unit, value) { + return new Invalid("unit out of range", "you specified " + value + " (of type " + typeof value + ") as a " + unit + ", which is invalid"); + } + + function dayOfWeek(year, month, day) { + var js = new Date(Date.UTC(year, month - 1, day)).getUTCDay(); + return js === 0 ? 7 : js; + } + + function computeOrdinal(year, month, day) { + return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; + } + + function uncomputeOrdinal(year, ordinal) { + var table = isLeapYear(year) ? leapLadder : nonLeapLadder, + month0 = table.findIndex(function (i) { + return i < ordinal; + }), + day = ordinal - table[month0]; + return { + month: month0 + 1, + day: day + }; + } + /** + * @private + */ + + + function gregorianToWeek(gregObj) { + var year = gregObj.year, + month = gregObj.month, + day = gregObj.day, + ordinal = computeOrdinal(year, month, day), + weekday = dayOfWeek(year, month, day); + var weekNumber = Math.floor((ordinal - weekday + 10) / 7), + weekYear; + + if (weekNumber < 1) { + weekYear = year - 1; + weekNumber = weeksInWeekYear(weekYear); + } else if (weekNumber > weeksInWeekYear(year)) { + weekYear = year + 1; + weekNumber = 1; + } else { + weekYear = year; + } + + return Object.assign({ + weekYear: weekYear, + weekNumber: weekNumber, + weekday: weekday + }, timeObject(gregObj)); + } + function weekToGregorian(weekData) { + var weekYear = weekData.weekYear, + weekNumber = weekData.weekNumber, + weekday = weekData.weekday, + weekdayOfJan4 = dayOfWeek(weekYear, 1, 4), + yearInDays = daysInYear(weekYear); + var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3, + year; + + if (ordinal < 1) { + year = weekYear - 1; + ordinal += daysInYear(year); + } else if (ordinal > yearInDays) { + year = weekYear + 1; + ordinal -= daysInYear(weekYear); + } else { + year = weekYear; + } + + var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal.month, + day = _uncomputeOrdinal.day; + + return Object.assign({ + year: year, + month: month, + day: day + }, timeObject(weekData)); + } + function gregorianToOrdinal(gregData) { + var year = gregData.year, + month = gregData.month, + day = gregData.day, + ordinal = computeOrdinal(year, month, day); + return Object.assign({ + year: year, + ordinal: ordinal + }, timeObject(gregData)); + } + function ordinalToGregorian(ordinalData) { + var year = ordinalData.year, + ordinal = ordinalData.ordinal, + _uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal2.month, + day = _uncomputeOrdinal2.day; + + return Object.assign({ + year: year, + month: month, + day: day + }, timeObject(ordinalData)); + } + function hasInvalidWeekData(obj) { + var validYear = isInteger(obj.weekYear), + validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)), + validWeekday = integerBetween(obj.weekday, 1, 7); + + if (!validYear) { + return unitOutOfRange("weekYear", obj.weekYear); + } else if (!validWeek) { + return unitOutOfRange("week", obj.week); + } else if (!validWeekday) { + return unitOutOfRange("weekday", obj.weekday); + } else return false; + } + function hasInvalidOrdinalData(obj) { + var validYear = isInteger(obj.year), + validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validOrdinal) { + return unitOutOfRange("ordinal", obj.ordinal); + } else return false; + } + function hasInvalidGregorianData(obj) { + var validYear = isInteger(obj.year), + validMonth = integerBetween(obj.month, 1, 12), + validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validMonth) { + return unitOutOfRange("month", obj.month); + } else if (!validDay) { + return unitOutOfRange("day", obj.day); + } else return false; + } + function hasInvalidTimeData(obj) { + var hour = obj.hour, + minute = obj.minute, + second = obj.second, + millisecond = obj.millisecond; + var validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0, + validMinute = integerBetween(minute, 0, 59), + validSecond = integerBetween(second, 0, 59), + validMillisecond = integerBetween(millisecond, 0, 999); + + if (!validHour) { + return unitOutOfRange("hour", hour); + } else if (!validMinute) { + return unitOutOfRange("minute", minute); + } else if (!validSecond) { + return unitOutOfRange("second", second); + } else if (!validMillisecond) { + return unitOutOfRange("millisecond", millisecond); + } else return false; + } + + var INVALID$2 = "Invalid DateTime"; + var MAX_DATE = 8.64e15; + + function unsupportedZone(zone) { + return new Invalid("unsupported zone", "the zone \"" + zone.name + "\" is not supported"); + } // we cache week data on the DT object and this intermediates the cache + + + function possiblyCachedWeekData(dt) { + if (dt.weekData === null) { + dt.weekData = gregorianToWeek(dt.c); + } + + return dt.weekData; + } // clone really means, "make a new object with these modifications". all "setters" really use this + // to create a new object while only changing some of the properties + + + function clone$1(inst, alts) { + var current = { + ts: inst.ts, + zone: inst.zone, + c: inst.c, + o: inst.o, + loc: inst.loc, + invalid: inst.invalid + }; + return new DateTime(Object.assign({}, current, alts, { + old: current + })); + } // find the right offset a given local time. The o input is our guess, which determines which + // offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) + + + function fixOffset(localTS, o, tz) { + // Our UTC time is just a guess because our offset is just a guess + var utcGuess = localTS - o * 60 * 1000; // Test whether the zone matches the offset for this ts + + var o2 = tz.offset(utcGuess); // If so, offset didn't change and we're done + + if (o === o2) { + return [utcGuess, o]; + } // If not, change the ts by the difference in the offset + + + utcGuess -= (o2 - o) * 60 * 1000; // If that gives us the local time we want, we're done + + var o3 = tz.offset(utcGuess); + + if (o2 === o3) { + return [utcGuess, o2]; + } // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time + + + return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; + } // convert an epoch timestamp into a calendar object with the given offset + + + function tsToObj(ts, offset) { + ts += offset * 60 * 1000; + var d = new Date(ts); + return { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate(), + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds() + }; + } // convert a calendar object to a epoch timestamp + + + function objToTS(obj, offset, zone) { + return fixOffset(objToLocalTS(obj), offset, zone); + } // create a new DT instance by adding a duration, adjusting for DSTs + + + function adjustTime(inst, dur) { + var _dur; + + var keys = Object.keys(dur.values); + + if (keys.indexOf("milliseconds") === -1) { + keys.push("milliseconds"); + } + + dur = (_dur = dur).shiftTo.apply(_dur, keys); + var oPre = inst.o, + year = inst.c.year + dur.years, + month = inst.c.month + dur.months + dur.quarters * 3, + c = Object.assign({}, inst.c, { + year: year, + month: month, + day: Math.min(inst.c.day, daysInMonth(year, month)) + dur.days + dur.weeks * 7 + }), + millisToAdd = Duration.fromObject({ + hours: dur.hours, + minutes: dur.minutes, + seconds: dur.seconds, + milliseconds: dur.milliseconds + }).as("milliseconds"), + localTS = objToLocalTS(c); + + var _fixOffset = fixOffset(localTS, oPre, inst.zone), + ts = _fixOffset[0], + o = _fixOffset[1]; + + if (millisToAdd !== 0) { + ts += millisToAdd; // that could have changed the offset by going over a DST, but we want to keep the ts the same + + o = inst.zone.offset(ts); + } + + return { + ts: ts, + o: o + }; + } // helper useful in turning the results of parsing into real dates + // by handling the zone options + + + function parseDataToDateTime(parsed, parsedZone, opts, format, text) { + var setZone = opts.setZone, + zone = opts.zone; + + if (parsed && Object.keys(parsed).length !== 0) { + var interpretationZone = parsedZone || zone, + inst = DateTime.fromObject(Object.assign(parsed, opts, { + zone: interpretationZone, + // setZone is a valid option in the calling methods, but not in fromObject + setZone: undefined + })); + return setZone ? inst : inst.setZone(zone); + } else { + return DateTime.invalid(new Invalid("unparsable", "the input \"" + text + "\" can't be parsed as " + format)); + } + } // if you want to output a technical format (e.g. RFC 2822), this helper + // helps handle the details + + + function toTechFormat(dt, format, allowZ) { + if (allowZ === void 0) { + allowZ = true; + } + + return dt.isValid ? Formatter.create(Locale.create("en-US"), { + allowZ: allowZ, + forceSimple: true + }).formatDateTimeFromString(dt, format) : null; + } // technical time formats (e.g. the time part of ISO 8601), take some options + // and this commonizes their handling + + + function toTechTimeFormat(dt, _ref) { + var _ref$suppressSeconds = _ref.suppressSeconds, + suppressSeconds = _ref$suppressSeconds === void 0 ? false : _ref$suppressSeconds, + _ref$suppressMillisec = _ref.suppressMilliseconds, + suppressMilliseconds = _ref$suppressMillisec === void 0 ? false : _ref$suppressMillisec, + includeOffset = _ref.includeOffset, + _ref$includeZone = _ref.includeZone, + includeZone = _ref$includeZone === void 0 ? false : _ref$includeZone, + _ref$spaceZone = _ref.spaceZone, + spaceZone = _ref$spaceZone === void 0 ? false : _ref$spaceZone, + _ref$format = _ref.format, + format = _ref$format === void 0 ? "extended" : _ref$format; + var fmt = format === "basic" ? "HHmm" : "HH:mm"; + + if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) { + fmt += format === "basic" ? "ss" : ":ss"; + + if (!suppressMilliseconds || dt.millisecond !== 0) { + fmt += ".SSS"; + } + } + + if ((includeZone || includeOffset) && spaceZone) { + fmt += " "; + } + + if (includeZone) { + fmt += "z"; + } else if (includeOffset) { + fmt += format === "basic" ? "ZZZ" : "ZZ"; + } + + return toTechFormat(dt, fmt); + } // defaults for unspecified units in the supported calendars + + + var defaultUnitValues = { + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultWeekUnitValues = { + weekNumber: 1, + weekday: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultOrdinalUnitValues = { + ordinal: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }; // Units in the supported calendars, sorted by bigness + + var orderedUnits$1 = ["year", "month", "day", "hour", "minute", "second", "millisecond"], + orderedWeekUnits = ["weekYear", "weekNumber", "weekday", "hour", "minute", "second", "millisecond"], + orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; // standardize case and plurality in units + + function normalizeUnit(unit) { + var normalized = { + year: "year", + years: "year", + month: "month", + months: "month", + day: "day", + days: "day", + hour: "hour", + hours: "hour", + minute: "minute", + minutes: "minute", + quarter: "quarter", + quarters: "quarter", + second: "second", + seconds: "second", + millisecond: "millisecond", + milliseconds: "millisecond", + weekday: "weekday", + weekdays: "weekday", + weeknumber: "weekNumber", + weeksnumber: "weekNumber", + weeknumbers: "weekNumber", + weekyear: "weekYear", + weekyears: "weekYear", + ordinal: "ordinal" + }[unit.toLowerCase()]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } // this is a dumbed down version of fromObject() that runs about 60% faster + // but doesn't do any validation, makes a bunch of assumptions about what units + // are present, and so on. + + + function quickDT(obj, zone) { + // assume we have the higher-order units + for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits$1), _step; !(_step = _iterator()).done;) { + var u = _step.value; + + if (isUndefined(obj[u])) { + obj[u] = defaultUnitValues[u]; + } + } + + var invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); + + if (invalid) { + return DateTime.invalid(invalid); + } + + var tsNow = Settings.now(), + offsetProvis = zone.offset(tsNow), + _objToTS = objToTS(obj, offsetProvis, zone), + ts = _objToTS[0], + o = _objToTS[1]; + + return new DateTime({ + ts: ts, + zone: zone, + o: o + }); + } + + function diffRelative(start, end, opts) { + var round = isUndefined(opts.round) ? true : opts.round, + format = function format(c, unit) { + c = roundTo(c, round || opts.calendary ? 0 : 2, true); + var formatter = end.loc.clone(opts).relFormatter(opts); + return formatter.format(c, unit); + }, + differ = function differ(unit) { + if (opts.calendary) { + if (!end.hasSame(start, unit)) { + return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else return 0; + } else { + return end.diff(start, unit).get(unit); + } + }; + + if (opts.unit) { + return format(differ(opts.unit), opts.unit); + } + + for (var _iterator2 = _createForOfIteratorHelperLoose(opts.units), _step2; !(_step2 = _iterator2()).done;) { + var unit = _step2.value; + var count = differ(unit); + + if (Math.abs(count) >= 1) { + return format(count, unit); + } + } + + return format(0, opts.units[opts.units.length - 1]); + } + /** + * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. + * + * A DateTime comprises of: + * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. + * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone). + * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. + * + * Here is a brief overview of the most commonly used functionality it provides: + * + * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link local}, {@link utc}, and (most flexibly) {@link fromObject}. To create one from a standard string format, use {@link fromISO}, {@link fromHTTP}, and {@link fromRFC2822}. To create one from a custom string format, use {@link fromFormat}. To create one from a native JS date, use {@link fromJSDate}. + * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link toObject}), use the {@link year}, {@link month}, + * {@link day}, {@link hour}, {@link minute}, {@link second}, {@link millisecond} accessors. + * * **Week calendar**: For ISO week calendar attributes, see the {@link weekYear}, {@link weekNumber}, and {@link weekday} accessors. + * * **Configuration** See the {@link locale} and {@link numberingSystem} accessors. + * * **Transformation**: To transform the DateTime into other DateTimes, use {@link set}, {@link reconfigure}, {@link setZone}, {@link setLocale}, {@link plus}, {@link minus}, {@link endOf}, {@link startOf}, {@link toUTC}, and {@link toLocal}. + * * **Output**: To convert the DateTime to other representations, use the {@link toRelative}, {@link toRelativeCalendar}, {@link toJSON}, {@link toISO}, {@link toHTTP}, {@link toObject}, {@link toRFC2822}, {@link toString}, {@link toLocaleString}, {@link toFormat}, {@link toMillis} and {@link toJSDate}. + * + * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. + */ + + + var DateTime = /*#__PURE__*/function () { + /** + * @access private + */ + function DateTime(config) { + var zone = config.zone || Settings.defaultZone; + var invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null); + /** + * @access private + */ + + this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; + var c = null, + o = null; + + if (!invalid) { + var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); + + if (unchanged) { + var _ref2 = [config.old.c, config.old.o]; + c = _ref2[0]; + o = _ref2[1]; + } else { + var ot = zone.offset(this.ts); + c = tsToObj(this.ts, ot); + invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; + c = invalid ? null : c; + o = invalid ? null : ot; + } + } + /** + * @access private + */ + + + this._zone = zone; + /** + * @access private + */ + + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + + this.invalid = invalid; + /** + * @access private + */ + + this.weekData = null; + /** + * @access private + */ + + this.c = c; + /** + * @access private + */ + + this.o = o; + /** + * @access private + */ + + this.isLuxonDateTime = true; + } // CONSTRUCT + + /** + * Create a local DateTime + * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.local() //~> now + * @example DateTime.local(2017) //~> 2017-01-01T00:00:00 + * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 + * @example DateTime.local(2017, 3, 12) //~> 2017-03-12T00:00:00 + * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 + * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 + * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 + * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 + * @return {DateTime} + */ + + + DateTime.local = function local(year, month, day, hour, minute, second, millisecond) { + if (isUndefined(year)) { + return new DateTime({ + ts: Settings.now() + }); + } else { + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, Settings.defaultZone); + } + } + /** + * Create a DateTime in UTC + * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.utc() //~> now + * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z + * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z + * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z + * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765Z + * @return {DateTime} + */ + ; + + DateTime.utc = function utc(year, month, day, hour, minute, second, millisecond) { + if (isUndefined(year)) { + return new DateTime({ + ts: Settings.now(), + zone: FixedOffsetZone.utcInstance + }); + } else { + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, FixedOffsetZone.utcInstance); + } + } + /** + * Create a DateTime from a Javascript Date object. Uses the default zone. + * @param {Date} date - a Javascript Date object + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @return {DateTime} + */ + ; + + DateTime.fromJSDate = function fromJSDate(date, options) { + if (options === void 0) { + options = {}; + } + + var ts = isDate(date) ? date.valueOf() : NaN; + + if (Number.isNaN(ts)) { + return DateTime.invalid("invalid input"); + } + + var zoneToUse = normalizeZone(options.zone, Settings.defaultZone); + + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + return new DateTime({ + ts: ts, + zone: zoneToUse, + loc: Locale.fromObject(options) + }); + } + /** + * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} milliseconds - a number of milliseconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromMillis = function fromMillis(milliseconds, options) { + if (options === void 0) { + options = {}; + } + + if (!isNumber(milliseconds)) { + throw new InvalidArgumentError("fromMillis requires a numerical input, but received a " + typeof milliseconds + " with value " + milliseconds); + } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { + // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start + return DateTime.invalid("Timestamp out of range"); + } else { + return new DateTime({ + ts: milliseconds, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + /** + * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} seconds - a number of seconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromSeconds = function fromSeconds(seconds, options) { + if (options === void 0) { + options = {}; + } + + if (!isNumber(seconds)) { + throw new InvalidArgumentError("fromSeconds requires a numerical input"); + } else { + return new DateTime({ + ts: seconds * 1000, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + /** + * Create a DateTime from a Javascript object with keys like 'year' and 'hour' with reasonable defaults. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.year - a year, such as 1987 + * @param {number} obj.month - a month, 1-12 + * @param {number} obj.day - a day of the month, 1-31, depending on the month + * @param {number} obj.ordinal - day of the year, 1-365 or 366 + * @param {number} obj.weekYear - an ISO week year + * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year + * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday + * @param {number} obj.hour - hour of the day, 0-23 + * @param {number} obj.minute - minute of the hour, 0-59 + * @param {number} obj.second - second of the minute, 0-59 + * @param {number} obj.millisecond - millisecond of the second, 0-999 + * @param {string|Zone} [obj.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone() + * @param {string} [obj.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} obj.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} obj.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' + * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06 + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'utc' }), + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'local' }) + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'America/New_York' }) + * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' + * @return {DateTime} + */ + ; + + DateTime.fromObject = function fromObject(obj) { + var zoneToUse = normalizeZone(obj.zone, Settings.defaultZone); + + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + var tsNow = Settings.now(), + offsetProvis = zoneToUse.offset(tsNow), + normalized = normalizeObject(obj, normalizeUnit, ["zone", "locale", "outputCalendar", "numberingSystem"]), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber, + loc = Locale.fromObject(obj); // cases: + // just a weekday -> this week's instance of that weekday, no worries + // (gregorian data or ordinal) + (weekYear or weekNumber) -> error + // (gregorian month or day) + ordinal -> error + // otherwise just use weeks or ordinals or gregorian, depending on what's specified + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + + var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; // configure ourselves to deal with gregorian dates or week stuff + + var units, + defaultValues, + objNow = tsToObj(tsNow, offsetProvis); + + if (useWeekData) { + units = orderedWeekUnits; + defaultValues = defaultWeekUnitValues; + objNow = gregorianToWeek(objNow); + } else if (containsOrdinal) { + units = orderedOrdinalUnits; + defaultValues = defaultOrdinalUnitValues; + objNow = gregorianToOrdinal(objNow); + } else { + units = orderedUnits$1; + defaultValues = defaultUnitValues; + } // set default values for missing stuff + + + var foundFirst = false; + + for (var _iterator3 = _createForOfIteratorHelperLoose(units), _step3; !(_step3 = _iterator3()).done;) { + var u = _step3.value; + var v = normalized[u]; + + if (!isUndefined(v)) { + foundFirst = true; + } else if (foundFirst) { + normalized[u] = defaultValues[u]; + } else { + normalized[u] = objNow[u]; + } + } // make sure the values we have are in range + + + var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), + invalid = higherOrderInvalid || hasInvalidTimeData(normalized); + + if (invalid) { + return DateTime.invalid(invalid); + } // compute the actual time + + + var gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, + _objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse), + tsFinal = _objToTS2[0], + offsetFinal = _objToTS2[1], + inst = new DateTime({ + ts: tsFinal, + zone: zoneToUse, + o: offsetFinal, + loc: loc + }); // gregorian data + weekday serves only to validate + + + if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { + return DateTime.invalid("mismatched weekday", "you can't specify both a weekday of " + normalized.weekday + " and a date of " + inst.toISO()); + } + + return inst; + } + /** + * Create a DateTime from an ISO 8601 string + * @param {string} text - the ISO string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromISO('2016-05-25T09:08:34.123') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) + * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) + * @example DateTime.fromISO('2016-W05-4') + * @return {DateTime} + */ + ; + + DateTime.fromISO = function fromISO(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseISODate = parseISODate(text), + vals = _parseISODate[0], + parsedZone = _parseISODate[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); + } + /** + * Create a DateTime from an RFC 2822 string + * @param {string} text - the RFC 2822 string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') + * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') + * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z') + * @return {DateTime} + */ + ; + + DateTime.fromRFC2822 = function fromRFC2822(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseRFC2822Date = parseRFC2822Date(text), + vals = _parseRFC2822Date[0], + parsedZone = _parseRFC2822Date[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); + } + /** + * Create a DateTime from an HTTP header date + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @param {string} text - the HTTP header date + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') + * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') + * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') + * @return {DateTime} + */ + ; + + DateTime.fromHTTP = function fromHTTP(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseHTTPDate = parseHTTPDate(text), + vals = _parseHTTPDate[0], + parsedZone = _parseHTTPDate[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); + } + /** + * Create a DateTime from an input string and format string. + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @see https://moment.github.io/luxon/docs/manual/parsing.html#table-of-tokens + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see the link below for the formats) + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromFormat = function fromFormat(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + if (isUndefined(text) || isUndefined(fmt)) { + throw new InvalidArgumentError("fromFormat requires an input string and a format"); + } + + var _opts = opts, + _opts$locale = _opts.locale, + locale = _opts$locale === void 0 ? null : _opts$locale, + _opts$numberingSystem = _opts.numberingSystem, + numberingSystem = _opts$numberingSystem === void 0 ? null : _opts$numberingSystem, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }), + _parseFromTokens = parseFromTokens(localeToUse, text, fmt), + vals = _parseFromTokens[0], + parsedZone = _parseFromTokens[1], + invalid = _parseFromTokens[2]; + + if (invalid) { + return DateTime.invalid(invalid); + } else { + return parseDataToDateTime(vals, parsedZone, opts, "format " + fmt, text); + } + } + /** + * @deprecated use fromFormat instead + */ + ; + + DateTime.fromString = function fromString(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + return DateTime.fromFormat(text, fmt, opts); + } + /** + * Create a DateTime from a SQL date, time, or datetime + * Defaults to en-US if no locale has been specified, regardless of the system's locale + * @param {string} text - the string to parse + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @example DateTime.fromSQL('2017-05-15') + * @example DateTime.fromSQL('2017-05-15 09:12:34') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) + * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) + * @example DateTime.fromSQL('09:12:34.342') + * @return {DateTime} + */ + ; + + DateTime.fromSQL = function fromSQL(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseSQL = parseSQL(text), + vals = _parseSQL[0], + parsedZone = _parseSQL[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); + } + /** + * Create an invalid DateTime. + * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {DateTime} + */ + ; + + DateTime.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDateTimeError(invalid); + } else { + return new DateTime({ + invalid: invalid + }); + } + } + /** + * Check if an object is a DateTime. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + DateTime.isDateTime = function isDateTime(o) { + return o && o.isLuxonDateTime || false; + } // INFO + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example DateTime.local(2017, 7, 4).get('month'); //=> 7 + * @example DateTime.local(2017, 7, 4).get('day'); //=> 4 + * @return {number} + */ + ; + + var _proto = DateTime.prototype; + + _proto.get = function get(unit) { + return this[unit]; + } + /** + * Returns whether the DateTime is valid. Invalid DateTimes occur when: + * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 + * * The DateTime was created by an operation on another invalid date + * @type {boolean} + */ + ; + + /** + * Returns the resolved Intl options for this DateTime. + * This is useful in understanding the behavior of formatting methods + * @param {Object} opts - the same options as toLocaleString + * @return {Object} + */ + _proto.resolvedLocaleOpts = function resolvedLocaleOpts(opts) { + if (opts === void 0) { + opts = {}; + } + + var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this), + locale = _Formatter$create$res.locale, + numberingSystem = _Formatter$create$res.numberingSystem, + calendar = _Formatter$create$res.calendar; + + return { + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: calendar + }; + } // TRANSFORM + + /** + * "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime. + * + * Equivalent to {@link setZone}('utc') + * @param {number} [offset=0] - optionally, an offset from UTC in minutes + * @param {Object} [opts={}] - options to pass to `setZone()` + * @return {DateTime} + */ + ; + + _proto.toUTC = function toUTC(offset, opts) { + if (offset === void 0) { + offset = 0; + } + + if (opts === void 0) { + opts = {}; + } + + return this.setZone(FixedOffsetZone.instance(offset), opts); + } + /** + * "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime. + * + * Equivalent to `setZone('local')` + * @return {DateTime} + */ + ; + + _proto.toLocal = function toLocal() { + return this.setZone(Settings.defaultZone); + } + /** + * "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime. + * + * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link plus}. You may wish to use {@link toLocal} and {@link toUTC} which provide simple convenience wrappers for commonly used zones. + * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link Zone} class. + * @param {Object} opts - options + * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this. + * @return {DateTime} + */ + ; + + _proto.setZone = function setZone(zone, _temp) { + var _ref3 = _temp === void 0 ? {} : _temp, + _ref3$keepLocalTime = _ref3.keepLocalTime, + keepLocalTime = _ref3$keepLocalTime === void 0 ? false : _ref3$keepLocalTime, + _ref3$keepCalendarTim = _ref3.keepCalendarTime, + keepCalendarTime = _ref3$keepCalendarTim === void 0 ? false : _ref3$keepCalendarTim; + + zone = normalizeZone(zone, Settings.defaultZone); + + if (zone.equals(this.zone)) { + return this; + } else if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } else { + var newTS = this.ts; + + if (keepLocalTime || keepCalendarTime) { + var offsetGuess = zone.offset(this.ts); + var asObj = this.toObject(); + + var _objToTS3 = objToTS(asObj, offsetGuess, zone); + + newTS = _objToTS3[0]; + } + + return clone$1(this, { + ts: newTS, + zone: zone + }); + } + } + /** + * "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime. + * @param {Object} properties - the properties to set + * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' }) + * @return {DateTime} + */ + ; + + _proto.reconfigure = function reconfigure(_temp2) { + var _ref4 = _temp2 === void 0 ? {} : _temp2, + locale = _ref4.locale, + numberingSystem = _ref4.numberingSystem, + outputCalendar = _ref4.outputCalendar; + + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: outputCalendar + }); + return clone$1(this, { + loc: loc + }); + } + /** + * "Set" the locale. Returns a newly-constructed DateTime. + * Just a convenient alias for reconfigure({ locale }) + * @example DateTime.local(2017, 5, 25).setLocale('en-GB') + * @return {DateTime} + */ + ; + + _proto.setLocale = function setLocale(locale) { + return this.reconfigure({ + locale: locale + }); + } + /** + * "Set" the values of specified units. Returns a newly-constructed DateTime. + * You can only set units with this method; for "setting" metadata, see {@link reconfigure} and {@link setZone}. + * @param {Object} values - a mapping of units to numbers + * @example dt.set({ year: 2017 }) + * @example dt.set({ hour: 8, minute: 30 }) + * @example dt.set({ weekday: 5 }) + * @example dt.set({ year: 2005, ordinal: 234 }) + * @return {DateTime} + */ + ; + + _proto.set = function set(values) { + if (!this.isValid) return this; + var normalized = normalizeObject(values, normalizeUnit, []), + settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday); + var mixed; + + if (settingWeekStuff) { + mixed = weekToGregorian(Object.assign(gregorianToWeek(this.c), normalized)); + } else if (!isUndefined(normalized.ordinal)) { + mixed = ordinalToGregorian(Object.assign(gregorianToOrdinal(this.c), normalized)); + } else { + mixed = Object.assign(this.toObject(), normalized); // if we didn't set the day but we ended up on an overflow date, + // use the last day of the right month + + if (isUndefined(normalized.day)) { + mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); + } + } + + var _objToTS4 = objToTS(mixed, this.o, this.zone), + ts = _objToTS4[0], + o = _objToTS4[1]; + + return clone$1(this, { + ts: ts, + o: o + }); + } + /** + * Add a period of time to this DateTime and return the resulting DateTime + * + * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @example DateTime.local().plus(123) //~> in 123 milliseconds + * @example DateTime.local().plus({ minutes: 15 }) //~> in 15 minutes + * @example DateTime.local().plus({ days: 1 }) //~> this time tomorrow + * @example DateTime.local().plus({ days: -1 }) //~> this time yesterday + * @example DateTime.local().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min + * @example DateTime.local().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min + * @return {DateTime} + */ + ; + + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration); + return clone$1(this, adjustTime(this, dur)); + } + /** + * Subtract a period of time to this DateTime and return the resulting DateTime + * See {@link plus} + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + @return {DateTime} + */ + ; + + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration).negate(); + return clone$1(this, adjustTime(this, dur)); + } + /** + * "Set" this DateTime to the beginning of a unit of time. + * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01' + * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00' + * @return {DateTime} + */ + ; + + _proto.startOf = function startOf(unit) { + if (!this.isValid) return this; + var o = {}, + normalizedUnit = Duration.normalizeUnit(unit); + + switch (normalizedUnit) { + case "years": + o.month = 1; + // falls through + + case "quarters": + case "months": + o.day = 1; + // falls through + + case "weeks": + case "days": + o.hour = 0; + // falls through + + case "hours": + o.minute = 0; + // falls through + + case "minutes": + o.second = 0; + // falls through + + case "seconds": + o.millisecond = 0; + break; + // no default, invalid units throw in normalizeUnit() + } + + if (normalizedUnit === "weeks") { + o.weekday = 1; + } + + if (normalizedUnit === "quarters") { + var q = Math.ceil(this.month / 3); + o.month = (q - 1) * 3 + 1; + } + + return this.set(o); + } + /** + * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time + * @param {string} unit - The unit to go to the end of. Can be 'year', 'month', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00' + * @return {DateTime} + */ + ; + + _proto.endOf = function endOf(unit) { + var _this$plus; + + return this.isValid ? this.plus((_this$plus = {}, _this$plus[unit] = 1, _this$plus)).startOf(unit).minus(1) : this; + } // OUTPUT + + /** + * Returns a string representation of this DateTime formatted according to the specified format string. + * **You may not want this.** See {@link toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens). + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @see https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens + * @param {string} fmt - the format string + * @param {Object} opts - opts to override the configuration options + * @example DateTime.local().toFormat('yyyy LLL dd') //=> '2017 Apr 22' + * @example DateTime.local().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22' + * @example DateTime.local().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22' + * @example DateTime.local().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes' + * @return {string} + */ + ; + + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID$2; + } + /** + * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`. + * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation + * of the DateTime in the assigned locale. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param opts {Object} - Intl.DateTimeFormat constructor options and configuration options + * @example DateTime.local().toLocaleString(); //=> 4/20/2017 + * @example DateTime.local().setLocale('en-gb').toLocaleString(); //=> '20/04/2017' + * @example DateTime.local().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017' + * @example DateTime.local().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017' + * @example DateTime.local().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM' + * @example DateTime.local().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM' + * @example DateTime.local().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20' + * @example DateTime.local().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM' + * @example DateTime.local().toLocaleString({ hour: '2-digit', minute: '2-digit', hour12: false }); //=> '11:32' + * @return {string} + */ + ; + + _proto.toLocaleString = function toLocaleString(opts) { + if (opts === void 0) { + opts = DATE_SHORT; + } + + return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTime(this) : INVALID$2; + } + /** + * Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts + * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`. + * @example DateTime.local().toLocaleParts(); //=> [ + * //=> { type: 'day', value: '25' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'month', value: '05' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'year', value: '1982' } + * //=> ] + */ + ; + + _proto.toLocaleParts = function toLocaleParts(opts) { + if (opts === void 0) { + opts = {}; + } + + return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : []; + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z' + * @example DateTime.local().toISO() //=> '2017-04-22T20:47:05.335-04:00' + * @example DateTime.local().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335' + * @example DateTime.local().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400' + * @return {string} + */ + ; + + _proto.toISO = function toISO(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) { + return null; + } + + return this.toISODate(opts) + "T" + this.toISOTime(opts); + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's date component + * @param {Object} opts - options + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25' + * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525' + * @return {string} + */ + ; + + _proto.toISODate = function toISODate(_temp3) { + var _ref5 = _temp3 === void 0 ? {} : _temp3, + _ref5$format = _ref5.format, + format = _ref5$format === void 0 ? "extended" : _ref5$format; + + var fmt = format === "basic" ? "yyyyMMdd" : "yyyy-MM-dd"; + + if (this.year > 9999) { + fmt = "+" + fmt; + } + + return toTechFormat(this, fmt); + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's week date + * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2' + * @return {string} + */ + ; + + _proto.toISOWeekDate = function toISOWeekDate() { + return toTechFormat(this, "kkkk-'W'WW-c"); + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's time component + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z' + * @return {string} + */ + ; + + _proto.toISOTime = function toISOTime(_temp4) { + var _ref6 = _temp4 === void 0 ? {} : _temp4, + _ref6$suppressMillise = _ref6.suppressMilliseconds, + suppressMilliseconds = _ref6$suppressMillise === void 0 ? false : _ref6$suppressMillise, + _ref6$suppressSeconds = _ref6.suppressSeconds, + suppressSeconds = _ref6$suppressSeconds === void 0 ? false : _ref6$suppressSeconds, + _ref6$includeOffset = _ref6.includeOffset, + includeOffset = _ref6$includeOffset === void 0 ? true : _ref6$includeOffset, + _ref6$format = _ref6.format, + format = _ref6$format === void 0 ? "extended" : _ref6$format; + + return toTechTimeFormat(this, { + suppressSeconds: suppressSeconds, + suppressMilliseconds: suppressMilliseconds, + includeOffset: includeOffset, + format: format + }); + } + /** + * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC + * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000' + * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400' + * @return {string} + */ + ; + + _proto.toRFC2822 = function toRFC2822() { + return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); + } + /** + * Returns a string representation of this DateTime appropriate for use in HTTP headers. + * Specifically, the string conforms to RFC 1123. + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT' + * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT' + * @return {string} + */ + ; + + _proto.toHTTP = function toHTTP() { + return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL Date + * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13' + * @return {string} + */ + ; + + _proto.toSQLDate = function toSQLDate() { + return toTechFormat(this, "yyyy-MM-dd"); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL Time + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @example DateTime.utc().toSQL() //=> '05:15:16.345' + * @example DateTime.local().toSQL() //=> '05:15:16.345 -04:00' + * @example DateTime.local().toSQL({ includeOffset: false }) //=> '05:15:16.345' + * @example DateTime.local().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York' + * @return {string} + */ + ; + + _proto.toSQLTime = function toSQLTime(_temp5) { + var _ref7 = _temp5 === void 0 ? {} : _temp5, + _ref7$includeOffset = _ref7.includeOffset, + includeOffset = _ref7$includeOffset === void 0 ? true : _ref7$includeOffset, + _ref7$includeZone = _ref7.includeZone, + includeZone = _ref7$includeZone === void 0 ? false : _ref7$includeZone; + + return toTechTimeFormat(this, { + includeOffset: includeOffset, + includeZone: includeZone, + spaceZone: true + }); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL DateTime + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z' + * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00' + * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000' + * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York' + * @return {string} + */ + ; + + _proto.toSQL = function toSQL(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) { + return null; + } + + return this.toSQLDate() + " " + this.toSQLTime(opts); + } + /** + * Returns a string representation of this DateTime appropriate for debugging + * @return {string} + */ + ; + + _proto.toString = function toString() { + return this.isValid ? this.toISO() : INVALID$2; + } + /** + * Returns the epoch milliseconds of this DateTime. Alias of {@link toMillis} + * @return {number} + */ + ; + + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + /** + * Returns the epoch milliseconds of this DateTime. + * @return {number} + */ + ; + + _proto.toMillis = function toMillis() { + return this.isValid ? this.ts : NaN; + } + /** + * Returns the epoch seconds of this DateTime. + * @return {number} + */ + ; + + _proto.toSeconds = function toSeconds() { + return this.isValid ? this.ts / 1000 : NaN; + } + /** + * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON. + * @return {string} + */ + ; + + _proto.toJSON = function toJSON() { + return this.toISO(); + } + /** + * Returns a BSON serializable equivalent to this DateTime. + * @return {Date} + */ + ; + + _proto.toBSON = function toBSON() { + return this.toJSDate(); + } + /** + * Returns a Javascript object with this DateTime's year, month, day, and so on. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example DateTime.local().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 } + * @return {Object} + */ + ; + + _proto.toObject = function toObject(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) return {}; + var base = Object.assign({}, this.c); + + if (opts.includeConfig) { + base.outputCalendar = this.outputCalendar; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + + return base; + } + /** + * Returns a Javascript Date equivalent to this DateTime. + * @return {Date} + */ + ; + + _proto.toJSDate = function toJSDate() { + return new Date(this.isValid ? this.ts : NaN); + } // COMPARE + + /** + * Return the difference between two DateTimes as a Duration. + * @param {DateTime} otherDateTime - the DateTime to compare this one to + * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example + * var i1 = DateTime.fromISO('1982-05-25T09:45'), + * i2 = DateTime.fromISO('1983-10-14T10:30'); + * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 } + * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 } + * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 } + * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 } + * @return {Duration} + */ + ; + + _proto.diff = function diff(otherDateTime, unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid || !otherDateTime.isValid) { + return Duration.invalid(this.invalid || otherDateTime.invalid, "created by diffing an invalid DateTime"); + } + + var durOpts = Object.assign({ + locale: this.locale, + numberingSystem: this.numberingSystem + }, opts); + + var units = maybeArray(unit).map(Duration.normalizeUnit), + otherIsLater = otherDateTime.valueOf() > this.valueOf(), + earlier = otherIsLater ? this : otherDateTime, + later = otherIsLater ? otherDateTime : this, + diffed = _diff(earlier, later, units, durOpts); + + return otherIsLater ? diffed.negate() : diffed; + } + /** + * Return the difference between this DateTime and right now. + * See {@link diff} + * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + ; + + _proto.diffNow = function diffNow(unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (opts === void 0) { + opts = {}; + } + + return this.diff(DateTime.local(), unit, opts); + } + /** + * Return an Interval spanning between this DateTime and another DateTime + * @param {DateTime} otherDateTime - the other end point of the Interval + * @return {Interval} + */ + ; + + _proto.until = function until(otherDateTime) { + return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; + } + /** + * Return whether this DateTime is in the same unit of time as another DateTime + * @param {DateTime} otherDateTime - the other DateTime + * @param {string} unit - the unit of time to check sameness on + * @example DateTime.local().hasSame(otherDT, 'day'); //~> true if both the same calendar day + * @return {boolean} + */ + ; + + _proto.hasSame = function hasSame(otherDateTime, unit) { + if (!this.isValid) return false; + + if (unit === "millisecond") { + return this.valueOf() === otherDateTime.valueOf(); + } else { + var inputMs = otherDateTime.valueOf(); + return this.startOf(unit) <= inputMs && inputMs <= this.endOf(unit); + } + } + /** + * Equality check + * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid. + * To compare just the millisecond values, use `+dt1 === +dt2`. + * @param {DateTime} other - the other DateTime + * @return {boolean} + */ + ; + + _proto.equals = function equals(other) { + return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc); + } + /** + * Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your + * platform supports Intl.RelativeTimeFormat. Rounds down by default. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.local()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow" + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds" + * @param {boolean} [options.round=true] - whether to round the numbers in the output. + * @param {boolean} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.local().plus({ days: 1 }).toRelative() //=> "in 1 day" + * @example DateTime.local().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 día" + * @example DateTime.local().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures" + * @example DateTime.local().minus({ days: 2 }).toRelative() //=> "2 days ago" + * @example DateTime.local().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago" + * @example DateTime.local().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" + */ + ; + + _proto.toRelative = function toRelative(options) { + if (options === void 0) { + options = {}; + } + + if (!this.isValid) return null; + var base = options.base || DateTime.fromObject({ + zone: this.zone + }), + padding = options.padding ? this < base ? -options.padding : options.padding : 0; + return diffRelative(base, this.plus(padding), Object.assign(options, { + numeric: "always", + units: ["years", "months", "days", "hours", "minutes", "seconds"] + })); + } + /** + * Returns a string representation of this date relative to today, such as "yesterday" or "next month". + * Only internationalizes on platforms that supports Intl.RelativeTimeFormat. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.local()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days" + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.local().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow" + * @example DateTime.local().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana" + * @example DateTime.local().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain" + * @example DateTime.local().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" + */ + ; + + _proto.toRelativeCalendar = function toRelativeCalendar(options) { + if (options === void 0) { + options = {}; + } + + if (!this.isValid) return null; + return diffRelative(options.base || DateTime.fromObject({ + zone: this.zone + }), this, Object.assign(options, { + numeric: "auto", + units: ["years", "months", "days"], + calendary: true + })); + } + /** + * Return the min of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum + * @return {DateTime} the min DateTime, or undefined if called with no argument + */ + ; + + DateTime.min = function min() { + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("min requires all arguments be DateTimes"); + } + + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.min); + } + /** + * Return the max of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum + * @return {DateTime} the max DateTime, or undefined if called with no argument + */ + ; + + DateTime.max = function max() { + for (var _len2 = arguments.length, dateTimes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + dateTimes[_key2] = arguments[_key2]; + } + + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("max requires all arguments be DateTimes"); + } + + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.max); + } // MISC + + /** + * Explain how a string would be parsed by fromFormat() + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see description) + * @param {Object} options - options taken by fromFormat() + * @return {Object} + */ + ; + + DateTime.fromFormatExplain = function fromFormatExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + _options$locale = _options.locale, + locale = _options$locale === void 0 ? null : _options$locale, + _options$numberingSys = _options.numberingSystem, + numberingSystem = _options$numberingSys === void 0 ? null : _options$numberingSys, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + return explainFromTokens(localeToUse, text, fmt); + } + /** + * @deprecated use fromFormatExplain instead + */ + ; + + DateTime.fromStringExplain = function fromStringExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + + return DateTime.fromFormatExplain(text, fmt, options); + } // FORMAT PRESETS + + /** + * {@link toLocaleString} format like 10/14/1983 + * @type {Object} + */ + ; + + _createClass(DateTime, [{ + key: "isValid", + get: function get() { + return this.invalid === null; + } + /** + * Returns an error code if this DateTime is invalid, or null if the DateTime is valid + * @type {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + /** + * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + /** + * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + /** + * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "outputCalendar", + get: function get() { + return this.isValid ? this.loc.outputCalendar : null; + } + /** + * Get the time zone associated with this DateTime. + * @type {Zone} + */ + + }, { + key: "zone", + get: function get() { + return this._zone; + } + /** + * Get the name of the time zone. + * @type {string} + */ + + }, { + key: "zoneName", + get: function get() { + return this.isValid ? this.zone.name : null; + } + /** + * Get the year + * @example DateTime.local(2017, 5, 25).year //=> 2017 + * @type {number} + */ + + }, { + key: "year", + get: function get() { + return this.isValid ? this.c.year : NaN; + } + /** + * Get the quarter + * @example DateTime.local(2017, 5, 25).quarter //=> 2 + * @type {number} + */ + + }, { + key: "quarter", + get: function get() { + return this.isValid ? Math.ceil(this.c.month / 3) : NaN; + } + /** + * Get the month (1-12). + * @example DateTime.local(2017, 5, 25).month //=> 5 + * @type {number} + */ + + }, { + key: "month", + get: function get() { + return this.isValid ? this.c.month : NaN; + } + /** + * Get the day of the month (1-30ish). + * @example DateTime.local(2017, 5, 25).day //=> 25 + * @type {number} + */ + + }, { + key: "day", + get: function get() { + return this.isValid ? this.c.day : NaN; + } + /** + * Get the hour of the day (0-23). + * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 + * @type {number} + */ + + }, { + key: "hour", + get: function get() { + return this.isValid ? this.c.hour : NaN; + } + /** + * Get the minute of the hour (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 + * @type {number} + */ + + }, { + key: "minute", + get: function get() { + return this.isValid ? this.c.minute : NaN; + } + /** + * Get the second of the minute (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 + * @type {number} + */ + + }, { + key: "second", + get: function get() { + return this.isValid ? this.c.second : NaN; + } + /** + * Get the millisecond of the second (0-999). + * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 + * @type {number} + */ + + }, { + key: "millisecond", + get: function get() { + return this.isValid ? this.c.millisecond : NaN; + } + /** + * Get the week year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekYear //=> 2015 + * @type {number} + */ + + }, { + key: "weekYear", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; + } + /** + * Get the week number of the week year (1-52ish). + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2017, 5, 25).weekNumber //=> 21 + * @type {number} + */ + + }, { + key: "weekNumber", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; + } + /** + * Get the day of the week. + * 1 is Monday and 7 is Sunday + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekday //=> 4 + * @type {number} + */ + + }, { + key: "weekday", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; + } + /** + * Get the ordinal (meaning the day of the year) + * @example DateTime.local(2017, 5, 25).ordinal //=> 145 + * @type {number|DateTime} + */ + + }, { + key: "ordinal", + get: function get() { + return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; + } + /** + * Get the human readable short month name, such as 'Oct'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthShort //=> Oct + * @type {string} + */ + + }, { + key: "monthShort", + get: function get() { + return this.isValid ? Info.months("short", { + locale: this.locale + })[this.month - 1] : null; + } + /** + * Get the human readable long month name, such as 'October'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthLong //=> October + * @type {string} + */ + + }, { + key: "monthLong", + get: function get() { + return this.isValid ? Info.months("long", { + locale: this.locale + })[this.month - 1] : null; + } + /** + * Get the human readable short weekday, such as 'Mon'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon + * @type {string} + */ + + }, { + key: "weekdayShort", + get: function get() { + return this.isValid ? Info.weekdays("short", { + locale: this.locale + })[this.weekday - 1] : null; + } + /** + * Get the human readable long weekday, such as 'Monday'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday + * @type {string} + */ + + }, { + key: "weekdayLong", + get: function get() { + return this.isValid ? Info.weekdays("long", { + locale: this.locale + })[this.weekday - 1] : null; + } + /** + * Get the UTC offset of this DateTime in minutes + * @example DateTime.local().offset //=> -240 + * @example DateTime.utc().offset //=> 0 + * @type {number} + */ + + }, { + key: "offset", + get: function get() { + return this.isValid ? +this.o : NaN; + } + /** + * Get the short human name for the zone's current offset, for example "EST" or "EDT". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + + }, { + key: "offsetNameShort", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "short", + locale: this.locale + }); + } else { + return null; + } + } + /** + * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + + }, { + key: "offsetNameLong", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "long", + locale: this.locale + }); + } else { + return null; + } + } + /** + * Get whether this zone's offset ever changes, as in a DST. + * @type {boolean} + */ + + }, { + key: "isOffsetFixed", + get: function get() { + return this.isValid ? this.zone.universal : null; + } + /** + * Get whether the DateTime is in a DST. + * @type {boolean} + */ + + }, { + key: "isInDST", + get: function get() { + if (this.isOffsetFixed) { + return false; + } else { + return this.offset > this.set({ + month: 1 + }).offset || this.offset > this.set({ + month: 5 + }).offset; + } + } + /** + * Returns true if this DateTime is in a leap year, false otherwise + * @example DateTime.local(2016).isInLeapYear //=> true + * @example DateTime.local(2013).isInLeapYear //=> false + * @type {boolean} + */ + + }, { + key: "isInLeapYear", + get: function get() { + return isLeapYear(this.year); + } + /** + * Returns the number of days in this DateTime's month + * @example DateTime.local(2016, 2).daysInMonth //=> 29 + * @example DateTime.local(2016, 3).daysInMonth //=> 31 + * @type {number} + */ + + }, { + key: "daysInMonth", + get: function get() { + return daysInMonth(this.year, this.month); + } + /** + * Returns the number of days in this DateTime's year + * @example DateTime.local(2016).daysInYear //=> 366 + * @example DateTime.local(2013).daysInYear //=> 365 + * @type {number} + */ + + }, { + key: "daysInYear", + get: function get() { + return this.isValid ? daysInYear(this.year) : NaN; + } + /** + * Returns the number of weeks in this DateTime's year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2004).weeksInWeekYear //=> 53 + * @example DateTime.local(2013).weeksInWeekYear //=> 52 + * @type {number} + */ + + }, { + key: "weeksInWeekYear", + get: function get() { + return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; + } + }], [{ + key: "DATE_SHORT", + get: function get() { + return DATE_SHORT; + } + /** + * {@link toLocaleString} format like 'Oct 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_MED", + get: function get() { + return DATE_MED; + } + /** + * {@link toLocaleString} format like 'October 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_FULL", + get: function get() { + return DATE_FULL; + } + /** + * {@link toLocaleString} format like 'Tuesday, October 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_HUGE", + get: function get() { + return DATE_HUGE; + } + /** + * {@link toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_SIMPLE", + get: function get() { + return TIME_SIMPLE; + } + /** + * {@link toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_SECONDS", + get: function get() { + return TIME_WITH_SECONDS; + } + /** + * {@link toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_SHORT_OFFSET", + get: function get() { + return TIME_WITH_SHORT_OFFSET; + } + /** + * {@link toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_LONG_OFFSET", + get: function get() { + return TIME_WITH_LONG_OFFSET; + } + /** + * {@link toLocaleString} format like '09:30', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_SIMPLE", + get: function get() { + return TIME_24_SIMPLE; + } + /** + * {@link toLocaleString} format like '09:30:23', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_SECONDS", + get: function get() { + return TIME_24_WITH_SECONDS; + } + /** + * {@link toLocaleString} format like '09:30:23 EDT', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_SHORT_OFFSET", + get: function get() { + return TIME_24_WITH_SHORT_OFFSET; + } + /** + * {@link toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_LONG_OFFSET", + get: function get() { + return TIME_24_WITH_LONG_OFFSET; + } + /** + * {@link toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_SHORT", + get: function get() { + return DATETIME_SHORT; + } + /** + * {@link toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_SHORT_WITH_SECONDS", + get: function get() { + return DATETIME_SHORT_WITH_SECONDS; + } + /** + * {@link toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED", + get: function get() { + return DATETIME_MED; + } + /** + * {@link toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED_WITH_SECONDS", + get: function get() { + return DATETIME_MED_WITH_SECONDS; + } + /** + * {@link toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED_WITH_WEEKDAY", + get: function get() { + return DATETIME_MED_WITH_WEEKDAY; + } + /** + * {@link toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_FULL", + get: function get() { + return DATETIME_FULL; + } + /** + * {@link toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_FULL_WITH_SECONDS", + get: function get() { + return DATETIME_FULL_WITH_SECONDS; + } + /** + * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_HUGE", + get: function get() { + return DATETIME_HUGE; + } + /** + * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_HUGE_WITH_SECONDS", + get: function get() { + return DATETIME_HUGE_WITH_SECONDS; + } + }]); + + return DateTime; + }(); + function friendlyDateTime(dateTimeish) { + if (DateTime.isDateTime(dateTimeish)) { + return dateTimeish; + } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { + return DateTime.fromJSDate(dateTimeish); + } else if (dateTimeish && typeof dateTimeish === "object") { + return DateTime.fromObject(dateTimeish); + } else { + throw new InvalidArgumentError("Unknown datetime argument: " + dateTimeish + ", of type " + typeof dateTimeish); + } + } + + exports.DateTime = DateTime; + exports.Duration = Duration; + exports.FixedOffsetZone = FixedOffsetZone; + exports.IANAZone = IANAZone; + exports.Info = Info; + exports.Interval = Interval; + exports.InvalidZone = InvalidZone; + exports.LocalZone = LocalZone; + exports.Settings = Settings; + exports.Zone = Zone; + + return exports; + +}({})); +//# sourceMappingURL=luxon.js.map diff --git a/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.js.map b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.js.map new file mode 100644 index 0000000000..2b8f42a654 --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.js.map @@ -0,0 +1 @@ +{"version":3,"file":"luxon.js","sources":["../../src/errors.js","../../src/impl/formats.js","../../src/impl/util.js","../../src/impl/english.js","../../src/impl/formatter.js","../../src/impl/invalid.js","../../src/zone.js","../../src/zones/localZone.js","../../src/zones/IANAZone.js","../../src/zones/fixedOffsetZone.js","../../src/zones/invalidZone.js","../../src/impl/zoneUtil.js","../../src/settings.js","../../src/impl/locale.js","../../src/impl/regexParser.js","../../src/duration.js","../../src/interval.js","../../src/info.js","../../src/impl/diff.js","../../src/impl/digits.js","../../src/impl/tokenParser.js","../../src/impl/conversions.js","../../src/datetime.js"],"sourcesContent":["// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23', always 24-hour.\n */\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 EDT', always 24-hour.\n */\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hour12: false,\n timeZoneName: s\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 Eastern Daylight Time', always 24-hour.\n */\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hour12: false,\n timeZoneName: l\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n */\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n */\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l\n};\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasIntl() {\n try {\n return typeof Intl !== \"undefined\" && Intl.DateTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasFormatToParts() {\n return !isUndefined(Intl.DateTimeFormat.prototype.formatToParts);\n}\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n if (input.toString().length < n) {\n return (\"0\".repeat(n) + input).slice(-n);\n } else {\n return input.toString();\n }\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n const factor = 10 ** digits,\n rounder = towardZero ? Math.trunc : Math.round;\n return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// covert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n return +d;\n}\n\nexport function weeksInWeekYear(weekYear) {\n const p1 =\n (weekYear +\n Math.floor(weekYear / 4) -\n Math.floor(weekYear / 100) +\n Math.floor(weekYear / 400)) %\n 7,\n last = weekYear - 1,\n p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;\n return p1 === 4 || p2 === 3 ? 53 : 52;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > 60 ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hour12: false,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\"\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = Object.assign({ timeZoneName: offsetFormat }, intlOpts),\n intl = hasIntl();\n\n if (intl && hasFormatToParts()) {\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find(m => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n } else if (intl) {\n // this probably doesn't work for all locales\n const without = new Intl.DateTimeFormat(locale, intlOpts).format(date),\n included = new Intl.DateTimeFormat(locale, modified).format(date),\n diffed = included.substring(without.length),\n trimmed = diffed.replace(/^[, \\u200e]+/, \"\");\n return trimmed;\n } else {\n return null;\n }\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer, nonUnitKeys) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n if (nonUnitKeys.indexOf(u) >= 0) continue;\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(offset / 60),\n minutes = Math.abs(offset % 60),\n sign = hours >= 0 && !Object.is(hours, -0) ? \"+\" : \"-\",\n base = `${sign}${Math.abs(hours)}`;\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(Math.abs(hours), 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return minutes > 0 ? `${base}:${minutes}` : base;\n case \"techie\":\n return `${sign}${padStart(Math.abs(hours), 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n\nexport const ianaRegex = /[A-Za-z_+-]{1,256}(:?\\/[A-Za-z_+-]{1,256}(\\/[A-Za-z_+-]{1,256})?)?/;\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return monthsNarrow;\n case \"short\":\n return monthsShort;\n case \"long\":\n return monthsLong;\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\"\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return weekdaysNarrow;\n case \"short\":\n return weekdaysShort;\n case \"long\":\n return weekdaysLong;\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return erasNarrow;\n case \"short\":\n return erasShort;\n case \"long\":\n return erasLong;\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"]\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hour12\"\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { hasFormatToParts, padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed, val: currentFull });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: false, val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed, val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.format();\n }\n\n formatDateTime(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.format();\n }\n\n formatDateTimeParts(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.formatToParts();\n }\n\n resolvedOptions(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.resolvedOptions();\n }\n\n num(n, p = 0) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = Object.assign({}, this.opts);\n\n if (p > 0) {\n opts.padTo = p;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter =\n this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\" && hasFormatToParts(),\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = opts => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hour12: true }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = token => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = length =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = token => {\n // Where possible: http://cldr.unicode.org/translation/date-time#TOC-Stand-Alone-vs.-Format-Styles\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const tokenToField = token => {\n switch (token[0]) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n default:\n return null;\n }\n },\n tokenToString = lildur => token => {\n const mapped = tokenToField(token);\n if (mapped) {\n return this.num(lildur.get(mapped), token.length);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter(t => t));\n return stringifyTokens(tokens, tokenToString(collapsed));\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","/* eslint no-unused-vars: \"off\" */\nimport { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get universal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo, hasIntl } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this Javascript environment.\n * @implements {Zone}\n */\nexport default class LocalZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {LocalZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new LocalZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"local\";\n }\n\n /** @override **/\n get name() {\n if (hasIntl()) {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n } else return \"local\";\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"local\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, ianaRegex, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst matchingRegex = RegExp(`^${ianaRegex.source}$`);\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n if (!dtfCache[zone]) {\n dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\"\n });\n }\n return dtfCache[zone];\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n hour: 3,\n minute: 4,\n second: 5\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date),\n filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i],\n pos = typeToPos[type];\n\n if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n if (!ianaZoneCache[name]) {\n ianaZoneCache[name] = new IANAZone(name);\n }\n return ianaZoneCache[name];\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache = {};\n dtfCache = {};\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Fantasia/Castle\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return !!(s && s.match(matchingRegex));\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n // Etc/GMT+8 -> -480\n /** @ignore */\n static parseGMTOffset(specifier) {\n if (specifier) {\n const match = specifier.match(/^Etc\\/GMT([+-]\\d{1,2})$/i);\n if (match) {\n return -60 * parseInt(match[1]);\n }\n }\n return null;\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /** @override **/\n get type() {\n return \"iana\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n const date = new Date(ts),\n dtf = makeDTF(this.name),\n [year, month, day, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date),\n // work around https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /** @override **/\n get isValid() {\n return this.valid;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /** @override **/\n get type() {\n return \"fixed\";\n }\n\n /** @override **/\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /** @override **/\n offsetName() {\n return this.name;\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /** @override **/\n get universal() {\n return true;\n }\n\n /** @override **/\n offset() {\n return this.fixed;\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"local\") return defaultZone;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else if ((offset = IANAZone.parseGMTOffset(input)) != null) {\n // handle Etc/GMT-4, which V8 chokes on\n return FixedOffsetZone.instance(offset);\n } else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);\n else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && input.offset && typeof input.offset === \"number\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","import LocalZone from \"./zones/localZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nlet now = () => Date.now(),\n defaultZone = null, // not setting this directly to LocalZone.instance bc loading order issues\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n throwOnInvalid = false;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Get the default time zone to create DateTimes in.\n * @type {string}\n */\n static get defaultZoneName() {\n return Settings.defaultZone.name;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * @type {string}\n */\n static set defaultZoneName(z) {\n if (!z) {\n defaultZone = null;\n } else {\n defaultZone = normalizeZone(z);\n }\n }\n\n /**\n * Get the default time zone object to create DateTimes in. Does not affect existing instances.\n * @type {Zone}\n */\n static get defaultZone() {\n return defaultZone || LocalZone.instance;\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n }\n}\n","import { hasFormatToParts, hasIntl, padStart, roundTo, hasRelative } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport Formatter from \"./formatter.js\";\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache[key];\n if (!inf) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache[key] = inf;\n }\n return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache[key];\n if (!inf) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache[key] = inf;\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else if (hasIntl()) {\n const computedSys = new Intl.DateTimeFormat().resolvedOptions().locale;\n // node sometimes defaults to \"und\". Override that because that is dumb\n sysLocaleCache = !computedSys || computedSys === \"und\" ? \"en-US\" : computedSys;\n return sysLocaleCache;\n } else {\n sysLocaleCache = \"en-US\";\n return sysLocaleCache;\n }\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n const smaller = localeStr.substring(0, uIndex);\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n } catch (e) {\n options = getCachedDTF(smaller).resolvedOptions();\n }\n\n const { numberingSystem, calendar } = options;\n // return the smaller one so that we can append the calendar and numbering overrides to it\n return [smaller, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (hasIntl()) {\n if (outputCalendar || numberingSystem) {\n localeStr += \"-u\";\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n } else {\n return [];\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2016, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, defaultOK, englishFn, intlFn) {\n const mode = loc.listingMode(defaultOK);\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n (hasIntl() && new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\")\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n if (!forceSimple && hasIntl()) {\n const intlOpts = { useGrouping: false };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.hasIntl = hasIntl();\n\n let z;\n if (dt.zone.universal && this.hasIntl) {\n // Chromium doesn't support fixed-offset zones like Etc/GMT+8 in its formatter,\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=364374.\n // So we have to make do. Two cases:\n // 1. The format options tell us to show the zone. We can't do that, so the best\n // we can do is format the date in UTC.\n // 2. The format options don't tell us to show the zone. Then we can adjust them\n // the time and tell the formatter to show it to us in UTC, so that the time is right\n // and the bad zone doesn't show up.\n // We can clean all this up when Chrome fixes this.\n z = \"UTC\";\n if (opts.timeZoneName) {\n this.dt = dt;\n } else {\n this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000);\n }\n } else if (dt.zone.type === \"local\") {\n this.dt = dt;\n } else {\n this.dt = dt;\n z = dt.zone.name;\n }\n\n if (this.hasIntl) {\n const intlOpts = Object.assign({}, this.opts);\n if (z) {\n intlOpts.timeZone = z;\n }\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n }\n\n format() {\n if (this.hasIntl) {\n return this.dtf.format(this.dt.toJSDate());\n } else {\n const tokenFormat = English.formatString(this.opts),\n loc = Locale.create(\"en-US\");\n return Formatter.create(loc).formatDateTimeFromString(this.dt, tokenFormat);\n }\n }\n\n formatToParts() {\n if (this.hasIntl && hasFormatToParts()) {\n return this.dtf.formatToParts(this.dt.toJSDate());\n } else {\n // This is kind of a cop out. We actually could do this for English. However, we couldn't do it for intl strings\n // and IMO it's too weird to have an uncanny valley like that\n return [];\n }\n }\n\n resolvedOptions() {\n if (this.hasIntl) {\n return this.dtf.resolvedOptions();\n } else {\n return {\n locale: \"en-US\",\n numberingSystem: \"latn\",\n outputCalendar: \"gregory\"\n };\n }\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = Object.assign({ style: \"long\" }, opts);\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\n/**\n * @private\n */\n\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);\n }\n\n static create(locale, numberingSystem, outputCalendar, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale,\n // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale()),\n numberingSystemR = numberingSystem || Settings.defaultNumberingSystem,\n outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache = {};\n intlNumCache = {};\n intlRelCache = {};\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar);\n }\n\n constructor(locale, numbering, outputCalendar, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode(defaultOK = true) {\n const intl = hasIntl(),\n hasFTP = intl && hasFormatToParts(),\n isActuallyEn = this.isEnglish(),\n hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n\n if (!hasFTP && !(isActuallyEn && hasNoWeirdness) && !defaultOK) {\n return \"error\";\n } else if (!hasFTP || (isActuallyEn && hasNoWeirdness)) {\n return \"en\";\n } else {\n return \"intl\";\n }\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone(Object.assign({}, alts, { defaultToEN: true }));\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone(Object.assign({}, alts, { defaultToEN: false }));\n }\n\n months(length, format = false, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.months, () => {\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n this.monthsCache[formatStr][length] = mapMonths(dt => this.extract(dt, intl, \"month\"));\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays(dt =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems(defaultOK = true) {\n return listStuff(\n this,\n undefined,\n defaultOK,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hour12: true };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n dt => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.eras, () => {\n const intl = { era: length };\n\n // This is utter bullshit. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(dt =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find(m => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n (hasIntl() && new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\"))\n );\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n ianaRegex,\n isUndefined\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return m =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [Object.assign(mergedVals, val), mergedZone || zone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/,\n isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,9}))?)?)?/,\n isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${offsetRegex.source}?`),\n isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`),\n isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/,\n isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/,\n isoOrdinalRegex = /(\\d{4})-?(\\d{3})/,\n extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\"),\n extractISOOrdinalData = simpleParse(\"year\", \"ordinal\"),\n sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/, // dumbed-down version of the ISO one\n sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n ),\n sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1)\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hour: int(match, cursor, 0),\n minute: int(match, cursor + 1, 0),\n second: int(match, cursor + 2, 0),\n millisecond: parseMillis(match[cursor + 3])\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO duration parsing\n\nconst isoDuration = /^-?P(?:(?:(-?\\d{1,9})Y)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,9})W)?(?:(-?\\d{1,9})D)?(?:T(?:(-?\\d{1,9})H)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,9})(?:[.,](-?\\d{1,9}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [\n s,\n yearStr,\n monthStr,\n weekStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr,\n millisecondsStr\n ] = match;\n\n const hasNegativePrefix = s[0] === \"-\";\n\n const maybeNegate = num => (num && hasNegativePrefix ? -num : num);\n\n return [\n {\n years: maybeNegate(parseInteger(yearStr)),\n months: maybeNegate(parseInteger(monthStr)),\n weeks: maybeNegate(parseInteger(weekStr)),\n days: maybeNegate(parseInteger(dayStr)),\n hours: maybeNegate(parseInteger(hourStr)),\n minutes: maybeNegate(parseInteger(minuteStr)),\n seconds: maybeNegate(parseInteger(secondStr)),\n milliseconds: maybeNegate(parseMillis(millisecondsStr))\n }\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr)\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^)]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset\n);\nconst extractISOOrdinalDataAndTime = combineExtractors(extractISOOrdinalData, extractISOTime);\nconst extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset);\n\n/**\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDataAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOYmdTimeOffsetAndIANAZone = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nconst lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 }\n },\n casualMatrix = Object.assign(\n {\n years: {\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000\n }\n },\n lowOrderMatrix\n ),\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = Object.assign(\n {\n years: {\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000\n }\n },\n lowOrderMatrix\n );\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}),\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy\n };\n return new Duration(conf);\n}\n\nfunction antiTrunc(n) {\n return n < 0 ? Math.floor(n) : Math.ceil(n);\n}\n\n// NB: mutates parameters\nfunction convert(matrix, fromMap, fromUnit, toMap, toUnit) {\n const conv = matrix[toUnit][fromUnit],\n raw = fromMap[fromUnit] / conv,\n sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]),\n // ok, so this is wild, but see the matrix in the tests\n added =\n !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw);\n toMap[toUnit] += added;\n fromMap[fromUnit] -= added * conv;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n reverseUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n convert(matrix, vals, previous, vals, current);\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration.years}, {@link Duration.months}, {@link Duration.weeks}, {@link Duration.days}, {@link Duration.hours}, {@link Duration.minutes}, {@link Duration.seconds}, {@link Duration.milliseconds} accessors.\n * * **Configuration** See {@link Duration.locale} and {@link Duration.numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration.plus}, {@link Duration.minus}, {@link Duration.normalize}, {@link Duration.set}, {@link Duration.reconfigure}, {@link Duration.shiftTo}, and {@link Duration.negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration.as}, {@link Duration.toISO}, {@link Duration.toFormat}, and {@link Duration.toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = accurate ? accurateMatrix : casualMatrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject(Object.assign({ milliseconds: count }, opts));\n }\n\n /**\n * Create a Duration from a Javascript object with keys like 'years' and 'hours.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {string} [obj.locale='en-US'] - the locale to use\n * @param {string} obj.numberingSystem - the numbering system to use\n * @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromObject(obj) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit, [\n \"locale\",\n \"numberingSystem\",\n \"conversionAccuracy\",\n \"zone\" // a bit of debt; it's super inconvenient internally not to be able to blindly pass this\n ]),\n loc: Locale.fromObject(obj),\n conversionAccuracy: obj.conversionAccuracy\n });\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n const obj = Object.assign(parsed, opts);\n return Duration.fromObject(obj);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\"\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = Object.assign({}, opts, {\n floor: opts.round !== false && opts.floor !== false\n });\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a Javascript object with this Duration's values.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = Object.assign({}, this.values);\n\n if (opts.includeConfig) {\n base.conversionAccuracy = this.conversionAccuracy;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n valueOf() {\n return this.as(\"milliseconds\");\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = friendlyDuration(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = friendlyDuration(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit((x, u) => u === \"hour\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).years //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).months //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).days //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit, []));\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem }),\n opts = { loc };\n\n if (conversionAccuracy) {\n opts.conversionAccuracy = conversionAccuracy;\n }\n\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map(u => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n normalizeValues(this.matrix, vals);\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = own - i; // we'd like to absorb these fractions in another unit\n\n // plus anything further down the chain that should be rolled up in to this\n for (const down in vals) {\n if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {\n convert(this.matrix, vals, down, built, k);\n }\n }\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n return clone(this, { values: built }, true).normalize();\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n for (const u of orderedUnits) {\n if (this.values[u] !== other.values[u]) {\n return false;\n }\n }\n return true;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDuration(durationish) {\n if (isNumber(durationish)) {\n return Duration.fromMillis(durationish);\n } else if (Duration.isDuration(durationish)) {\n return durationish;\n } else if (typeof durationish === \"object\") {\n return Duration.fromObject(durationish);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationish} of type ${typeof durationish}`\n );\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration, { friendlyDuration } from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link fromDateTimes}, {@link after}, {@link before}, or {@link fromISO}.\n * * **Accessors** Use {@link start} and {@link end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link count}, {@link length}, {@link hasSame}, {@link contains}, {@link isAfter}, or {@link isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link set}, {@link splitAt}, {@link splitBy}, {@link divideEqually}, {@link merge}, {@link xor}, {@link union}, {@link intersection}, or {@link difference}.\n * * **Comparison** To compare this Interval to another one, use {@link equals}, {@link overlaps}, {@link abutsStart}, {@link abutsEnd}, {@link engulfs}\n * * **Output** To convert the Interval into other representations, see {@link toString}, {@link toISO}, {@link toISODate}, {@link toISOTime}, {@link toFormat}, and {@link toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = friendlyDuration(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = friendlyDuration(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `/`, `/`, and `/` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime.fromISO} and optionally {@link Duration.fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n const start = DateTime.fromISO(s, opts),\n end = DateTime.fromISO(e, opts);\n\n if (start.isValid && end.isValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (start.isValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (end.isValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @return {number}\n */\n count(unit = \"milliseconds\") {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit),\n end = this.end.startOf(unit);\n return Math.floor(end.diff(start, unit).get(unit)) + 1;\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...[DateTime]} dateTimes - the unit of time to count.\n * @return {[Interval]}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter(d => this.contains(d))\n .sort(),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {[Interval]}\n */\n splitBy(duration) {\n const dur = friendlyDuration(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n added,\n next;\n\n const results = [];\n while (s < this.e) {\n added = s.plus(dur);\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {[Interval]}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Return whether this Interval engulfs the start and end of the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s > e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into a equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * @param {[Interval]} intervals\n * @return {[Interval]}\n */\n static merge(intervals) {\n const [found, final] = intervals.sort((a, b) => a.s - b.s).reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {[Interval]} intervals\n * @return {[Interval]}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map(i => [{ time: i.s, type: \"s\" }, { time: i.e, type: \"e\" }]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {[Interval]}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map(i => this.intersection(i))\n .filter(i => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime.toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime.toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format string.\n * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details.\n * @param {Object} opts - options\n * @param {string} [opts.separator = ' – '] - a separator to place between the start and end representations\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasFormatToParts, hasIntl, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.local()\n .setZone(zone)\n .set({ month: 12 });\n\n return !zone.universal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone.isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {[string]}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, outputCalendar = \"gregory\" } = {}\n ) {\n return Locale.create(locale, numberingSystem, outputCalendar).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {[string]}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, outputCalendar = \"gregory\" } = {}\n ) {\n return Locale.create(locale, numberingSystem, outputCalendar).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {[string]}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null } = {}) {\n return Locale.create(locale, numberingSystem, null).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @return {[string]}\n */\n static weekdaysFormat(length = \"long\", { locale = null, numberingSystem = null } = {}) {\n return Locale.create(locale, numberingSystem, null).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {[string]}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {[string]}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `zones`: whether this environment supports IANA timezones\n * * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing\n * * `intl`: whether this environment supports general internationalization\n * * `relative`: whether this environment supports relative time formatting\n * @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false }\n * @return {Object}\n */\n static features() {\n let intl = false,\n intlTokens = false,\n zones = false,\n relative = false;\n\n if (hasIntl()) {\n intl = true;\n intlTokens = hasFormatToParts();\n relative = hasRelative();\n\n try {\n zones =\n new Intl.DateTimeFormat(\"en\", { timeZone: \"America/New_York\" }).resolvedOptions()\n .timeZone === \"America/New_York\";\n } catch (e) {\n zones = false;\n }\n }\n\n return { intl, intlTokens, zones, relative };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = dt =>\n dt\n .toUTC(0, { keepLocalTime: true })\n .startOf(\"day\")\n .valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n }\n ],\n [\"days\", dayDiff]\n ];\n\n const results = {};\n let lowestOrder, highWater;\n\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n let delta = differ(cursor, later);\n highWater = cursor.plus({ [unit]: delta });\n\n if (highWater > later) {\n cursor = cursor.plus({ [unit]: delta - 1 });\n delta -= 1;\n } else {\n cursor = highWater;\n }\n\n results[unit] = delta;\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function(earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n u => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(Object.assign(results, opts));\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\"\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881]\n};\n\n// eslint-disable-next-line\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n return new RegExp(`${numberingSystems[numberingSystem || \"latn\"]}${append}`);\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = i => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n return s.replace(/\\./, \"\\\\.?\");\n}\n\nfunction stripInsensitivities(s) {\n return s.replace(/\\./, \"\").toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex(i => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n // eslint-disable-next-line no-useless-escape\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = t => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = t => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\", false), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\", false), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true, false), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true, false), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false, false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false, false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false, false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false, false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true, false), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true, false), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\"\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\"\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\"\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\"\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour: {\n numeric: \"h\",\n \"2-digit\": \"hh\"\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\"\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\"\n }\n};\n\nfunction tokenForPart(part, locale, formatOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n return {\n literal: true,\n val: value\n };\n }\n\n const style = formatOpts[type];\n\n let val = partTypeStyleToTokenVal[type];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map(u => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = token => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone;\n if (!isUndefined(matches.Z)) {\n zone = new FixedOffsetZone(matches.Z);\n } else if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n } else {\n zone = null;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n\n if (!formatOpts) {\n return token;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const parts = formatter.formatDateTimeParts(getDummyDateTime());\n\n const tokens = parts.map(p => tokenForPart(p, locale, formatOpts));\n\n if (tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nfunction expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map(t => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport function explainFromTokens(locale, input, format) {\n const tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n units = tokens.map(t => unitForToken(t, locale)),\n disqualifyingUnit = units.find(t => t.invalidReason);\n\n if (disqualifyingUnit) {\n return { input, tokens, invalidReason: disqualifyingUnit.invalidReason };\n } else {\n const [regexString, handlers] = buildRegex(units),\n regex = RegExp(regexString, \"i\"),\n [rawMatches, matches] = match(input, regex, handlers),\n [result, zone] = matches ? dateTimeFromMatches(matches) : [null, null];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return { input, tokens, regex, rawMatches, matches, result, zone };\n }\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, invalidReason];\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nfunction dayOfWeek(year, month, day) {\n const js = new Date(Date.UTC(year, month - 1, day)).getUTCDay();\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex(i => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = dayOfWeek(year, month, day);\n\n let weekNumber = Math.floor((ordinal - weekday + 10) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear);\n } else if (weekNumber > weeksInWeekYear(year)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return Object.assign({ weekYear, weekNumber, weekday }, timeObject(gregObj));\n}\n\nexport function weekToGregorian(weekData) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n\n return Object.assign({ year, month, day }, timeObject(weekData));\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData,\n ordinal = computeOrdinal(year, month, day);\n\n return Object.assign({ year, ordinal }, timeObject(gregData));\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData,\n { month, day } = uncomputeOrdinal(year, ordinal);\n\n return Object.assign({ year, month, day }, timeObject(ordinalData));\n}\n\nexport function hasInvalidWeekData(obj) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.week);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","import Duration, { friendlyDuration } from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport { parseFromTokens, explainFromTokens } from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid\n };\n return new DateTime(Object.assign({}, current, alts, { old: current }));\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds()\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const keys = Object.keys(dur.values);\n if (keys.indexOf(\"milliseconds\") === -1) {\n keys.push(\"milliseconds\");\n }\n\n dur = dur.shiftTo(...keys);\n\n const oPre = inst.o,\n year = inst.c.year + dur.years,\n month = inst.c.month + dur.months + dur.quarters * 3,\n c = Object.assign({}, inst.c, {\n year,\n month,\n day: Math.min(inst.c.day, daysInMonth(year, month)) + dur.days + dur.weeks * 7\n }),\n millisToAdd = Duration.fromObject({\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text) {\n const { setZone, zone } = opts;\n if (parsed && Object.keys(parsed).length !== 0) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(\n Object.assign(parsed, opts, {\n zone: interpretationZone,\n // setZone is a valid option in the calling methods, but not in fromObject\n setZone: undefined\n })\n );\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\n// technical time formats (e.g. the time part of ISO 8601), take some options\n// and this commonizes their handling\nfunction toTechTimeFormat(\n dt,\n {\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset,\n includeZone = false,\n spaceZone = false,\n format = \"extended\"\n }\n) {\n let fmt = format === \"basic\" ? \"HHmm\" : \"HH:mm\";\n\n if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) {\n fmt += format === \"basic\" ? \"ss\" : \":ss\";\n if (!suppressMilliseconds || dt.millisecond !== 0) {\n fmt += \".SSS\";\n }\n }\n\n if ((includeZone || includeOffset) && spaceZone) {\n fmt += \" \";\n }\n\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += format === \"basic\" ? \"ZZZ\" : \"ZZ\";\n }\n\n return toTechFormat(dt, fmt);\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\"\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\"\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, zone) {\n // assume we have the higher-order units\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const tsNow = Settings.now(),\n offsetProvis = zone.offset(tsNow),\n [ts, o] = objToTS(obj, offsetProvis, zone);\n\n return new DateTime({\n ts,\n zone,\n o\n });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = unit => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end\n .startOf(unit)\n .diff(start.startOf(unit), unit)\n .get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(0, opts.units[opts.units.length - 1]);\n}\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link local}, {@link utc}, and (most flexibly) {@link fromObject}. To create one from a standard string format, use {@link fromISO}, {@link fromHTTP}, and {@link fromRFC2822}. To create one from a custom string format, use {@link fromFormat}. To create one from a native JS date, use {@link fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link toObject}), use the {@link year}, {@link month},\n * {@link day}, {@link hour}, {@link minute}, {@link second}, {@link millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link weekYear}, {@link weekNumber}, and {@link weekday} accessors.\n * * **Configuration** See the {@link locale} and {@link numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link set}, {@link reconfigure}, {@link setZone}, {@link setLocale}, {@link plus}, {@link minus}, {@link endOf}, {@link startOf}, {@link toUTC}, and {@link toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link toRelative}, {@link toRelativeCalendar}, {@link toJSON}, {@link toISO}, {@link toHTTP}, {@link toObject}, {@link toRFC2822}, {@link toString}, {@link toLocaleString}, {@link toFormat}, {@link toMillis} and {@link toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n const ot = zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12) //~> 2017-03-12T00:00:00\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local(year, month, day, hour, minute, second, millisecond) {\n if (isUndefined(year)) {\n return new DateTime({ ts: Settings.now() });\n } else {\n return quickDT(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n },\n Settings.defaultZone\n );\n }\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765Z\n * @return {DateTime}\n */\n static utc(year, month, day, hour, minute, second, millisecond) {\n if (isUndefined(year)) {\n return new DateTime({\n ts: Settings.now(),\n zone: FixedOffsetZone.utcInstance\n });\n } else {\n return quickDT(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n },\n FixedOffsetZone.utcInstance\n );\n }\n }\n\n /**\n * Create a DateTime from a Javascript Date object. Uses the default zone.\n * @param {Date} date - a Javascript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options)\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options)\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options)\n });\n }\n }\n\n /**\n * Create a DateTime from a Javascript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {string|Zone} [obj.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [obj.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} obj.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} obj.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @return {DateTime}\n */\n static fromObject(obj) {\n const zoneToUse = normalizeZone(obj.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const tsNow = Settings.now(),\n offsetProvis = zoneToUse.offset(tsNow),\n normalized = normalizeObject(obj, normalizeUnit, [\n \"zone\",\n \"locale\",\n \"outputCalendar\",\n \"numberingSystem\"\n ]),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber,\n loc = Locale.fromObject(obj);\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @see https://moment.github.io/luxon/docs/manual/parsing.html#table-of-tokens\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true\n }),\n [vals, parsedZone, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is a DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locale: this.locale })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locale: this.locale })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locale: this.locale })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locale: this.locale })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.local().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.universal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1 }).offset || this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOpts(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link plus}. You may wish to use {@link toLocal} and {@link toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link reconfigure} and {@link setZone}.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnit, []),\n settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday);\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(Object.assign(gregorianToWeek(this.c), normalized));\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian(Object.assign(gregorianToOrdinal(this.c), normalized));\n } else {\n mixed = Object.assign(this.toObject(), normalized);\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.local().plus(123) //~> in 123 milliseconds\n * @example DateTime.local().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.local().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.local().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.local().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.local().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = friendlyDuration(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = friendlyDuration(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit) {\n if (!this.isValid) return this;\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n o.weekday = 1;\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'month', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @see https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options\n * @example DateTime.local().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.local().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.local().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.local().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param opts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @example DateTime.local().toLocaleString(); //=> 4/20/2017\n * @example DateTime.local().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.local().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017'\n * @example DateTime.local().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.local().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.local().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.local().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.local().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.local().toLocaleString({ hour: '2-digit', minute: '2-digit', hour12: false }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(opts = Formats.DATE_SHORT) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.local().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.local().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.local().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.local().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @return {string}\n */\n toISO(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toISODate(opts)}T${this.toISOTime(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @return {string}\n */\n toISODate({ format = \"extended\" } = {}) {\n let fmt = format === \"basic\" ? \"yyyyMMdd\" : \"yyyy-MM-dd\";\n if (this.year > 9999) {\n fmt = \"+\" + fmt;\n }\n\n return toTechFormat(this, fmt);\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n format = \"extended\"\n } = {}) {\n return toTechTimeFormat(this, {\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n format\n });\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string}\n */\n toSQLDate() {\n return toTechFormat(this, \"yyyy-MM-dd\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.local().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.local().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.local().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false } = {}) {\n return toTechTimeFormat(this, {\n includeOffset,\n includeZone,\n spaceZone: true\n });\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a Javascript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.local().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = Object.assign({}, this.c);\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a Javascript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\n this.invalid || otherDateTime.invalid,\n \"created by diffing an invalid DateTime\"\n );\n }\n\n const durOpts = Object.assign(\n { locale: this.locale, numberingSystem: this.numberingSystem },\n opts\n );\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.local(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @example DateTime.local().hasSame(otherDT, 'day'); //~> true if both the same calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit) {\n if (!this.isValid) return false;\n if (unit === \"millisecond\") {\n return this.valueOf() === otherDateTime.valueOf();\n } else {\n const inputMs = otherDateTime.valueOf();\n return this.startOf(unit) <= inputMs && inputMs <= this.endOf(unit);\n }\n }\n\n /**\n * Equality check\n * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.local()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {boolean} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.local().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.local().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.local().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.local().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.local().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.local().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({ zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n return diffRelative(\n base,\n this.plus(padding),\n Object.assign(options, {\n numeric: \"always\",\n units: [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"]\n })\n );\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.local()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.local().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.local().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.local().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.local().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(\n options.base || DateTime.fromObject({ zone: this.zone }),\n this,\n Object.assign(options, {\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true\n })\n );\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, i => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, i => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n"],"names":["LuxonError","Error","InvalidDateTimeError","reason","toMessage","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","unit","InvalidArgumentError","ZoneIsAbstractError","n","s","l","DATE_SHORT","year","month","day","DATE_MED","DATE_FULL","DATE_HUGE","weekday","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hour12","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","isUndefined","o","isNumber","isInteger","isString","isDate","Object","prototype","toString","call","hasIntl","Intl","DateTimeFormat","e","hasFormatToParts","formatToParts","hasRelative","RelativeTimeFormat","maybeArray","thing","Array","isArray","bestBy","arr","by","compare","length","undefined","reduce","best","next","pair","pick","obj","keys","a","k","hasOwnProperty","prop","integerBetween","bottom","top","floorMod","x","Math","floor","padStart","input","repeat","slice","parseInteger","string","parseInt","parseMillis","fraction","f","parseFloat","roundTo","number","digits","towardZero","factor","rounder","trunc","round","isLeapYear","daysInYear","daysInMonth","modMonth","modYear","objToLocalTS","d","Date","UTC","millisecond","setUTCFullYear","getUTCFullYear","weeksInWeekYear","weekYear","p1","last","p2","untruncateYear","parseZoneInfo","ts","offsetFormat","locale","timeZone","date","intlOpts","modified","assign","intl","parsed","find","m","type","toLowerCase","value","without","format","included","diffed","substring","trimmed","replace","signedOffset","offHourStr","offMinuteStr","offHour","Number","isNaN","offMin","offMinSigned","is","asNumber","numericValue","normalizeObject","normalizer","nonUnitKeys","normalized","u","indexOf","v","formatOffset","offset","hours","minutes","abs","sign","base","RangeError","timeObject","ianaRegex","stringify","JSON","sort","monthsLong","monthsShort","monthsNarrow","months","weekdaysLong","weekdaysShort","weekdaysNarrow","weekdays","meridiems","erasLong","erasShort","erasNarrow","eras","meridiemForDateTime","dt","weekdayForDateTime","monthForDateTime","eraForDateTime","formatRelativeTime","count","numeric","narrow","units","years","quarters","weeks","days","seconds","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","formatString","knownFormat","filtered","key","dateTimeHuge","Formats","stringifyTokens","splits","tokenToString","token","literal","val","macroTokenToFormatOpts","D","DD","DDD","DDDD","t","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","Formatter","create","opts","parseFormat","fmt","current","currentFull","bracketed","i","c","charAt","push","formatOpts","loc","systemLoc","formatWithSystemDefault","redefaultToSystem","df","dtFormatter","formatDateTime","formatDateTimeParts","resolvedOptions","num","p","forceSimple","padTo","numberFormatter","formatDateTimeFromString","knownEnglish","listingMode","useDateTimeFormatter","outputCalendar","extract","isOffsetFixed","allowZ","isValid","zone","meridiem","English","standalone","maybeMacro","era","offsetName","zoneName","weekNumber","ordinal","quarter","formatDurationFromString","dur","tokenToField","lildur","mapped","get","tokens","realTokens","found","concat","collapsed","shiftTo","map","filter","Invalid","explanation","Zone","equals","otherZone","singleton","LocalZone","getTimezoneOffset","matchingRegex","RegExp","source","dtfCache","makeDTF","typeToPos","hackyOffset","dtf","formatted","exec","fMonth","fDay","fYear","fHour","fMinute","fSecond","partsOffset","filled","pos","ianaZoneCache","IANAZone","name","resetCache","isValidSpecifier","match","isValidZone","parseGMTOffset","specifier","valid","adjustedHour","asUTC","asTS","over","FixedOffsetZone","instance","utcInstance","parseSpecifier","r","fixed","InvalidZone","NaN","normalizeZone","defaultZone","lowered","now","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","throwOnInvalid","Settings","resetCaches","Locale","z","numberingSystem","intlDTCache","getCachedDTF","locString","intlNumCache","getCachedINF","inf","NumberFormat","intlRelCache","getCachedRTF","cacheKeyOpts","sysLocaleCache","systemLocale","computedSys","parseLocaleString","localeStr","uIndex","options","smaller","calendar","intlConfigString","mapMonths","ms","DateTime","utc","mapWeekdays","listStuff","defaultOK","englishFn","intlFn","mode","supportsFastNumbers","startsWith","PolyNumberFormatter","useGrouping","minimumIntegerDigits","PolyDateFormatter","universal","fromMillis","toJSDate","tokenFormat","PolyRelFormatter","isEnglish","style","rtf","fromOpts","defaultToEN","specifiedLocale","localeR","numberingSystemR","outputCalendarR","fromObject","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","weekdaysCache","monthsCache","meridiemCache","eraCache","fastNumbersCached","hasFTP","isActuallyEn","hasNoWeirdness","clone","alts","getOwnPropertyNames","redefaultToEN","formatStr","field","results","matching","fastNumbers","relFormatter","other","combineRegexes","regexes","full","combineExtractors","extractors","ex","mergedVals","mergedZone","cursor","parse","patterns","regex","extractor","simpleParse","ret","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","isoYmdRegex","isoWeekRegex","isoOrdinalRegex","extractISOWeekData","extractISOOrdinalData","sqlYmdRegex","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOYmd","item","extractISOTime","extractISOOffset","local","fullOffset","extractIANAZone","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","maybeNegate","milliseconds","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","result","rfc2822","extractRFC2822","obsOffset","milOffset","preprocessRFC2822","trim","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDataAndTime","extractISOTimeAndOffset","parseISODate","parseRFC2822Date","parseHTTPDate","parseISODuration","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOYmdTimeOffsetAndIANAZone","extractISOTimeOffsetAndIANAZone","parseSQL","INVALID","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","reverse","clear","conf","values","conversionAccuracy","Duration","antiTrunc","ceil","convert","matrix","fromMap","fromUnit","toMap","toUnit","conv","raw","sameSign","added","normalizeValues","vals","previous","config","accurate","invalid","isLuxonDuration","normalizeUnit","fromISO","text","week","isDuration","toFormat","fmtOpts","toObject","includeConfig","toISO","toJSON","valueOf","as","plus","duration","friendlyDuration","minus","negate","mapUnits","fn","set","mixed","reconfigure","normalize","built","accumulated","lastUnit","own","ak","down","negated","durationish","validateStartEnd","start","end","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","after","before","split","isInterval","toDuration","startOf","diff","hasSame","isEmpty","isAfter","dateTime","isBefore","contains","splitAt","dateTimes","sorted","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","merge","intervals","b","sofar","final","xor","currentCount","ends","time","flattened","difference","toISODate","toISOTime","dateFormat","separator","invalidReason","mapEndpoints","mapFn","Info","hasDST","proto","setZone","isValidIANAZone","monthsFormat","weekdaysFormat","features","intlTokens","zones","relative","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","highOrderDiffs","differs","lowestOrder","highWater","differ","delta","remainingMillis","lowerOrderUnits","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","parseDigits","str","code","charCodeAt","search","min","max","digitRegex","append","MISSING_FTP","intUnit","post","deser","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","join","findIndex","groups","h","simple","escapeToken","unitForToken","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","tokenForPart","part","buildRegex","re","handlers","matches","all","matchIndex","dateTimeFromMatches","toField","Z","q","M","G","y","S","dummyDateTimeCache","getDummyDateTime","maybeExpandMacroToken","formatter","parts","includes","expandMacroTokens","explainFromTokens","disqualifyingUnit","regexString","rawMatches","parseFromTokens","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","js","getUTCDay","computeOrdinal","uncomputeOrdinal","table","month0","gregorianToWeek","gregObj","weekToGregorian","weekData","weekdayOfJan4","yearInDays","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","hasInvalidWeekData","validYear","validWeek","validWeekday","hasInvalidOrdinalData","validOrdinal","hasInvalidGregorianData","validMonth","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","MAX_DATE","unsupportedZone","possiblyCachedWeekData","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","toTechTimeFormat","suppressSeconds","suppressMilliseconds","includeOffset","includeZone","spaceZone","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","quickDT","tsNow","offsetProvis","diffRelative","calendary","unchanged","ot","_zone","isLuxonDateTime","fromJSDate","zoneToUse","fromSeconds","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","higherOrderInvalid","gregorian","tsFinal","offsetFinal","fromRFC2822","fromHTTP","fromFormat","localeToUse","fromString","fromSQL","isDateTime","resolvedLocaleOpts","toLocal","keepCalendarTime","newTS","offsetGuess","asObj","setLocale","settingWeekStuff","normalizedUnit","endOf","toLocaleString","toLocaleParts","toISOWeekDate","toRFC2822","toHTTP","toSQLDate","toSQLTime","toSQL","toMillis","toSeconds","toBSON","otherDateTime","durOpts","otherIsLater","diffNow","until","inputMs","toRelative","padding","toRelativeCalendar","every","fromFormatExplain","fromStringExplain","dateTimeish"],"mappings":"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"} \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.min.js b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.min.js new file mode 100644 index 0000000000..03f3699b4c --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.min.js @@ -0,0 +1 @@ +var luxon=function(e){"use strict";function r(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[t++]}};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t}(t(Error)),l=function(t){function e(e){return t.call(this,"Invalid DateTime: "+e.toMessage())||this}return o(e,t),e}(n),f=function(t){function e(e){return t.call(this,"Invalid Interval: "+e.toMessage())||this}return o(e,t),e}(n),d=function(t){function e(e){return t.call(this,"Invalid Duration: "+e.toMessage())||this}return o(e,t),e}(n),L=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t}(n),h=function(t){function e(e){return t.call(this,"Invalid unit "+e)||this}return o(e,t),e}(n),m=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t}(n),y=function(e){function t(){return e.call(this,"Zone is an abstract class")||this}return o(t,e),t}(n),v="numeric",g="short",p="long",w={year:v,month:v,day:v},k={year:v,month:g,day:v},b={year:v,month:p,day:v},O={year:v,month:p,day:v,weekday:p},S={hour:v,minute:v},T={hour:v,minute:v,second:v},M={hour:v,minute:v,second:v,timeZoneName:g},N={hour:v,minute:v,second:v,timeZoneName:p},D={hour:v,minute:v,hour12:!1},E={hour:v,minute:v,second:v,hour12:!1},x={hour:v,minute:v,second:v,hour12:!1,timeZoneName:g},F={hour:v,minute:v,second:v,hour12:!1,timeZoneName:p},Z={year:v,month:v,day:v,hour:v,minute:v},C={year:v,month:v,day:v,hour:v,minute:v,second:v},j={year:v,month:g,day:v,hour:v,minute:v},A={year:v,month:g,day:v,hour:v,minute:v,second:v},z={year:v,month:g,day:v,weekday:g,hour:v,minute:v},_={year:v,month:p,day:v,hour:v,minute:v,timeZoneName:g},q={year:v,month:p,day:v,hour:v,minute:v,second:v,timeZoneName:g},H={year:v,month:p,day:v,weekday:p,hour:v,minute:v,timeZoneName:p},U={year:v,month:p,day:v,weekday:p,hour:v,minute:v,second:v,timeZoneName:p};function R(e){return void 0===e}function W(e){return"number"==typeof e}function P(e){return"number"==typeof e&&e%1==0}function I(){try{return"undefined"!=typeof Intl&&Intl.DateTimeFormat}catch(e){return!1}}function J(){return!R(Intl.DateTimeFormat.prototype.formatToParts)}function Y(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(e){return!1}}function G(e,r,i){if(0!==e.length)return e.reduce(function(e,t){var n=[r(t),t];return e&&i(e[0],n[0])===e[0]?e:n},null)[1]}function $(n,e){return e.reduce(function(e,t){return e[t]=n[t],e},{})}function B(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Q(e,t,n){return P(e)&&t<=e&&e<=n}function K(e,t){return void 0===t&&(t=2),e.toString().lengthen.indexOf(c)&&rn(this.matrix,a,h,i,c)}else W(a[c])&&(o[c]=a[c])}for(var m in o)0!==o[m]&&(i[r]+=m===r?o[m]:o[m]/this.matrix[r][m]);return nn(this,{values:i},!0).normalize()},e.negate=function(){if(!this.isValid)return this;for(var e={},t=0,n=Object.keys(this.values);te},e.isBefore=function(e){return!!this.isValid&&this.e<=e},e.contains=function(e){return!!this.isValid&&(this.s<=e&&this.e>e)},e.set=function(e){var t=void 0===e?{}:e,n=t.start,r=t.end;return this.isValid?l.fromDateTimes(n||this.s,r||this.e):this},e.splitAt=function(){var t=this;if(!this.isValid)return[];for(var e=arguments.length,n=new Array(e),r=0;r+this.e?this.e:s;o.push(l.fromDateTimes(a,c)),a=c,u+=1}return o},e.splitBy=function(e){var t=un(e);if(!this.isValid||!t.isValid||0===t.as("milliseconds"))return[];for(var n,r,i=this.s,o=[];i+this.e?this.e:n,o.push(l.fromDateTimes(i,r)),i=r;return o},e.divideEqually=function(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]},e.overlaps=function(e){return this.e>e.s&&this.s=e.e)},e.equals=function(e){return!(!this.isValid||!e.isValid)&&(this.s.equals(e.s)&&this.e.equals(e.e))},e.intersection=function(e){if(!this.isValid)return this;var t=this.s>e.s?this.s:e.s,n=this.ee.e?this.e:e.e;return l.fromDateTimes(t,n)},l.merge=function(e){var t=e.sort(function(e,t){return e.s-t.s}).reduce(function(e,t){var n=e[0],r=e[1];return r?r.overlaps(t)||r.abutsStart(t)?[n,r.union(t)]:[n.concat([r]),t]:[n,t]},[[],null]),n=t[0],r=t[1];return r&&n.push(r),n},l.xor=function(e){for(var t,n,r=null,i=0,o=[],a=e.map(function(e){return[{time:e.s,type:"s"},{time:e.e,type:"e"}]}),u=V((t=Array.prototype).concat.apply(t,a).sort(function(e,t){return e.time-t.time}));!(n=u()).done;)var s=n.value,r=1===(i+="s"===s.type?1:-1)?s.time:(r&&+r!=+s.time&&o.push(l.fromDateTimes(r,s.time)),null);return l.merge(o)},e.difference=function(){for(var t=this,e=arguments.length,n=new Array(e),r=0;rae(n)?(t=n+1,u=1):t=n,Object.assign({weekYear:t,weekNumber:u,weekday:a},he(e))}function jn(e){var t,n=e.weekYear,r=e.weekNumber,i=e.weekday,o=xn(n,1,4),a=re(n),u=7*r+i-o-3;u<1?u+=re(t=n-1):athis.valueOf(),u=dn(a?this:e,a?e:this,o,i);return a?u.negate():u},e.diffNow=function(e,t){return void 0===e&&(e="milliseconds"),void 0===t&&(t={}),this.diff(I.local(),e,t)},e.until=function(e){return this.isValid?cn.fromDateTimes(this,e):this},e.hasSame=function(e,t){if(!this.isValid)return!1;if("millisecond"===t)return this.valueOf()===e.valueOf();var n=e.valueOf();return this.startOf(t)<=n&&n<=this.endOf(t)},e.equals=function(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)},e.toRelative=function(e){if(void 0===e&&(e={}),!this.isValid)return null;var t=e.base||I.fromObject({zone:this.zone}),n=e.padding?thisthis.set({month:1}).offset||this.offset>this.set({month:5}).offset)}},{key:"isInLeapYear",get:function(){return ne(this.year)}},{key:"daysInMonth",get:function(){return ie(this.year,this.month)}},{key:"daysInYear",get:function(){return this.isValid?re(this.year):NaN}},{key:"weeksInWeekYear",get:function(){return this.isValid?ae(this.weekYear):NaN}}],[{key:"DATE_SHORT",get:function(){return w}},{key:"DATE_MED",get:function(){return k}},{key:"DATE_FULL",get:function(){return b}},{key:"DATE_HUGE",get:function(){return O}},{key:"TIME_SIMPLE",get:function(){return S}},{key:"TIME_WITH_SECONDS",get:function(){return T}},{key:"TIME_WITH_SHORT_OFFSET",get:function(){return M}},{key:"TIME_WITH_LONG_OFFSET",get:function(){return N}},{key:"TIME_24_SIMPLE",get:function(){return D}},{key:"TIME_24_WITH_SECONDS",get:function(){return E}},{key:"TIME_24_WITH_SHORT_OFFSET",get:function(){return x}},{key:"TIME_24_WITH_LONG_OFFSET",get:function(){return F}},{key:"DATETIME_SHORT",get:function(){return Z}},{key:"DATETIME_SHORT_WITH_SECONDS",get:function(){return C}},{key:"DATETIME_MED",get:function(){return j}},{key:"DATETIME_MED_WITH_SECONDS",get:function(){return A}},{key:"DATETIME_MED_WITH_WEEKDAY",get:function(){return z}},{key:"DATETIME_FULL",get:function(){return _}},{key:"DATETIME_FULL_WITH_SECONDS",get:function(){return q}},{key:"DATETIME_HUGE",get:function(){return H}},{key:"DATETIME_HUGE_WITH_SECONDS",get:function(){return U}}]),I}();function sr(e){if(ur.isDateTime(e))return e;if(e&&e.valueOf&&W(e.valueOf()))return ur.fromJSDate(e);if(e&&"object"==typeof e)return ur.fromObject(e);throw new m("Unknown datetime argument: "+e+", of type "+typeof e)}return e.DateTime=ur,e.Duration=an,e.FixedOffsetZone=Ue,e.IANAZone=qe,e.Info=ln,e.Interval=cn,e.InvalidZone=Re,e.LocalZone=Ce,e.Settings=Qe,e.Zone=Fe,e}({}); \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.min.js.map b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.min.js.map new file mode 100644 index 0000000000..09ddafd1b2 --- /dev/null +++ b/modules/blogging/app/Volo.BloggingTestApp/wwwroot/libs/luxon/luxon.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"build/global/luxon.js","sources":["0"],"names":["luxon","exports","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","Constructor","protoProps","staticProps","prototype","_inheritsLoose","subClass","superClass","create","constructor","__proto__","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","_setPrototypeOf","p","_construct","Parent","args","Class","Reflect","construct","sham","Proxy","Date","toString","call","e","_isNativeReflectConstruct","a","push","apply","instance","Function","bind","arguments","_wrapNativeSuper","_cache","Map","undefined","fn","indexOf","TypeError","has","get","set","Wrapper","this","value","_arrayLikeToArray","arr","len","arr2","Array","_createForOfIteratorHelperLoose","Symbol","iterator","next","isArray","minLen","n","slice","name","from","test","_unsupportedIterableToArray","done","LuxonError","_Error","Error","InvalidDateTimeError","_LuxonError","reason","toMessage","InvalidIntervalError","_LuxonError2","InvalidDurationError","_LuxonError3","ConflictingSpecificationError","_LuxonError4","InvalidUnitError","_LuxonError5","unit","InvalidArgumentError","_LuxonError6","ZoneIsAbstractError","_LuxonError7","s","l","DATE_SHORT","year","month","day","DATE_MED","DATE_FULL","DATE_HUGE","weekday","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hour12","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","isUndefined","isNumber","isInteger","hasIntl","Intl","DateTimeFormat","hasFormatToParts","formatToParts","hasRelative","RelativeTimeFormat","bestBy","by","compare","reduce","best","pair","pick","obj","keys","k","hasOwnProperty","prop","integerBetween","thing","bottom","top","padStart","input","repeat","parseInteger","string","parseInt","parseMillis","fraction","f","parseFloat","Math","floor","roundTo","number","digits","towardZero","factor","pow","trunc","round","isLeapYear","daysInYear","daysInMonth","x","modMonth","objToLocalTS","d","UTC","millisecond","setUTCFullYear","getUTCFullYear","weeksInWeekYear","weekYear","p1","last","p2","untruncateYear","parseZoneInfo","ts","offsetFormat","locale","timeZone","date","intlOpts","modified","assign","intl","parsed","find","m","type","toLowerCase","without","format","substring","replace","signedOffset","offHourStr","offMinuteStr","offHour","Number","isNaN","offMin","is","asNumber","numericValue","normalizeObject","normalizer","nonUnitKeys","normalized","u","v","formatOffset","offset","hours","minutes","abs","sign","base","RangeError","timeObject","ianaRegex","stringify","JSON","sort","monthsLong","monthsShort","monthsNarrow","months","weekdaysLong","weekdaysShort","weekdaysNarrow","weekdays","meridiems","erasLong","erasShort","erasNarrow","eras","stringifyTokens","splits","tokenToString","_step","_iterator","token","literal","val","_macroTokenToFormatOpts","D","DD","DDD","DDDD","t","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","Formatter","formatOpts","opts","loc","systemLoc","parseFormat","fmt","current","currentFull","bracketed","c","charAt","macroTokenToFormatOpts","_proto","formatWithSystemDefault","dt","redefaultToSystem","dtFormatter","formatDateTime","formatDateTimeParts","resolvedOptions","num","forceSimple","padTo","numberFormatter","formatDateTimeFromString","extract","_this","isOffsetFixed","allowZ","isValid","zone","meridiem","knownEnglish","standalone","era","listingMode","useDateTimeFormatter","outputCalendar","offsetName","zoneName","weekNumber","ordinal","quarter","formatDurationFromString","dur","tokenToField","lildur","_this2","tokens","realTokens","found","_ref","concat","collapsed","shiftTo","map","filter","mapped","Invalid","explanation","Zone","equals","singleton","LocalZone","_Zone","getTimezoneOffset","otherZone","matchingRegex","RegExp","source","dtfCache","typeToPos","ianaZoneCache","IANAZone","valid","isValidZone","resetCache","isValidSpecifier","match","parseGMTOffset","specifier","formatted","fMonth","fDay","dtf","_ref2","filled","_formatted$i","pos","partsOffset","exec","asTS","over","singleton$1","FixedOffsetZone","fixed","utcInstance","parseSpecifier","r","InvalidZone","NaN","normalizeZone","defaultZone","lowered","now","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","throwOnInvalid","Settings","resetCaches","Locale","z","numberingSystem","intlDTCache","getCachedDTF","locString","intlNumCache","intlRelCache","getCachedRTF","cacheKeyOpts","excluded","sourceKeys","_objectWithoutPropertiesLoose","inf","sysLocaleCache","listStuff","defaultOK","englishFn","intlFn","mode","PolyNumberFormatter","useGrouping","minimumIntegerDigits","NumberFormat","getCachedINF","PolyDateFormatter","universal","DateTime","fromMillis","_proto2","toJSDate","tokenFormat","knownFormat","dateTimeHuge","formatString","PolyRelFormatter","isEnglish","style","rtf","_proto3","count","numeric","narrow","units","years","quarters","weeks","days","seconds","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","formatRelativeTime","numbering","specifiedLocale","localeStr","_parseLocaleString","uIndex","options","smaller","calendar","parseLocaleString","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","weekdaysCache","monthsCache","meridiemCache","eraCache","fastNumbersCached","fromOpts","defaultToEN","computedSys","systemLocale","fromObject","_temp","_proto4","hasFTP","isActuallyEn","hasNoWeirdness","clone","alts","getOwnPropertyNames","redefaultToEN","formatStr","ms","utc","mapMonths","mapWeekdays","_this3","_this4","field","matching","fastNumbers","relFormatter","startsWith","other","combineRegexes","_len","regexes","_key","full","combineExtractors","_len2","extractors","_key2","ex","mergedVals","mergedZone","cursor","_ex","parse","_len3","patterns","_key3","_i","_patterns","_patterns$_i","regex","extractor","simpleParse","_len4","_key4","ret","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOYmd","extractISOTime","extractISOOffset","local","fullOffset","extractIANAZone","isoDuration","extractISODuration","maybeNegate","hasNegativePrefix","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","milliseconds","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","result","rfc2822","extractRFC2822","obsOffset","milOffset","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDataAndTime","extractISOTimeAndOffset","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOYmdTimeOffsetAndIANAZone","extractISOTimeOffsetAndIANAZone","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","reverse","clear","conf","values","conversionAccuracy","Duration","convert","matrix","fromMap","fromUnit","toMap","toUnit","conv","raw","added","ceil","normalizeValues","vals","previous","config","accurate","invalid","isLuxonDuration","normalizeUnit","fromISO","text","week","isDuration","toFormat","fmtOpts","toObject","includeConfig","toISO","toJSON","valueOf","as","plus","duration","friendlyDuration","minus","negate","mapUnits","_Object$keys","reconfigure","normalize","lastUnit","built","accumulated","_step2","_iterator2","own","ak","down","negated","_i2","_Object$keys2","_step3","_iterator3","durationish","INVALID$1","Interval","start","end","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","after","before","_split","split","_dur","isInterval","toDuration","startOf","diff","hasSame","isEmpty","isAfter","dateTime","isBefore","contains","splitAt","dateTimes","sorted","results","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","merge","intervals","_intervals$sort$reduc","b","item","sofar","final","xor","_Array$prototype","currentCount","ends","time","difference","toISODate","toISOTime","dateFormat","_temp2","_ref3$separator","separator","invalidReason","mapEndpoints","mapFn","Info","hasDST","proto","setZone","isValidIANAZone","_ref$locale","_ref$numberingSystem","_ref$outputCalendar","monthsFormat","_ref2$locale","_ref2$numberingSystem","_ref2$outputCalendar","_temp3","_ref3","_ref3$locale","_ref3$numberingSystem","weekdaysFormat","_temp4","_ref4","_ref4$locale","_ref4$numberingSystem","_temp5","_ref5$locale","_temp6","_ref6$locale","features","intlTokens","zones","relative","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","_diff","_cursor$plus3","_highOrderDiffs","_differs","_cursor$plus","lowestOrder","delta","_cursor$plus2","highWater","_differs$_i","differ","highOrderDiffs","remainingMillis","lowerOrderUnits","_Duration$fromMillis","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","digitRegex","append","MISSING_FTP","intUnit","post","deser","str","code","charCodeAt","search","_numberingSystemsUTF","min","max","parseDigits","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","join","findIndex","groups","simple","unitForToken","_ref5","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","partTypeStyleToTokenVal","2-digit","short","long","dayperiod","dayPeriod","dummyDateTimeCache","maybeExpandMacroToken","part","tokenForPart","includes","explainFromTokens","disqualifyingUnit","matches","_buildRegex","handlers","_match","h","all","matchIndex","rawMatches","_ref6","Z","q","M","G","y","S","toField","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","js","getUTCDay","computeOrdinal","uncomputeOrdinal","table","month0","gregorianToWeek","gregObj","weekToGregorian","weekData","weekdayOfJan4","yearInDays","_uncomputeOrdinal","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","_uncomputeOrdinal2","hasInvalidGregorianData","validYear","validMonth","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","INVALID$2","unsupportedZone","possiblyCachedWeekData","clone$1","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","_fixOffset","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","toTechTimeFormat","_ref$suppressSeconds","suppressSeconds","_ref$suppressMillisec","suppressMilliseconds","includeOffset","_ref$includeZone","includeZone","_ref$spaceZone","spaceZone","_ref$format","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedUnits$1","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","quickDT","tsNow","_objToTS","diffRelative","calendary","ot","_zone","isLuxonDateTime","fromJSDate","zoneToUse","fromSeconds","offsetProvis","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","defaultValues","useWeekData","objNow","foundFirst","validOrdinal","validWeek","validWeekday","_objToTS2","_parseISODate","fromRFC2822","_parseRFC2822Date","trim","fromHTTP","_parseHTTPDate","fromFormat","_explainFromTokens","_opts$locale","_opts$numberingSystem","localeToUse","_parseFromTokens","fromString","fromSQL","_parseSQL","isDateTime","resolvedLocaleOpts","_Formatter$create$res","toLocal","_ref3$keepLocalTime","_ref3$keepCalendarTim","keepCalendarTime","offsetGuess","newTS","setLocale","mixed","_objToTS4","normalizedUnit","endOf","_this$plus","toLocaleString","toLocaleParts","_ref5$format","toISOWeekDate","_ref6$suppressMillise","_ref6$suppressSeconds","_ref6$includeOffset","_ref6$format","toRFC2822","toHTTP","toSQLDate","toSQLTime","_ref7","_ref7$includeOffset","_ref7$includeZone","toSQL","toMillis","toSeconds","toBSON","otherDateTime","durOpts","otherIsLater","diffed","diffNow","until","inputMs","toRelative","padding","toRelativeCalendar","every","fromFormatExplain","_options$locale","_options$numberingSys","fromStringExplain","dateTimeish"],"mappings":"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"} \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj index 70f0218a37..becd1022c2 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj @@ -13,6 +13,7 @@ + diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs index f90c504c0e..64f77c985b 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs @@ -1,10 +1,12 @@ using Volo.Abp.Application; +using Volo.Abp.BlobStoring; using Volo.Abp.Modularity; namespace Volo.Blogging { [DependsOn(typeof(BloggingDomainSharedModule), - typeof(AbpDddApplicationModule))] + typeof(AbpDddApplicationModule), + typeof(AbpBlobStoringModule))] public class BloggingApplicationContractsSharedModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingFileContainer.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingFileContainer.cs new file mode 100644 index 0000000000..e2bfdb95c7 --- /dev/null +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingFileContainer.cs @@ -0,0 +1,10 @@ +using Volo.Abp.BlobStoring; + +namespace Volo.Blogging +{ + [BlobContainerName("blogging-files")] + public class BloggingFileContainer + { + + } +} diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs index cdfd4cb836..831b6d53a8 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs @@ -2,9 +2,9 @@ using System.ComponentModel.DataAnnotations; using System.IO; using System.Threading.Tasks; -using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Volo.Abp; +using Volo.Abp.BlobStoring; using Volo.Abp.Validation; using Volo.Blogging.Areas.Blog.Helpers; @@ -12,42 +12,28 @@ namespace Volo.Blogging.Files { public class FileAppService : BloggingAppServiceBase, IFileAppService { + protected IBlobContainer BlobContainer { get; } public BlogFileOptions Options { get; } - private readonly ILogger _logger; - public FileAppService(IOptions options, ILogger logger) + public FileAppService( + IOptions options, + IBlobContainer blobContainer) { - _logger = logger; + BlobContainer = blobContainer; Options = options.Value; } - public virtual Task GetAsync(string name) + public virtual async Task GetAsync(string name) { Check.NotNullOrWhiteSpace(name, nameof(name)); - if (!Directory.Exists(Options.FileUploadLocalFolder)) + return new RawFileDto { - Directory.CreateDirectory(Options.FileUploadLocalFolder); - return Task.FromResult( - new RawFileDto - { - Bytes = new byte[0] - } - ); - } - - var filePath = Path.Combine(Options.FileUploadLocalFolder, name); - - if (File.Exists(filePath)) - { - return Task.FromResult(new RawFileDto {Bytes = File.ReadAllBytes(filePath)}); - } - - _logger.LogError($"Cannot find the file {filePath}"); - return Task.FromResult(RawFileDto.EmptyResult()); + Bytes = await BlobContainer.GetAllBytesAsync(name) + }; } - public virtual Task CreateAsync(FileUploadInputDto input) + public virtual async Task CreateAsync(FileUploadInputDto input) { if (input.Bytes.IsNullOrEmpty()) { @@ -65,20 +51,14 @@ namespace Volo.Blogging.Files } var uniqueFileName = GenerateUniqueFileName(Path.GetExtension(input.Name)); - var filePath = Path.Combine(Options.FileUploadLocalFolder, uniqueFileName); - if (!Directory.Exists(Options.FileUploadLocalFolder)) - { - Directory.CreateDirectory(Options.FileUploadLocalFolder); - } - - File.WriteAllBytes(filePath, input.Bytes); //TODO: Previously was using WriteAllBytesAsync, but it's only in .netcore. + await BlobContainer.SaveAsync(uniqueFileName, input.Bytes); - return Task.FromResult(new FileUploadOutputDto + return new FileUploadOutputDto { Name = uniqueFileName, WebUrl = "/api/blogging/files/www/" + uniqueFileName - }); + }; } private static void ThrowValidationException(string message, string memberName) From e99ea383005b5d876aecf4dedec147b262db35b3 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 23 Sep 2020 16:28:56 +0800 Subject: [PATCH 025/143] Obsolete the FileUploadLocalFolder --- .../app/Volo.BloggingTestApp/BloggingTestAppModule.cs | 5 ----- .../Volo/Blogging/Files/BlogFileOptions.cs | 5 ++++- .../Volo/Blogging/Files/FileAppService.cs | 3 --- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs index 4f04b56d0b..600cc05f84 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs +++ b/modules/blogging/app/Volo.BloggingTestApp/BloggingTestAppModule.cs @@ -132,11 +132,6 @@ namespace Volo.BloggingTestApp options.DefaultThemeName = BasicTheme.Name; }); - Configure(options => - { - options.FileUploadLocalFolder = Path.Combine(hostingEnvironment.WebRootPath, "files"); - }); - Configure(options => { options.Containers.ConfigureDefault(container => diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/BlogFileOptions.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/BlogFileOptions.cs index 7243595802..3096341fa2 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/BlogFileOptions.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/BlogFileOptions.cs @@ -1,4 +1,6 @@ -namespace Volo.Blogging.Files +using System; + +namespace Volo.Blogging.Files { /* TODO: * - It is not to have different options for all different modules. We should find a more generic way. @@ -6,6 +8,7 @@ */ public class BlogFileOptions { + [Obsolete("Now store using blob storing system, will be deleted in a next version")] public string FileUploadLocalFolder { get; set; } } } diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs index 831b6d53a8..8fdd12858d 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Files/FileAppService.cs @@ -13,14 +13,11 @@ namespace Volo.Blogging.Files public class FileAppService : BloggingAppServiceBase, IFileAppService { protected IBlobContainer BlobContainer { get; } - public BlogFileOptions Options { get; } public FileAppService( - IOptions options, IBlobContainer blobContainer) { BlobContainer = blobContainer; - Options = options.Value; } public virtual async Task GetAsync(string name) From 42c0a78d4bebd5671e0016251e27ea9d8da44442 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 23 Sep 2020 13:07:19 +0300 Subject: [PATCH 026/143] docs: group Angular pages based on topic --- docs/en/docs-nav.json | 148 ++++++++++++++++++++++++------------------ 1 file changed, 84 insertions(+), 64 deletions(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index b395bf67f0..ef09076c5e 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -436,76 +436,96 @@ "path": "UI/Angular/Quick-Start.md" }, { - "text": "Environment", - "path": "UI/Angular/Environment.md" - }, - { - "text": "Service Proxies", - "path": "UI/Angular/Service-Proxies.md" - }, - { - "text": "HTTP Requests", - "path": "UI/Angular/HTTP-Requests.md" - }, - { - "text": "Localization", - "path": "UI/Angular/Localization.md" - }, - { - "text": "Permission Management", - "path": "UI/Angular/Permission-Management.md" - }, - { - "text": "Multi Tenancy", - "path": "UI/Angular/Multi-Tenancy.md" - }, - { - "text": "Confirmation Popup", - "path": "UI/Angular/Confirmation-Service.md" - }, - { - "text": "Toast Overlay", - "path": "UI/Angular/Toaster-Service.md" - }, - { - "text": "Config State", - "path": "UI/Angular/Config-State.md" - }, - { - "text": "Modifying the Menu", - "path": "UI/Angular/Modifying-the-Menu.md" - }, - { - "text": "Component Replacement", - "path": "UI/Angular/Component-Replacement.md" - }, - { - "text": "Custom Setting Page", - "path": "UI/Angular/Custom-Setting-Page.md" - }, - { - "text": "Lazy Loading Scripts & Styles", - "path": "UI/Angular/Lazy-Load-Service.md" - }, - { - "text": "DomInsertionService", - "path": "UI/Angular/Dom-Insertion-Service.md" - }, - { - "text": "ContentProjectionService", - "path": "UI/Angular/Content-Projection-Service.md" + "text": "Development", + "items": [ + { + "text": "Environment Variables", + "path": "UI/Angular/Environment.md" + }, + { + "text": "Service Proxies", + "path": "UI/Angular/Service-Proxies.md" + } + ] }, { - "text": "TrackByService", - "path": "UI/Angular/Track-By-Service.md" + "text": "Core Functionality", + "items": [ + { + "text": "Config State", + "path": "UI/Angular/Config-State.md" + }, + { + "text": "HTTP Requests", + "path": "UI/Angular/HTTP-Requests.md" + }, + { + "text": "Localization", + "path": "UI/Angular/Localization.md" + }, + { + "text": "Permission Management", + "path": "UI/Angular/Permission-Management.md" + }, + { + "text": "Multi Tenancy", + "path": "UI/Angular/Multi-Tenancy.md" + } + ] }, { - "text": "SubscriptionService", - "path": "UI/Angular/Subscription-Service.md" + "text": "Utilities", + "items": [ + { + "text": "RxJS Subscriptions", + "path": "UI/Angular/Subscription-Service.md" + }, + { + "text": "Working with Lists", + "path": "UI/Angular/List-Service.md" + }, + { + "text": "Easy *ngFor trackBy", + "path": "UI/Angular/Track-By-Service.md" + }, + { + "text": "Inserting Scripts & Styles to DOM", + "path": "UI/Angular/Dom-Insertion-Service.md" + }, + { + "text": "Lazy Loading Scripts & Styles", + "path": "UI/Angular/Lazy-Load-Service.md" + }, + { + "text": "Projecting Angular Content", + "path": "UI/Angular/Content-Projection-Service.md" + }, + { + "text": "Confirmation Popup", + "path": "UI/Angular/Confirmation-Service.md" + }, + { + "text": "Toast Overlay", + "path": "UI/Angular/Toaster-Service.md" + } + ] }, { - "text": "ListService", - "path": "UI/Angular/List-Service.md" + "text": "Customization", + "items": [ + { + "text": "Modifying the Menu", + "path": "UI/Angular/Modifying-the-Menu.md" + }, + { + "text": "Component Replacement", + "path": "UI/Angular/Component-Replacement.md" + }, + { + "text": "Custom Setting Page", + "path": "UI/Angular/Custom-Setting-Page.md" + } + ] } ] }, From 507a26b9f03f032ba9a63b06f7f95b1a5bcc0fbc Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 23 Sep 2020 13:07:46 +0300 Subject: [PATCH 027/143] docs: update links to reflect new Angular topic groups --- docs/en/UI/Angular/Config-State.md | 2 +- docs/en/UI/Angular/Content-Projection-Service.md | 4 ++-- docs/en/UI/Angular/Custom-Setting-Page.md | 4 ---- docs/en/UI/Angular/Dom-Insertion-Service.md | 4 ++-- docs/en/UI/Angular/Environment.md | 9 ++++----- docs/en/UI/Angular/Lazy-Load-Service.md | 4 ++-- docs/en/UI/Angular/List-Service.md | 5 +++++ docs/en/UI/Angular/Multi-Tenancy.md | 2 +- docs/en/UI/Angular/Quick-Start.md | 2 +- docs/en/UI/Angular/Service-Proxies.md | 2 +- docs/en/UI/Angular/Subscription-Service.md | 4 ++-- docs/en/UI/Angular/Toaster-Service.md | 2 +- docs/en/UI/Angular/Track-By-Service.md | 4 ++-- 13 files changed, 24 insertions(+), 24 deletions(-) diff --git a/docs/en/UI/Angular/Config-State.md b/docs/en/UI/Angular/Config-State.md index bda3250b32..0c1070f54d 100644 --- a/docs/en/UI/Angular/Config-State.md +++ b/docs/en/UI/Angular/Config-State.md @@ -233,4 +233,4 @@ Please refer to `Config.Environment` type for all the properties you can pass to ## What's Next? -- [Modifying the Menu](./Modifying-the-Menu.md) \ No newline at end of file +- [HTTP Requests](./Http-Requests) diff --git a/docs/en/UI/Angular/Content-Projection-Service.md b/docs/en/UI/Angular/Content-Projection-Service.md index db7c52be81..7e03776835 100644 --- a/docs/en/UI/Angular/Content-Projection-Service.md +++ b/docs/en/UI/Angular/Content-Projection-Service.md @@ -1,4 +1,4 @@ -# Content Projection +# Projecting Angular Content You can use the `ContentProjectionService` in @abp/ng.core package in order to project content in an easy and explicit way. @@ -75,4 +75,4 @@ projectContent | TemplateRef>( ## What's Next? -- [TrackByService](./Track-By-Service.md) +- [Confirmation Popup](./Confirmation-Service.md) diff --git a/docs/en/UI/Angular/Custom-Setting-Page.md b/docs/en/UI/Angular/Custom-Setting-Page.md index e4ee6d45c2..9a17f6ad7b 100644 --- a/docs/en/UI/Angular/Custom-Setting-Page.md +++ b/docs/en/UI/Angular/Custom-Setting-Page.md @@ -35,7 +35,3 @@ export class AppComponent { Navigate to `/setting-management` route to see the changes: ![Custom Settings Tab](./images/custom-settings.png) - -## What's Next? - -- [Lazy Loading Scripts & Styles](./Lazy-Load-Service.md) diff --git a/docs/en/UI/Angular/Dom-Insertion-Service.md b/docs/en/UI/Angular/Dom-Insertion-Service.md index 88f30136b3..d56e4f8b0e 100644 --- a/docs/en/UI/Angular/Dom-Insertion-Service.md +++ b/docs/en/UI/Angular/Dom-Insertion-Service.md @@ -1,4 +1,4 @@ -# Dom Insertion (of Scripts and Styles) +# Inserting Scripts & Styles to DOM You can use the `DomInsertionService` in @abp/ng.core package in order to insert scripts and styles in an easy and explicit way. @@ -137,4 +137,4 @@ The `has` method returns a boolean value that indicates the given content has al ## What's Next? -- [ContentProjectionService](./Content-Projection-Service.md) +- [Lazy Loading Scripts & Styles](./Lazy-Load-Service.md) diff --git a/docs/en/UI/Angular/Environment.md b/docs/en/UI/Angular/Environment.md index 402e110f94..67fe4eb315 100644 --- a/docs/en/UI/Angular/Environment.md +++ b/docs/en/UI/Angular/Environment.md @@ -4,7 +4,7 @@ Every application needs some **environment** variables. In Angular world, this i Current `Environment` configuration holds sub config classes as follows: -```typescript +```js export interface Environment { apis: Apis; application: Application; @@ -16,7 +16,7 @@ export interface Environment { ## Apis -```typescript +```js export interface Apis { [key: string]: ApiConfig; default: ApiConfig; @@ -56,7 +56,7 @@ Everything else will be sent to `"https://localhost:8080"` ## Application -```typescript +```js export interface Application { name: string; baseUrl?: string; @@ -80,7 +80,7 @@ Abp Framework supports this out of box. To integrate an existing config json into the `environment`, you need to set `remoteEnv` -```typescript +```js export type customMergeFn = ( localEnv: Partial, remoteEnv: any, @@ -106,4 +106,3 @@ export interface RemoteEnv { ## What's Next? * [Service Proxies](./Service-Proxies.md) - diff --git a/docs/en/UI/Angular/Lazy-Load-Service.md b/docs/en/UI/Angular/Lazy-Load-Service.md index b4eddf7b25..344b446107 100644 --- a/docs/en/UI/Angular/Lazy-Load-Service.md +++ b/docs/en/UI/Angular/Lazy-Load-Service.md @@ -1,4 +1,4 @@ -# How to Lazy Load Scripts and Styles +# Lazy Loading Scripts & Styles You can use the `LazyLoadService` in @abp/ng.core package in order to lazy load scripts and styles in an easy and explicit way. @@ -210,4 +210,4 @@ load(strategy: LoadingStrategy, retryTimes?: number, retryDelay?: number): Obser ## What's Next? -- [DomInsertionService](./Dom-Insertion-Service.md) +- [Projecting Angular Content](./Content-Projection-Service.md) diff --git a/docs/en/UI/Angular/List-Service.md b/docs/en/UI/Angular/List-Service.md index f65f0db4cd..f934ec49c2 100644 --- a/docs/en/UI/Angular/List-Service.md +++ b/docs/en/UI/Angular/List-Service.md @@ -177,3 +177,8 @@ As of v3.0, with ngx-datatable, the `page` property has to be set as `0` for ini ``` **Important Note:** The `abp-table` is not removed, but is deprecated and will be removed in the future. Please consider switching to ngx-datatable. + + +## What's Next? + +- [Easy *ngFor trackBy](./Track-By-Service.md) diff --git a/docs/en/UI/Angular/Multi-Tenancy.md b/docs/en/UI/Angular/Multi-Tenancy.md index fb9fb54f76..e4532a5ee5 100644 --- a/docs/en/UI/Angular/Multi-Tenancy.md +++ b/docs/en/UI/Angular/Multi-Tenancy.md @@ -132,4 +132,4 @@ The app sends the `__tenant` header that contains the current tenant id on each ## What's Next? -- [Confirmation Popup](./Confirmation-Service.md) +- [RxJS Subscriptions](./Subscription-Service.md) diff --git a/docs/en/UI/Angular/Quick-Start.md b/docs/en/UI/Angular/Quick-Start.md index e054b522ea..a58671156c 100644 --- a/docs/en/UI/Angular/Quick-Start.md +++ b/docs/en/UI/Angular/Quick-Start.md @@ -209,4 +209,4 @@ In addition, you can [deploy your application to certain targets using the Angul ## What's Next? -- [Environment](./Environment.md) +- [Environment Variables](./Environment.md) diff --git a/docs/en/UI/Angular/Service-Proxies.md b/docs/en/UI/Angular/Service-Proxies.md index 7dfb2c052c..ece959a90d 100644 --- a/docs/en/UI/Angular/Service-Proxies.md +++ b/docs/en/UI/Angular/Service-Proxies.md @@ -141,4 +141,4 @@ export class BookComponent implements OnInit { ## What's Next? -- [HTTP Requests](./Http-Requests) +- [Config State](./Config-State.md) diff --git a/docs/en/UI/Angular/Subscription-Service.md b/docs/en/UI/Angular/Subscription-Service.md index 5d920df96e..02fee46dc1 100644 --- a/docs/en/UI/Angular/Subscription-Service.md +++ b/docs/en/UI/Angular/Subscription-Service.md @@ -1,4 +1,4 @@ -# Easy Unsubscription for Your Observables +# RxJS Subscriptions `SubscriptionService` is a utility service to provide an easy unsubscription from RxJS observables in Angular components and directives. Please see [why you should unsubscribe from observables on instance destruction](https://angular.io/guide/lifecycle-hooks#cleaning-up-on-instance-destruction). @@ -200,4 +200,4 @@ class DemoComponent implements OnInit { ## What's Next? -- [ListService](./List-Service.md) +- [Working with Lists](./List-Service.md) diff --git a/docs/en/UI/Angular/Toaster-Service.md b/docs/en/UI/Angular/Toaster-Service.md index faa5632ab8..d2c1fc08f3 100644 --- a/docs/en/UI/Angular/Toaster-Service.md +++ b/docs/en/UI/Angular/Toaster-Service.md @@ -156,4 +156,4 @@ Removes all open toasts. ## What's Next? -- [Config State](./Config-State.md) +- [Modifying the Menu](./Modifying-the-Menu.md) diff --git a/docs/en/UI/Angular/Track-By-Service.md b/docs/en/UI/Angular/Track-By-Service.md index 050706accd..7883be4754 100644 --- a/docs/en/UI/Angular/Track-By-Service.md +++ b/docs/en/UI/Angular/Track-By-Service.md @@ -1,4 +1,4 @@ -# Easy TrackByFunction Implementation +# Easy *ngFor trackBy `TrackByService` is a utility service to provide an easy implementation for one of the most frequent needs in Angular templates: `TrackByFunction`. Please see [this page in Angular docs](https://angular.io/guide/template-syntax#ngfor-with-trackby) for its purpose. @@ -116,4 +116,4 @@ class DemoComponent { ## What's Next? -- [SubscriptionService](./Subscription-Service.md) +- [Inserting Scripts & Styles to DOM](./Dom-Insertion-Service.md) From ae76faf058470550a6619d4100dd02a8d5e31616 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 23 Sep 2020 14:04:59 +0300 Subject: [PATCH 028/143] docs: change Subscription-Service.md title --- docs/en/UI/Angular/Multi-Tenancy.md | 29 ++++++++++------------ docs/en/UI/Angular/Subscription-Service.md | 2 +- docs/en/docs-nav.json | 2 +- 3 files changed, 15 insertions(+), 18 deletions(-) diff --git a/docs/en/UI/Angular/Multi-Tenancy.md b/docs/en/UI/Angular/Multi-Tenancy.md index e4532a5ee5..c3e54c5f83 100644 --- a/docs/en/UI/Angular/Multi-Tenancy.md +++ b/docs/en/UI/Angular/Multi-Tenancy.md @@ -2,8 +2,8 @@ ABP Angular UI supports the multi-tenancy. The following features related to multi-tenancy are available in the startup templates. - ![Tenants Page](./images/tenants-page.png) +

    Tenants page

    On the page above, you can; @@ -13,13 +13,12 @@ On the page above, you can; - Edit an existing tenant. - Delete a tenant. - ![Tenant Switching Component](./images/tenant-switching-box.png) +

    Tenant Switching Component

    You can switch between existing tenants by using the tenant switching component in the child pages of the `AccountLayoutComponent` (like Login page). Angular UI sends the selected tenant id to the backend as `__tenant` header on each request. - ## Domain Tenant Resolver Angular UI can get the tenant name from the app running URL. You can determine the current tenant by subdomain (like mytenant1.mydomain.com) or by the whole domain (like mytenant.com). To do this, you need to set the `application.baseUrl` property in the environment: @@ -32,10 +31,10 @@ Subdomain resolver: export const environment = { //... application: { - baseUrl: 'https://{0}.mydomain.com/' + baseUrl: "https://{0}.mydomain.com/", }, //... -} +}; ``` **{0}** is the placeholder to determine current tenant's unique name. @@ -44,7 +43,6 @@ After the configuration above, if your app runs on the `mytenant1.mydomain.com`, > **Important Note:** If you define the `baseUrl` with the placeholder (**{0}**), the tenant switching component in the child pages of the `AccountLayoutComponent` (like Login page) will be hidden. - Domain resolver: ```js @@ -53,10 +51,10 @@ Domain resolver: export const environment = { //... application: { - baseUrl: 'https://{0}.com/' + baseUrl: "https://{0}.com/", }, //... -} +}; ``` After the configuration above, if your app runs on the `mytenant.com`, the app will get the tenant name as **mytenant**. @@ -71,29 +69,28 @@ The **{0}** placeholder can be put to the API URLs in the environment to determi export const environment = { //... application: { - baseUrl: 'https://{0}.mydomain.com/', + baseUrl: "https://{0}.mydomain.com/", //... }, oAuthConfig: { - issuer: 'https://{0}.ids.mydomain.com', + issuer: "https://{0}.ids.mydomain.com", //... }, apis: { default: { - url: 'https://{0}.api.mydomain.com', + url: "https://{0}.api.mydomain.com", }, AbpIdentity: { - url: 'https://{0}.identity.mydomain.com', + url: "https://{0}.identity.mydomain.com", }, }, -} +}; ``` > **Important Note:** The `application.baseUrl` and the `{0}` placeholder in the value of the `baseUrl` property are required to be able to get tenant from running URL. Other placeholders in API URLs are optional. After the configuration above, if your app runs on the `mytenant1.mydomain.com`, the app will get tenant name as **mytenant1** and replace the environment object in `ConfigState` on app initialization as follows: - ```js // environment object in ConfigState @@ -128,8 +125,8 @@ The app sends the `__tenant` header that contains the current tenant id on each ## See Also -* [Multi Tenancy in ABP](../../Multi-Tenancy.md) +- [Multi Tenancy in ABP](../../Multi-Tenancy.md) ## What's Next? -- [RxJS Subscriptions](./Subscription-Service.md) +- [Managing RxJS Subscriptions](./Subscription-Service.md) diff --git a/docs/en/UI/Angular/Subscription-Service.md b/docs/en/UI/Angular/Subscription-Service.md index 02fee46dc1..dee77cbf1e 100644 --- a/docs/en/UI/Angular/Subscription-Service.md +++ b/docs/en/UI/Angular/Subscription-Service.md @@ -1,4 +1,4 @@ -# RxJS Subscriptions +# Managing RxJS Subscriptions `SubscriptionService` is a utility service to provide an easy unsubscription from RxJS observables in Angular components and directives. Please see [why you should unsubscribe from observables on instance destruction](https://angular.io/guide/lifecycle-hooks#cleaning-up-on-instance-destruction). diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index ef09076c5e..a70ddea62c 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -477,7 +477,7 @@ "text": "Utilities", "items": [ { - "text": "RxJS Subscriptions", + "text": "Managing RxJS Subscriptions", "path": "UI/Angular/Subscription-Service.md" }, { From 556eb9ffd4c742831551f0d60cb396af0aebf784 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Wed, 23 Sep 2020 21:15:37 +0800 Subject: [PATCH 029/143] Move BLOB to application layer --- .../Volo.Blogging.Application.Contracts.Shared.csproj | 1 - .../Volo/Blogging/BloggingApplicationContractsSharedModule.cs | 4 +--- .../Volo.Blogging.Application.csproj | 1 + .../Volo/Blogging/BloggingApplicationModule.cs | 4 +++- .../Volo/Blogging/BloggingFileContainer.cs | 0 5 files changed, 5 insertions(+), 5 deletions(-) rename modules/blogging/src/{Volo.Blogging.Application.Contracts.Shared => Volo.Blogging.Application}/Volo/Blogging/BloggingFileContainer.cs (100%) diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj index becd1022c2..70f0218a37 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.csproj @@ -13,7 +13,6 @@ - diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs index 64f77c985b..f90c504c0e 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingApplicationContractsSharedModule.cs @@ -1,12 +1,10 @@ using Volo.Abp.Application; -using Volo.Abp.BlobStoring; using Volo.Abp.Modularity; namespace Volo.Blogging { [DependsOn(typeof(BloggingDomainSharedModule), - typeof(AbpDddApplicationModule), - typeof(AbpBlobStoringModule))] + typeof(AbpDddApplicationModule))] public class BloggingApplicationContractsSharedModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj index 9c4070fe25..8c9f39e023 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj +++ b/modules/blogging/src/Volo.Blogging.Application/Volo.Blogging.Application.csproj @@ -16,6 +16,7 @@ + diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/BloggingApplicationModule.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/BloggingApplicationModule.cs index 31d24090a1..e33ab7f282 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/BloggingApplicationModule.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/BloggingApplicationModule.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Authorization; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AutoMapper; +using Volo.Abp.BlobStoring; using Volo.Abp.Caching; using Volo.Abp.Modularity; using Volo.Blogging.Comments; @@ -12,7 +13,8 @@ namespace Volo.Blogging typeof(BloggingDomainModule), typeof(BloggingApplicationContractsModule), typeof(AbpCachingModule), - typeof(AbpAutoMapperModule))] + typeof(AbpAutoMapperModule), + typeof(AbpBlobStoringModule))] public class BloggingApplicationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingFileContainer.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/BloggingFileContainer.cs similarity index 100% rename from modules/blogging/src/Volo.Blogging.Application.Contracts.Shared/Volo/Blogging/BloggingFileContainer.cs rename to modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/BloggingFileContainer.cs From b7839604484ad9c97a7757d63c5dde98892f8b84 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 23 Sep 2020 16:16:14 +0300 Subject: [PATCH 030/143] docs: improve introduction to service proxies --- docs/en/.vscode/settings.json | 13 +++++++++++++ docs/en/UI/Angular/Service-Proxies.md | 27 +++++++++++++-------------- 2 files changed, 26 insertions(+), 14 deletions(-) create mode 100644 docs/en/.vscode/settings.json diff --git a/docs/en/.vscode/settings.json b/docs/en/.vscode/settings.json new file mode 100644 index 0000000000..88052badbc --- /dev/null +++ b/docs/en/.vscode/settings.json @@ -0,0 +1,13 @@ +{ + "grammarly.userWords": [ + "api", + "apiName", + "cli", + "defaultProject", + "formatter", + "md", + "monorepo", + "npx", + "rootNamespace" + ] +} \ No newline at end of file diff --git a/docs/en/UI/Angular/Service-Proxies.md b/docs/en/UI/Angular/Service-Proxies.md index ece959a90d..becec11ed9 100644 --- a/docs/en/UI/Angular/Service-Proxies.md +++ b/docs/en/UI/Angular/Service-Proxies.md @@ -1,16 +1,15 @@ ## Service Proxies -It is common to call a REST endpoint in the server from our Angular applications. In this case, we generally create **services** (those have methods for each service method on the server side) and **model objects** (matches to [DTOs](../../Data-Transfer-Objects) in the server side). +Calling a REST endpoint from Angular applications is common. We usually create **services** matching server-side controllers and **interfaces** matching [DTOs](../../Data-Transfer-Objects) to interact with the server. This often results in manually transforming C# code into TypeScript equivalents and that is unfortunate, if not intolerable. -In addition to manually creating such server-interacting services, we could use tools like [NSWAG](https://github.com/RicoSuter/NSwag) to generate service proxies for us. But NSWAG has the following problems we've experienced: +To avoid manual effort, we might use a tool like [NSWAG](https://github.com/RicoSuter/NSwag) that generates service proxies. However, NSWAG has some disadvantages: -- It generates a **big, single** .ts file which has some problems; - - It get **too large** when your application grows. - - It doesn't fit into the **[modular](../../Module-Development-Basics) approach** of the ABP framework. -- It creates a bit **ugly code**. We want to have a clean code (just like if we write manually). -- It can not generate the same **method signature** declared in the server side (because swagger.json doesn't exactly reflect the method signature of the backend service). We've created an endpoint that exposes server side method contacts to allow clients generate a better aligned client proxies. +- It generates **a single .ts file** which gets **too large** as your application grows. Also, this single file does not fit the **[modular](../../Module-Development-Basics) approach** of ABP. +- To be honest, the generated code is a bit **ugly**. We would like to produce code that looks as if someone wrote it. +- Since swagger.json **does not reflect the exact method signature** of backend services, NSWAG cannot reflect them on the client-side as well. + +ABP introduces an endpoint that exposes server-side method contracts. When the `generate-proxy` command is run, ABP CLI makes an HTTP request to this endpoint and generates better-aligned client proxies in TypeScript. It organizes folders according to namespaces, adds barrel exports, and reflects method signatures in Angular services. -ABP CLI changes that via the `generate-proxy` command. It automatically generates the client proxies in TypeScript. by creating folders which separated by module names in the `src/app` folder. Run the following command in the **root folder** of the angular application: ```bash @@ -19,13 +18,13 @@ abp generate-proxy The command without any parameters creates proxies only for your own application's services and places them in your default Angular application. There are several parameters you may use to modify this behavior. See the [CLI documentation](../../CLI) for details. -The generated files will be placed in a folder called `proxy` at the root of target project. +The generated files will be placed in a folder called `proxy` at the root of the target project. ![generated-files-via-generate-proxy](./images/generated-files-via-generate-proxy.png) Each folder will have models, enums, and services defined at related namespace accompanied by a barrel export, i.e. an `index.ts` file for easier imports. -> The cammand is able to find application/library roots by reading `angular.json` file. Make sure you have either defined your target project as the `defaultProject` or pass the `--target` parameter to the command. This also means that you may have a monorepo workspace. +> The command can find application/library roots by reading the `angular.json` file. Make sure you have either defined your target project as the `defaultProject` or pass the `--target` parameter to the command. This also means that you may have a monorepo workspace. ### Angular Project Configuration @@ -74,9 +73,9 @@ export const environment: Config.Environment = { The `generate-proxy` command generates one service per back-end controller and a method (property with a function value actually) for each action in the controller. These methods call backend APIs via [RestService](./Http-Requests#restservice). -A variable named `apiName` (available as of v2.4) is defined in each service. `apiName` matches the module's RemoteServiceName. This variable passes to the `RestService` as a parameter at each request. If there is no microservice API defined in the environment, `RestService` uses the default. See [getting a specific API endpoint from application config](./Http-Requests#how-to-get-a-specific-api-endpoint-from-application-config) +A variable named `apiName` (available as of v2.4) is defined in each service. `apiName` matches the module's `RemoteServiceName`. This variable passes to the `RestService` as a parameter at each request. If there is no microservice API defined in the environment, `RestService` uses the default. See [getting a specific API endpoint from application config](./Http-Requests#how-to-get-a-specific-api-endpoint-from-application-config) -The `providedIn` property of the services is defined as `'root'`. Therefore there is no need to provide them in a module. You can use them directly by injecting them into constructor as shown below: +The `providedIn` property of the services is defined as `'root'`. Therefore there is no need to provide them in a module. You can use them directly by injecting them into the constructor as shown below: ```js import { BookService } from '@proxy/books'; @@ -114,7 +113,7 @@ export class BookComponent implements OnInit { ### Enums -Enums have always been difficult to populate in the frontend. The `generate-proxy` command genarates enums in a separate file and exports a ready-to-use options constant from the same file. So you can import them as follows: +Enums have always been difficult to populate in the frontend. The `generate-proxy` command generates enums in a separate file and exports a ready-to-use "options constant" from the same file. So you can import them as follows: ```js import { bookGenreOptions } from "@proxy/books"; @@ -132,7 +131,7 @@ export class BookComponent implements OnInit { ``` From aed5703f13fec83ad92afee111b1f8161464d956 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 23 Sep 2020 17:23:18 +0300 Subject: [PATCH 031/143] docs: change list service document title --- docs/en/UI/Angular/List-Service.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/List-Service.md b/docs/en/UI/Angular/List-Service.md index f934ec49c2..d534558363 100644 --- a/docs/en/UI/Angular/List-Service.md +++ b/docs/en/UI/Angular/List-Service.md @@ -1,4 +1,4 @@ -# Querying Lists Easily with ListService +# Working with Lists `ListService` is a utility service to provide an easy pagination, sorting, and search implementation. From 2ff244536bd103766fbce272f4fc4230453f5404 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 23 Sep 2020 21:18:22 +0300 Subject: [PATCH 032/143] Introduce toolbar system for the Blazor UI --- .../Toolbars/AbpToolbarOptions.cs | 16 +++++ .../Toolbars/IToolbarConfigurationContext.cs | 29 ++++++++ .../Toolbars/IToolbarContributor.cs | 9 +++ .../Toolbars/IToolbarManager.cs | 9 +++ .../Toolbars/StandardToolbars.cs | 7 ++ .../Toolbars/Toolbar.cs | 18 +++++ .../Toolbars/ToolbarConfigurationContext.cs | 68 +++++++++++++++++++ .../Toolbars/ToolbarItem.cs | 23 +++++++ .../Toolbars/ToolbarManager.cs | 39 +++++++++++ 9 files changed, 218 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/AbpToolbarOptions.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarConfigurationContext.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarContributor.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarManager.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/StandardToolbars.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/Toolbar.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarConfigurationContext.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarItem.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarManager.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/AbpToolbarOptions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/AbpToolbarOptions.cs new file mode 100644 index 0000000000..a2b006117f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/AbpToolbarOptions.cs @@ -0,0 +1,16 @@ +using System.Collections.Generic; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars +{ + public class AbpToolbarOptions + { + [NotNull] + public List Contributors { get; } + + public AbpToolbarOptions() + { + Contributors = new List(); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarConfigurationContext.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarConfigurationContext.cs new file mode 100644 index 0000000000..825b72b3f4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarConfigurationContext.cs @@ -0,0 +1,29 @@ +using System; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.Localization; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars +{ + public interface IToolbarConfigurationContext : IServiceProviderAccessor + { + Toolbar Toolbar { get; } + + IAuthorizationService AuthorizationService { get; } + + IStringLocalizerFactory StringLocalizerFactory { get; } + + Task IsGrantedAsync(string policyName); + + [CanBeNull] + IStringLocalizer GetDefaultLocalizer(); + + [NotNull] + public IStringLocalizer GetLocalizer(); + + [NotNull] + public IStringLocalizer GetLocalizer(Type resourceType); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarContributor.cs new file mode 100644 index 0000000000..363741c22c --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarContributor.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars +{ + public interface IToolbarContributor + { + Task ConfigureToolbarAsync(IToolbarConfigurationContext context); + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarManager.cs new file mode 100644 index 0000000000..0f1a6b29d3 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/IToolbarManager.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars +{ + public interface IToolbarManager + { + Task GetAsync(string name); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/StandardToolbars.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/StandardToolbars.cs new file mode 100644 index 0000000000..dfdf773422 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/StandardToolbars.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars +{ + public static class StandardToolbars + { + public const string Main = "Main"; + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/Toolbar.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/Toolbar.cs new file mode 100644 index 0000000000..8ca6dfab24 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/Toolbar.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars +{ + public class Toolbar + { + public string Name { get; } + + public List Items { get; } + + public Toolbar([NotNull] string name) + { + Name = Check.NotNull(name, nameof(name)); + Items = new List(); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarConfigurationContext.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarConfigurationContext.cs new file mode 100644 index 0000000000..7174dbe431 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarConfigurationContext.cs @@ -0,0 +1,68 @@ +using System; +using System.Threading.Tasks; +using JetBrains.Annotations; +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars +{ + public class ToolbarConfigurationContext : IToolbarConfigurationContext + { + public IServiceProvider ServiceProvider { get; } + private readonly object _serviceProviderLock = new object(); + + private TRef LazyGetRequiredService(Type serviceType, ref TRef reference) + { + if (reference == null) + { + lock (_serviceProviderLock) + { + if (reference == null) + { + reference = (TRef)ServiceProvider.GetRequiredService(serviceType); + } + } + } + + return reference; + } + + public IAuthorizationService AuthorizationService => LazyGetRequiredService(typeof(IAuthorizationService), ref _authorizationService); + private IAuthorizationService _authorizationService; + + private IStringLocalizerFactory _stringLocalizerFactory; + public IStringLocalizerFactory StringLocalizerFactory => LazyGetRequiredService(typeof(IStringLocalizerFactory),ref _stringLocalizerFactory); + + public Toolbar Toolbar { get; } + + public ToolbarConfigurationContext(Toolbar toolbar, IServiceProvider serviceProvider) + { + Toolbar = toolbar; + ServiceProvider = serviceProvider; + } + + public Task IsGrantedAsync(string policyName) + { + return AuthorizationService.IsGrantedAsync(policyName); + } + + [CanBeNull] + public IStringLocalizer GetDefaultLocalizer() + { + return StringLocalizerFactory.CreateDefaultOrNull(); + } + + [NotNull] + public IStringLocalizer GetLocalizer() + { + return StringLocalizerFactory.Create(); + } + + [NotNull] + public IStringLocalizer GetLocalizer(Type resourceType) + { + return StringLocalizerFactory.Create(resourceType); + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarItem.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarItem.cs new file mode 100644 index 0000000000..8400a9c88f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarItem.cs @@ -0,0 +1,23 @@ +using System; +using JetBrains.Annotations; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars +{ + public class ToolbarItem + { + public Type ComponentType + { + get => _componentType; + set => _componentType = Check.NotNull(value, nameof(value)); + } + private Type _componentType; + + public int Order { get; set; } + + public ToolbarItem([NotNull] Type componentType, int order = 0) + { + Order = order; + ComponentType = Check.NotNull(componentType, nameof(componentType)); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarManager.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarManager.cs new file mode 100644 index 0000000000..311795ac4f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/Toolbars/ToolbarManager.cs @@ -0,0 +1,39 @@ +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars +{ + public class ToolbarManager : IToolbarManager, ITransientDependency + { + protected AbpToolbarOptions Options { get; } + protected IServiceProvider ServiceProvider { get; } + + public ToolbarManager( + IOptions options, + IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + Options = options.Value; + } + + public async Task GetAsync(string name) + { + var toolbar = new Toolbar(name); + + using (var scope = ServiceProvider.CreateScope()) + { + var context = new ToolbarConfigurationContext(toolbar, scope.ServiceProvider); + + foreach (var contributor in Options.Contributors) + { + await contributor.ConfigureToolbarAsync(context); + } + } + + return toolbar; + } + } +} From f3ab97a4443686dedef2d3c1da3cba4bc6554912 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 23 Sep 2020 21:25:16 +0300 Subject: [PATCH 033/143] docs: describe how ABP Angular feature libs work --- docs/en/UI/Angular/Environment.md | 2 +- docs/en/UI/Angular/Feature-Libraries.md | 98 +++++++++++++++++++++++++ 2 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 docs/en/UI/Angular/Feature-Libraries.md diff --git a/docs/en/UI/Angular/Environment.md b/docs/en/UI/Angular/Environment.md index 67fe4eb315..0cd946079f 100644 --- a/docs/en/UI/Angular/Environment.md +++ b/docs/en/UI/Angular/Environment.md @@ -105,4 +105,4 @@ export interface RemoteEnv { ## What's Next? -* [Service Proxies](./Service-Proxies.md) +* [Anatomy of a Feature Library](./Feature-Libraries.md) diff --git a/docs/en/UI/Angular/Feature-Libraries.md b/docs/en/UI/Angular/Feature-Libraries.md new file mode 100644 index 0000000000..2ef681663a --- /dev/null +++ b/docs/en/UI/Angular/Feature-Libraries.md @@ -0,0 +1,98 @@ +# Anatomy of a Feature Library + +ABP has an ever-growing number of feature modules and [introducing a new one](../../Module-Development-Basics.md) is always possible. When the UI is Angular, these features have modular Angular libraries accompanying them. + +## Feature Library Content + +Each library has at least two modules: + +1. The main module contains all components, services, types, enums, etc. to deliver the required UI when the feature is loaded. From here on, we will refer to these modules as **"feature module"**. +2. There is also a **"config module"** per library which helps us configure applications to run these modules or make them accessible. + +## How to Add a Feature Library to Your Project + + + +Manual consumption of a feature library has three steps: + +### 1. Install the Library + +Feature libraries are usually published as an npm package. If a library you want to use does not exist in your project, you may install it via the following command: + +```shell +yarn add @my-company-name/my-project-name +``` + +...or... + +```shell +npm install @my-company-name/my-project-name +``` + +The `my-company-name` and `my-project-name` parts are going to change according to the package you want to use. For example, if we want to install the ABP Identity module, the package installation will be as seen below: + +```shell +yarn add @abp/ng.identity +``` + +> Identity is used just as an example. If you have initiated your project with ABP CLI or ABP Suite, the identity library will already be installed and configured in your project. + +### 2. Import the Config Module + +As of ABP v3.0, every lazy-loaded module has a config module available via a secondary entry point on the same package. Importing them in your root module looks like this: + +```js +import { IdentityConfigModule } from "@abp/ng.identity/config"; + +@NgModule({ + imports: [ + // other imports + IdentityConfigModule.forRoot(), + ], + // providers, declarations, and bootstrap +}) +export class AppModule {} +``` + +We need the config modules for actions required before feature modules are loaded (lazily). For example, the above import configures the menu to display links to identity pages. + +Furthermore, depending on the library, the `.forRoot` static method may receive some options that configure how the feature works. + +### 3. Import the Feature Module + +Finally, the feature module should be [loaded lazily via Angular router](https://angular.io/guide/lazy-loading-ngmodules). If you open the `/src/app/app-routing.module.ts` file, you should see `IdentityModule` is loaded exactly as follows: + +```js +import { NgModule } from "@angular/core"; +import { RouterModule, Routes } from "@angular/router"; + +const routes: Routes = [ + // other routes + { + path: "identity", + loadChildren: () => + import("@abp/ng.identity").then((m) => m.IdentityModule.forLazy()), + }, + // other routes +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule], +}) +export class AppRoutingModule {} +``` + +When you load the identity feature like this, the "Users" page, for example, will have a route path of `/identity/users`. [1](#f-modify-route) + +Depending on the library, the `.forLazy` static method may also receive some options that configure how the feature works. + +--- + +1 _Libraries expect to work at a predefined path. Please check [how to patch a navigation element](./Modifying-the-Menu.md#how-to-patch-or-remove-a-navigation-element), if you want to use a different path from the default one (e.g. '/identity')._ [↩](#a-modify-route) + +--- + +## What's Next? + +- [Service Proxies](./Service-Proxies.md) From 4d73ef56979b048e4bdebad8700cd00df0467e41 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 23 Sep 2020 21:25:38 +0300 Subject: [PATCH 034/143] docs: add feature libs document to navigation --- docs/en/docs-nav.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index a70ddea62c..68107b666a 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -442,6 +442,10 @@ "text": "Environment Variables", "path": "UI/Angular/Environment.md" }, + { + "text": "Anatomy of a Feature Library", + "path": "UI/Angular/Feature-Libraries.md" + }, { "text": "Service Proxies", "path": "UI/Angular/Service-Proxies.md" From b7421341eeb78fa40a0ce08fe37bf6ff93648fe8 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Thu, 24 Sep 2020 10:19:36 +0800 Subject: [PATCH 035/143] Run yarn & gulp in Bootstrap.Demo project. --- .../wwwroot/libs/abp/luxon/abp.luxon.js | 46 + .../wwwroot/libs/luxon/luxon.js | 8258 +++++++++++++++++ .../wwwroot/libs/luxon/luxon.js.map | 1 + .../wwwroot/libs/luxon/luxon.min.js | 1 + .../wwwroot/libs/luxon/luxon.min.js.map | 1 + 5 files changed, 8307 insertions(+) create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/luxon/abp.luxon.js create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.js create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.js.map create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.min.js create mode 100644 framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.min.js.map diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/luxon/abp.luxon.js b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/luxon/abp.luxon.js new file mode 100644 index 0000000000..b04de7cadf --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/abp/luxon/abp.luxon.js @@ -0,0 +1,46 @@ +var abp = abp || {}; +(function () { + + if (!luxon) { + throw "abp/luxon library requires the luxon library included to the page!"; + } + + /* TIMING *************************************************/ + + abp.timing = abp.timing || {}; + + var setObjectValue = function (obj, property, value) { + if (typeof property === "string") { + property = property.split('.'); + } + + if (property.length > 1) { + var p = property.shift(); + setObjectValue(obj[p], property, value); + } else { + obj[property[0]] = value; + } + } + + var getObjectValue = function (obj, property) { + return property.split('.').reduce((a, v) => a[v], obj) + } + + abp.timing.convertFieldsToIsoDate = function (form, fields) { + for (var field of fields) { + var dateTime = luxon.DateTime + .fromFormat( + getObjectValue(form, field), + abp.localization.currentCulture.dateTimeFormat.shortDatePattern, + {locale: abp.localization.currentCulture.cultureName} + ); + + if (!dateTime.invalid) { + setObjectValue(form, field, dateTime.toFormat("yyyy-MM-dd HH:mm:ss")) + } + } + + return form; + } + +})(jQuery); diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.js b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.js new file mode 100644 index 0000000000..aa6e8caa20 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.js @@ -0,0 +1,8258 @@ +var luxon = (function (exports) { + 'use strict'; + + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } + } + + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; + } + + function _inheritsLoose(subClass, superClass) { + subClass.prototype = Object.create(superClass.prototype); + subClass.prototype.constructor = subClass; + subClass.__proto__ = superClass; + } + + function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); + } + + function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); + } + + function _isNativeReflectConstruct() { + if (typeof Reflect === "undefined" || !Reflect.construct) return false; + if (Reflect.construct.sham) return false; + if (typeof Proxy === "function") return true; + + try { + Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); + return true; + } catch (e) { + return false; + } + } + + function _construct(Parent, args, Class) { + if (_isNativeReflectConstruct()) { + _construct = Reflect.construct; + } else { + _construct = function _construct(Parent, args, Class) { + var a = [null]; + a.push.apply(a, args); + var Constructor = Function.bind.apply(Parent, a); + var instance = new Constructor(); + if (Class) _setPrototypeOf(instance, Class.prototype); + return instance; + }; + } + + return _construct.apply(null, arguments); + } + + function _isNativeFunction(fn) { + return Function.toString.call(fn).indexOf("[native code]") !== -1; + } + + function _wrapNativeSuper(Class) { + var _cache = typeof Map === "function" ? new Map() : undefined; + + _wrapNativeSuper = function _wrapNativeSuper(Class) { + if (Class === null || !_isNativeFunction(Class)) return Class; + + if (typeof Class !== "function") { + throw new TypeError("Super expression must either be null or a function"); + } + + if (typeof _cache !== "undefined") { + if (_cache.has(Class)) return _cache.get(Class); + + _cache.set(Class, Wrapper); + } + + function Wrapper() { + return _construct(Class, arguments, _getPrototypeOf(this).constructor); + } + + Wrapper.prototype = Object.create(Class.prototype, { + constructor: { + value: Wrapper, + enumerable: false, + writable: true, + configurable: true + } + }); + return _setPrototypeOf(Wrapper, Class); + }; + + return _wrapNativeSuper(Class); + } + + function _objectWithoutPropertiesLoose(source, excluded) { + if (source == null) return {}; + var target = {}; + var sourceKeys = Object.keys(source); + var key, i; + + for (i = 0; i < sourceKeys.length; i++) { + key = sourceKeys[i]; + if (excluded.indexOf(key) >= 0) continue; + target[key] = source[key]; + } + + return target; + } + + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + + return arr2; + } + + function _createForOfIteratorHelperLoose(o) { + var i = 0; + + if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) { + if (Array.isArray(o) || (o = _unsupportedIterableToArray(o))) return function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }; + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + + i = o[Symbol.iterator](); + return i.next.bind(i); + } + + // these aren't really private, but nor are they really useful to document + + /** + * @private + */ + var LuxonError = /*#__PURE__*/function (_Error) { + _inheritsLoose(LuxonError, _Error); + + function LuxonError() { + return _Error.apply(this, arguments) || this; + } + + return LuxonError; + }( /*#__PURE__*/_wrapNativeSuper(Error)); + /** + * @private + */ + + + var InvalidDateTimeError = /*#__PURE__*/function (_LuxonError) { + _inheritsLoose(InvalidDateTimeError, _LuxonError); + + function InvalidDateTimeError(reason) { + return _LuxonError.call(this, "Invalid DateTime: " + reason.toMessage()) || this; + } + + return InvalidDateTimeError; + }(LuxonError); + /** + * @private + */ + + var InvalidIntervalError = /*#__PURE__*/function (_LuxonError2) { + _inheritsLoose(InvalidIntervalError, _LuxonError2); + + function InvalidIntervalError(reason) { + return _LuxonError2.call(this, "Invalid Interval: " + reason.toMessage()) || this; + } + + return InvalidIntervalError; + }(LuxonError); + /** + * @private + */ + + var InvalidDurationError = /*#__PURE__*/function (_LuxonError3) { + _inheritsLoose(InvalidDurationError, _LuxonError3); + + function InvalidDurationError(reason) { + return _LuxonError3.call(this, "Invalid Duration: " + reason.toMessage()) || this; + } + + return InvalidDurationError; + }(LuxonError); + /** + * @private + */ + + var ConflictingSpecificationError = /*#__PURE__*/function (_LuxonError4) { + _inheritsLoose(ConflictingSpecificationError, _LuxonError4); + + function ConflictingSpecificationError() { + return _LuxonError4.apply(this, arguments) || this; + } + + return ConflictingSpecificationError; + }(LuxonError); + /** + * @private + */ + + var InvalidUnitError = /*#__PURE__*/function (_LuxonError5) { + _inheritsLoose(InvalidUnitError, _LuxonError5); + + function InvalidUnitError(unit) { + return _LuxonError5.call(this, "Invalid unit " + unit) || this; + } + + return InvalidUnitError; + }(LuxonError); + /** + * @private + */ + + var InvalidArgumentError = /*#__PURE__*/function (_LuxonError6) { + _inheritsLoose(InvalidArgumentError, _LuxonError6); + + function InvalidArgumentError() { + return _LuxonError6.apply(this, arguments) || this; + } + + return InvalidArgumentError; + }(LuxonError); + /** + * @private + */ + + var ZoneIsAbstractError = /*#__PURE__*/function (_LuxonError7) { + _inheritsLoose(ZoneIsAbstractError, _LuxonError7); + + function ZoneIsAbstractError() { + return _LuxonError7.call(this, "Zone is an abstract class") || this; + } + + return ZoneIsAbstractError; + }(LuxonError); + + /** + * @private + */ + var n = "numeric", + s = "short", + l = "long"; + var DATE_SHORT = { + year: n, + month: n, + day: n + }; + var DATE_MED = { + year: n, + month: s, + day: n + }; + var DATE_FULL = { + year: n, + month: l, + day: n + }; + var DATE_HUGE = { + year: n, + month: l, + day: n, + weekday: l + }; + var TIME_SIMPLE = { + hour: n, + minute: n + }; + var TIME_WITH_SECONDS = { + hour: n, + minute: n, + second: n + }; + var TIME_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: s + }; + var TIME_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + timeZoneName: l + }; + var TIME_24_SIMPLE = { + hour: n, + minute: n, + hour12: false + }; + /** + * {@link toLocaleString}; format like '09:30:23', always 24-hour. + */ + + var TIME_24_WITH_SECONDS = { + hour: n, + minute: n, + second: n, + hour12: false + }; + /** + * {@link toLocaleString}; format like '09:30:23 EDT', always 24-hour. + */ + + var TIME_24_WITH_SHORT_OFFSET = { + hour: n, + minute: n, + second: n, + hour12: false, + timeZoneName: s + }; + /** + * {@link toLocaleString}; format like '09:30:23 Eastern Daylight Time', always 24-hour. + */ + + var TIME_24_WITH_LONG_OFFSET = { + hour: n, + minute: n, + second: n, + hour12: false, + timeZoneName: l + }; + /** + * {@link toLocaleString}; format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + */ + + var DATETIME_SHORT = { + year: n, + month: n, + day: n, + hour: n, + minute: n + }; + /** + * {@link toLocaleString}; format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + */ + + var DATETIME_SHORT_WITH_SECONDS = { + year: n, + month: n, + day: n, + hour: n, + minute: n, + second: n + }; + var DATETIME_MED = { + year: n, + month: s, + day: n, + hour: n, + minute: n + }; + var DATETIME_MED_WITH_SECONDS = { + year: n, + month: s, + day: n, + hour: n, + minute: n, + second: n + }; + var DATETIME_MED_WITH_WEEKDAY = { + year: n, + month: s, + day: n, + weekday: s, + hour: n, + minute: n + }; + var DATETIME_FULL = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + timeZoneName: s + }; + var DATETIME_FULL_WITH_SECONDS = { + year: n, + month: l, + day: n, + hour: n, + minute: n, + second: n, + timeZoneName: s + }; + var DATETIME_HUGE = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + timeZoneName: l + }; + var DATETIME_HUGE_WITH_SECONDS = { + year: n, + month: l, + day: n, + weekday: l, + hour: n, + minute: n, + second: n, + timeZoneName: l + }; + + /* + This is just a junk drawer, containing anything used across multiple classes. + Because Luxon is small(ish), this should stay small and we won't worry about splitting + it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area. + */ + /** + * @private + */ + // TYPES + + function isUndefined(o) { + return typeof o === "undefined"; + } + function isNumber(o) { + return typeof o === "number"; + } + function isInteger(o) { + return typeof o === "number" && o % 1 === 0; + } + function isString(o) { + return typeof o === "string"; + } + function isDate(o) { + return Object.prototype.toString.call(o) === "[object Date]"; + } // CAPABILITIES + + function hasIntl() { + try { + return typeof Intl !== "undefined" && Intl.DateTimeFormat; + } catch (e) { + return false; + } + } + function hasFormatToParts() { + return !isUndefined(Intl.DateTimeFormat.prototype.formatToParts); + } + function hasRelative() { + try { + return typeof Intl !== "undefined" && !!Intl.RelativeTimeFormat; + } catch (e) { + return false; + } + } // OBJECTS AND ARRAYS + + function maybeArray(thing) { + return Array.isArray(thing) ? thing : [thing]; + } + function bestBy(arr, by, compare) { + if (arr.length === 0) { + return undefined; + } + + return arr.reduce(function (best, next) { + var pair = [by(next), next]; + + if (!best) { + return pair; + } else if (compare(best[0], pair[0]) === best[0]) { + return best; + } else { + return pair; + } + }, null)[1]; + } + function pick(obj, keys) { + return keys.reduce(function (a, k) { + a[k] = obj[k]; + return a; + }, {}); + } + function hasOwnProperty(obj, prop) { + return Object.prototype.hasOwnProperty.call(obj, prop); + } // NUMBERS AND STRINGS + + function integerBetween(thing, bottom, top) { + return isInteger(thing) && thing >= bottom && thing <= top; + } // x % n but takes the sign of n instead of x + + function floorMod(x, n) { + return x - n * Math.floor(x / n); + } + function padStart(input, n) { + if (n === void 0) { + n = 2; + } + + if (input.toString().length < n) { + return ("0".repeat(n) + input).slice(-n); + } else { + return input.toString(); + } + } + function parseInteger(string) { + if (isUndefined(string) || string === null || string === "") { + return undefined; + } else { + return parseInt(string, 10); + } + } + function parseMillis(fraction) { + // Return undefined (instead of 0) in these cases, where fraction is not set + if (isUndefined(fraction) || fraction === null || fraction === "") { + return undefined; + } else { + var f = parseFloat("0." + fraction) * 1000; + return Math.floor(f); + } + } + function roundTo(number, digits, towardZero) { + if (towardZero === void 0) { + towardZero = false; + } + + var factor = Math.pow(10, digits), + rounder = towardZero ? Math.trunc : Math.round; + return rounder(number * factor) / factor; + } // DATE BASICS + + function isLeapYear(year) { + return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0); + } + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + function daysInMonth(year, month) { + var modMonth = floorMod(month - 1, 12) + 1, + modYear = year + (month - modMonth) / 12; + + if (modMonth === 2) { + return isLeapYear(modYear) ? 29 : 28; + } else { + return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1]; + } + } // covert a calendar object to a local timestamp (epoch, but with the offset baked in) + + function objToLocalTS(obj) { + var d = Date.UTC(obj.year, obj.month - 1, obj.day, obj.hour, obj.minute, obj.second, obj.millisecond); // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that + + if (obj.year < 100 && obj.year >= 0) { + d = new Date(d); + d.setUTCFullYear(d.getUTCFullYear() - 1900); + } + + return +d; + } + function weeksInWeekYear(weekYear) { + var p1 = (weekYear + Math.floor(weekYear / 4) - Math.floor(weekYear / 100) + Math.floor(weekYear / 400)) % 7, + last = weekYear - 1, + p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7; + return p1 === 4 || p2 === 3 ? 53 : 52; + } + function untruncateYear(year) { + if (year > 99) { + return year; + } else return year > 60 ? 1900 + year : 2000 + year; + } // PARSING + + function parseZoneInfo(ts, offsetFormat, locale, timeZone) { + if (timeZone === void 0) { + timeZone = null; + } + + var date = new Date(ts), + intlOpts = { + hour12: false, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit" + }; + + if (timeZone) { + intlOpts.timeZone = timeZone; + } + + var modified = Object.assign({ + timeZoneName: offsetFormat + }, intlOpts), + intl = hasIntl(); + + if (intl && hasFormatToParts()) { + var parsed = new Intl.DateTimeFormat(locale, modified).formatToParts(date).find(function (m) { + return m.type.toLowerCase() === "timezonename"; + }); + return parsed ? parsed.value : null; + } else if (intl) { + // this probably doesn't work for all locales + var without = new Intl.DateTimeFormat(locale, intlOpts).format(date), + included = new Intl.DateTimeFormat(locale, modified).format(date), + diffed = included.substring(without.length), + trimmed = diffed.replace(/^[, \u200e]+/, ""); + return trimmed; + } else { + return null; + } + } // signedOffset('-5', '30') -> -330 + + function signedOffset(offHourStr, offMinuteStr) { + var offHour = parseInt(offHourStr, 10); // don't || this because we want to preserve -0 + + if (Number.isNaN(offHour)) { + offHour = 0; + } + + var offMin = parseInt(offMinuteStr, 10) || 0, + offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin; + return offHour * 60 + offMinSigned; + } // COERCION + + function asNumber(value) { + var numericValue = Number(value); + if (typeof value === "boolean" || value === "" || Number.isNaN(numericValue)) throw new InvalidArgumentError("Invalid unit value " + value); + return numericValue; + } + function normalizeObject(obj, normalizer, nonUnitKeys) { + var normalized = {}; + + for (var u in obj) { + if (hasOwnProperty(obj, u)) { + if (nonUnitKeys.indexOf(u) >= 0) continue; + var v = obj[u]; + if (v === undefined || v === null) continue; + normalized[normalizer(u)] = asNumber(v); + } + } + + return normalized; + } + function formatOffset(offset, format) { + var hours = Math.trunc(offset / 60), + minutes = Math.abs(offset % 60), + sign = hours >= 0 && !Object.is(hours, -0) ? "+" : "-", + base = "" + sign + Math.abs(hours); + + switch (format) { + case "short": + return "" + sign + padStart(Math.abs(hours), 2) + ":" + padStart(minutes, 2); + + case "narrow": + return minutes > 0 ? base + ":" + minutes : base; + + case "techie": + return "" + sign + padStart(Math.abs(hours), 2) + padStart(minutes, 2); + + default: + throw new RangeError("Value format " + format + " is out of range for property format"); + } + } + function timeObject(obj) { + return pick(obj, ["hour", "minute", "second", "millisecond"]); + } + var ianaRegex = /[A-Za-z_+-]{1,256}(:?\/[A-Za-z_+-]{1,256}(\/[A-Za-z_+-]{1,256})?)?/; + + function stringify(obj) { + return JSON.stringify(obj, Object.keys(obj).sort()); + } + /** + * @private + */ + + + var monthsLong = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]; + var monthsShort = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; + var monthsNarrow = ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"]; + function months(length) { + switch (length) { + case "narrow": + return monthsNarrow; + + case "short": + return monthsShort; + + case "long": + return monthsLong; + + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"]; + + case "2-digit": + return ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]; + + default: + return null; + } + } + var weekdaysLong = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; + var weekdaysShort = ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]; + var weekdaysNarrow = ["M", "T", "W", "T", "F", "S", "S"]; + function weekdays(length) { + switch (length) { + case "narrow": + return weekdaysNarrow; + + case "short": + return weekdaysShort; + + case "long": + return weekdaysLong; + + case "numeric": + return ["1", "2", "3", "4", "5", "6", "7"]; + + default: + return null; + } + } + var meridiems = ["AM", "PM"]; + var erasLong = ["Before Christ", "Anno Domini"]; + var erasShort = ["BC", "AD"]; + var erasNarrow = ["B", "A"]; + function eras(length) { + switch (length) { + case "narrow": + return erasNarrow; + + case "short": + return erasShort; + + case "long": + return erasLong; + + default: + return null; + } + } + function meridiemForDateTime(dt) { + return meridiems[dt.hour < 12 ? 0 : 1]; + } + function weekdayForDateTime(dt, length) { + return weekdays(length)[dt.weekday - 1]; + } + function monthForDateTime(dt, length) { + return months(length)[dt.month - 1]; + } + function eraForDateTime(dt, length) { + return eras(length)[dt.year < 0 ? 0 : 1]; + } + function formatRelativeTime(unit, count, numeric, narrow) { + if (numeric === void 0) { + numeric = "always"; + } + + if (narrow === void 0) { + narrow = false; + } + + var units = { + years: ["year", "yr."], + quarters: ["quarter", "qtr."], + months: ["month", "mo."], + weeks: ["week", "wk."], + days: ["day", "day", "days"], + hours: ["hour", "hr."], + minutes: ["minute", "min."], + seconds: ["second", "sec."] + }; + var lastable = ["hours", "minutes", "seconds"].indexOf(unit) === -1; + + if (numeric === "auto" && lastable) { + var isDay = unit === "days"; + + switch (count) { + case 1: + return isDay ? "tomorrow" : "next " + units[unit][0]; + + case -1: + return isDay ? "yesterday" : "last " + units[unit][0]; + + case 0: + return isDay ? "today" : "this " + units[unit][0]; + + } + } + + var isInPast = Object.is(count, -0) || count < 0, + fmtValue = Math.abs(count), + singular = fmtValue === 1, + lilUnits = units[unit], + fmtUnit = narrow ? singular ? lilUnits[1] : lilUnits[2] || lilUnits[1] : singular ? units[unit][0] : unit; + return isInPast ? fmtValue + " " + fmtUnit + " ago" : "in " + fmtValue + " " + fmtUnit; + } + function formatString(knownFormat) { + // these all have the offsets removed because we don't have access to them + // without all the intl stuff this is backfilling + var filtered = pick(knownFormat, ["weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZoneName", "hour12"]), + key = stringify(filtered), + dateTimeHuge = "EEEE, LLLL d, yyyy, h:mm a"; + + switch (key) { + case stringify(DATE_SHORT): + return "M/d/yyyy"; + + case stringify(DATE_MED): + return "LLL d, yyyy"; + + case stringify(DATE_FULL): + return "LLLL d, yyyy"; + + case stringify(DATE_HUGE): + return "EEEE, LLLL d, yyyy"; + + case stringify(TIME_SIMPLE): + return "h:mm a"; + + case stringify(TIME_WITH_SECONDS): + return "h:mm:ss a"; + + case stringify(TIME_WITH_SHORT_OFFSET): + return "h:mm a"; + + case stringify(TIME_WITH_LONG_OFFSET): + return "h:mm a"; + + case stringify(TIME_24_SIMPLE): + return "HH:mm"; + + case stringify(TIME_24_WITH_SECONDS): + return "HH:mm:ss"; + + case stringify(TIME_24_WITH_SHORT_OFFSET): + return "HH:mm"; + + case stringify(TIME_24_WITH_LONG_OFFSET): + return "HH:mm"; + + case stringify(DATETIME_SHORT): + return "M/d/yyyy, h:mm a"; + + case stringify(DATETIME_MED): + return "LLL d, yyyy, h:mm a"; + + case stringify(DATETIME_FULL): + return "LLLL d, yyyy, h:mm a"; + + case stringify(DATETIME_HUGE): + return dateTimeHuge; + + case stringify(DATETIME_SHORT_WITH_SECONDS): + return "M/d/yyyy, h:mm:ss a"; + + case stringify(DATETIME_MED_WITH_SECONDS): + return "LLL d, yyyy, h:mm:ss a"; + + case stringify(DATETIME_MED_WITH_WEEKDAY): + return "EEE, d LLL yyyy, h:mm a"; + + case stringify(DATETIME_FULL_WITH_SECONDS): + return "LLLL d, yyyy, h:mm:ss a"; + + case stringify(DATETIME_HUGE_WITH_SECONDS): + return "EEEE, LLLL d, yyyy, h:mm:ss a"; + + default: + return dateTimeHuge; + } + } + + function stringifyTokens(splits, tokenToString) { + var s = ""; + + for (var _iterator = _createForOfIteratorHelperLoose(splits), _step; !(_step = _iterator()).done;) { + var token = _step.value; + + if (token.literal) { + s += token.val; + } else { + s += tokenToString(token.val); + } + } + + return s; + } + + var _macroTokenToFormatOpts = { + D: DATE_SHORT, + DD: DATE_MED, + DDD: DATE_FULL, + DDDD: DATE_HUGE, + t: TIME_SIMPLE, + tt: TIME_WITH_SECONDS, + ttt: TIME_WITH_SHORT_OFFSET, + tttt: TIME_WITH_LONG_OFFSET, + T: TIME_24_SIMPLE, + TT: TIME_24_WITH_SECONDS, + TTT: TIME_24_WITH_SHORT_OFFSET, + TTTT: TIME_24_WITH_LONG_OFFSET, + f: DATETIME_SHORT, + ff: DATETIME_MED, + fff: DATETIME_FULL, + ffff: DATETIME_HUGE, + F: DATETIME_SHORT_WITH_SECONDS, + FF: DATETIME_MED_WITH_SECONDS, + FFF: DATETIME_FULL_WITH_SECONDS, + FFFF: DATETIME_HUGE_WITH_SECONDS + }; + /** + * @private + */ + + var Formatter = /*#__PURE__*/function () { + Formatter.create = function create(locale, opts) { + if (opts === void 0) { + opts = {}; + } + + return new Formatter(locale, opts); + }; + + Formatter.parseFormat = function parseFormat(fmt) { + var current = null, + currentFull = "", + bracketed = false; + var splits = []; + + for (var i = 0; i < fmt.length; i++) { + var c = fmt.charAt(i); + + if (c === "'") { + if (currentFull.length > 0) { + splits.push({ + literal: bracketed, + val: currentFull + }); + } + + current = null; + currentFull = ""; + bracketed = !bracketed; + } else if (bracketed) { + currentFull += c; + } else if (c === current) { + currentFull += c; + } else { + if (currentFull.length > 0) { + splits.push({ + literal: false, + val: currentFull + }); + } + + currentFull = c; + current = c; + } + } + + if (currentFull.length > 0) { + splits.push({ + literal: bracketed, + val: currentFull + }); + } + + return splits; + }; + + Formatter.macroTokenToFormatOpts = function macroTokenToFormatOpts(token) { + return _macroTokenToFormatOpts[token]; + }; + + function Formatter(locale, formatOpts) { + this.opts = formatOpts; + this.loc = locale; + this.systemLoc = null; + } + + var _proto = Formatter.prototype; + + _proto.formatWithSystemDefault = function formatWithSystemDefault(dt, opts) { + if (this.systemLoc === null) { + this.systemLoc = this.loc.redefaultToSystem(); + } + + var df = this.systemLoc.dtFormatter(dt, Object.assign({}, this.opts, opts)); + return df.format(); + }; + + _proto.formatDateTime = function formatDateTime(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts)); + return df.format(); + }; + + _proto.formatDateTimeParts = function formatDateTimeParts(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts)); + return df.formatToParts(); + }; + + _proto.resolvedOptions = function resolvedOptions(dt, opts) { + if (opts === void 0) { + opts = {}; + } + + var df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts)); + return df.resolvedOptions(); + }; + + _proto.num = function num(n, p) { + if (p === void 0) { + p = 0; + } + + // we get some perf out of doing this here, annoyingly + if (this.opts.forceSimple) { + return padStart(n, p); + } + + var opts = Object.assign({}, this.opts); + + if (p > 0) { + opts.padTo = p; + } + + return this.loc.numberFormatter(opts).format(n); + }; + + _proto.formatDateTimeFromString = function formatDateTimeFromString(dt, fmt) { + var _this = this; + + var knownEnglish = this.loc.listingMode() === "en", + useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== "gregory" && hasFormatToParts(), + string = function string(opts, extract) { + return _this.loc.extract(dt, opts, extract); + }, + formatOffset = function formatOffset(opts) { + if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) { + return "Z"; + } + + return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : ""; + }, + meridiem = function meridiem() { + return knownEnglish ? meridiemForDateTime(dt) : string({ + hour: "numeric", + hour12: true + }, "dayperiod"); + }, + month = function month(length, standalone) { + return knownEnglish ? monthForDateTime(dt, length) : string(standalone ? { + month: length + } : { + month: length, + day: "numeric" + }, "month"); + }, + weekday = function weekday(length, standalone) { + return knownEnglish ? weekdayForDateTime(dt, length) : string(standalone ? { + weekday: length + } : { + weekday: length, + month: "long", + day: "numeric" + }, "weekday"); + }, + maybeMacro = function maybeMacro(token) { + var formatOpts = Formatter.macroTokenToFormatOpts(token); + + if (formatOpts) { + return _this.formatWithSystemDefault(dt, formatOpts); + } else { + return token; + } + }, + era = function era(length) { + return knownEnglish ? eraForDateTime(dt, length) : string({ + era: length + }, "era"); + }, + tokenToString = function tokenToString(token) { + // Where possible: http://cldr.unicode.org/translation/date-time#TOC-Stand-Alone-vs.-Format-Styles + switch (token) { + // ms + case "S": + return _this.num(dt.millisecond); + + case "u": // falls through + + case "SSS": + return _this.num(dt.millisecond, 3); + // seconds + + case "s": + return _this.num(dt.second); + + case "ss": + return _this.num(dt.second, 2); + // minutes + + case "m": + return _this.num(dt.minute); + + case "mm": + return _this.num(dt.minute, 2); + // hours + + case "h": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12); + + case "hh": + return _this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2); + + case "H": + return _this.num(dt.hour); + + case "HH": + return _this.num(dt.hour, 2); + // offset + + case "Z": + // like +6 + return formatOffset({ + format: "narrow", + allowZ: _this.opts.allowZ + }); + + case "ZZ": + // like +06:00 + return formatOffset({ + format: "short", + allowZ: _this.opts.allowZ + }); + + case "ZZZ": + // like +0600 + return formatOffset({ + format: "techie", + allowZ: _this.opts.allowZ + }); + + case "ZZZZ": + // like EST + return dt.zone.offsetName(dt.ts, { + format: "short", + locale: _this.loc.locale + }); + + case "ZZZZZ": + // like Eastern Standard Time + return dt.zone.offsetName(dt.ts, { + format: "long", + locale: _this.loc.locale + }); + // zone + + case "z": + // like America/New_York + return dt.zoneName; + // meridiems + + case "a": + return meridiem(); + // dates + + case "d": + return useDateTimeFormatter ? string({ + day: "numeric" + }, "day") : _this.num(dt.day); + + case "dd": + return useDateTimeFormatter ? string({ + day: "2-digit" + }, "day") : _this.num(dt.day, 2); + // weekdays - standalone + + case "c": + // like 1 + return _this.num(dt.weekday); + + case "ccc": + // like 'Tues' + return weekday("short", true); + + case "cccc": + // like 'Tuesday' + return weekday("long", true); + + case "ccccc": + // like 'T' + return weekday("narrow", true); + // weekdays - format + + case "E": + // like 1 + return _this.num(dt.weekday); + + case "EEE": + // like 'Tues' + return weekday("short", false); + + case "EEEE": + // like 'Tuesday' + return weekday("long", false); + + case "EEEEE": + // like 'T' + return weekday("narrow", false); + // months - standalone + + case "L": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric", + day: "numeric" + }, "month") : _this.num(dt.month); + + case "LL": + // like 01, doesn't seem to work + return useDateTimeFormatter ? string({ + month: "2-digit", + day: "numeric" + }, "month") : _this.num(dt.month, 2); + + case "LLL": + // like Jan + return month("short", true); + + case "LLLL": + // like January + return month("long", true); + + case "LLLLL": + // like J + return month("narrow", true); + // months - format + + case "M": + // like 1 + return useDateTimeFormatter ? string({ + month: "numeric" + }, "month") : _this.num(dt.month); + + case "MM": + // like 01 + return useDateTimeFormatter ? string({ + month: "2-digit" + }, "month") : _this.num(dt.month, 2); + + case "MMM": + // like Jan + return month("short", false); + + case "MMMM": + // like January + return month("long", false); + + case "MMMMM": + // like J + return month("narrow", false); + // years + + case "y": + // like 2014 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year); + + case "yy": + // like 14 + return useDateTimeFormatter ? string({ + year: "2-digit" + }, "year") : _this.num(dt.year.toString().slice(-2), 2); + + case "yyyy": + // like 0012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 4); + + case "yyyyyy": + // like 000012 + return useDateTimeFormatter ? string({ + year: "numeric" + }, "year") : _this.num(dt.year, 6); + // eras + + case "G": + // like AD + return era("short"); + + case "GG": + // like Anno Domini + return era("long"); + + case "GGGGG": + return era("narrow"); + + case "kk": + return _this.num(dt.weekYear.toString().slice(-2), 2); + + case "kkkk": + return _this.num(dt.weekYear, 4); + + case "W": + return _this.num(dt.weekNumber); + + case "WW": + return _this.num(dt.weekNumber, 2); + + case "o": + return _this.num(dt.ordinal); + + case "ooo": + return _this.num(dt.ordinal, 3); + + case "q": + // like 1 + return _this.num(dt.quarter); + + case "qq": + // like 01 + return _this.num(dt.quarter, 2); + + case "X": + return _this.num(Math.floor(dt.ts / 1000)); + + case "x": + return _this.num(dt.ts); + + default: + return maybeMacro(token); + } + }; + + return stringifyTokens(Formatter.parseFormat(fmt), tokenToString); + }; + + _proto.formatDurationFromString = function formatDurationFromString(dur, fmt) { + var _this2 = this; + + var tokenToField = function tokenToField(token) { + switch (token[0]) { + case "S": + return "millisecond"; + + case "s": + return "second"; + + case "m": + return "minute"; + + case "h": + return "hour"; + + case "d": + return "day"; + + case "M": + return "month"; + + case "y": + return "year"; + + default: + return null; + } + }, + tokenToString = function tokenToString(lildur) { + return function (token) { + var mapped = tokenToField(token); + + if (mapped) { + return _this2.num(lildur.get(mapped), token.length); + } else { + return token; + } + }; + }, + tokens = Formatter.parseFormat(fmt), + realTokens = tokens.reduce(function (found, _ref) { + var literal = _ref.literal, + val = _ref.val; + return literal ? found : found.concat(val); + }, []), + collapsed = dur.shiftTo.apply(dur, realTokens.map(tokenToField).filter(function (t) { + return t; + })); + + return stringifyTokens(tokens, tokenToString(collapsed)); + }; + + return Formatter; + }(); + + var Invalid = /*#__PURE__*/function () { + function Invalid(reason, explanation) { + this.reason = reason; + this.explanation = explanation; + } + + var _proto = Invalid.prototype; + + _proto.toMessage = function toMessage() { + if (this.explanation) { + return this.reason + ": " + this.explanation; + } else { + return this.reason; + } + }; + + return Invalid; + }(); + + /** + * @interface + */ + + var Zone = /*#__PURE__*/function () { + function Zone() {} + + var _proto = Zone.prototype; + + /** + * Returns the offset's common name (such as EST) at the specified timestamp + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the name + * @param {Object} opts - Options to affect the format + * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'. + * @param {string} opts.locale - What locale to return the offset name in. + * @return {string} + */ + _proto.offsetName = function offsetName(ts, opts) { + throw new ZoneIsAbstractError(); + } + /** + * Returns the offset's value as a string + * @abstract + * @param {number} ts - Epoch milliseconds for which to get the offset + * @param {string} format - What style of offset to return. + * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively + * @return {string} + */ + ; + + _proto.formatOffset = function formatOffset(ts, format) { + throw new ZoneIsAbstractError(); + } + /** + * Return the offset in minutes for this zone at the specified timestamp. + * @abstract + * @param {number} ts - Epoch milliseconds for which to compute the offset + * @return {number} + */ + ; + + _proto.offset = function offset(ts) { + throw new ZoneIsAbstractError(); + } + /** + * Return whether this Zone is equal to another zone + * @abstract + * @param {Zone} otherZone - the zone to compare + * @return {boolean} + */ + ; + + _proto.equals = function equals(otherZone) { + throw new ZoneIsAbstractError(); + } + /** + * Return whether this Zone is valid. + * @abstract + * @type {boolean} + */ + ; + + _createClass(Zone, [{ + key: "type", + + /** + * The type of zone + * @abstract + * @type {string} + */ + get: function get() { + throw new ZoneIsAbstractError(); + } + /** + * The name of this zone. + * @abstract + * @type {string} + */ + + }, { + key: "name", + get: function get() { + throw new ZoneIsAbstractError(); + } + /** + * Returns whether the offset is known to be fixed for the whole year. + * @abstract + * @type {boolean} + */ + + }, { + key: "universal", + get: function get() { + throw new ZoneIsAbstractError(); + } + }, { + key: "isValid", + get: function get() { + throw new ZoneIsAbstractError(); + } + }]); + + return Zone; + }(); + + var singleton = null; + /** + * Represents the local zone for this Javascript environment. + * @implements {Zone} + */ + + var LocalZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(LocalZone, _Zone); + + function LocalZone() { + return _Zone.apply(this, arguments) || this; + } + + var _proto = LocalZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale); + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + /** @override **/ + ; + + _proto.offset = function offset(ts) { + return -new Date(ts).getTimezoneOffset(); + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "local"; + } + /** @override **/ + ; + + _createClass(LocalZone, [{ + key: "type", + + /** @override **/ + get: function get() { + return "local"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + if (hasIntl()) { + return new Intl.DateTimeFormat().resolvedOptions().timeZone; + } else return "local"; + } + /** @override **/ + + }, { + key: "universal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }], [{ + key: "instance", + + /** + * Get a singleton instance of the local zone + * @return {LocalZone} + */ + get: function get() { + if (singleton === null) { + singleton = new LocalZone(); + } + + return singleton; + } + }]); + + return LocalZone; + }(Zone); + + var matchingRegex = RegExp("^" + ianaRegex.source + "$"); + var dtfCache = {}; + + function makeDTF(zone) { + if (!dtfCache[zone]) { + dtfCache[zone] = new Intl.DateTimeFormat("en-US", { + hour12: false, + timeZone: zone, + year: "numeric", + month: "2-digit", + day: "2-digit", + hour: "2-digit", + minute: "2-digit", + second: "2-digit" + }); + } + + return dtfCache[zone]; + } + + var typeToPos = { + year: 0, + month: 1, + day: 2, + hour: 3, + minute: 4, + second: 5 + }; + + function hackyOffset(dtf, date) { + var formatted = dtf.format(date).replace(/\u200E/g, ""), + parsed = /(\d+)\/(\d+)\/(\d+),? (\d+):(\d+):(\d+)/.exec(formatted), + fMonth = parsed[1], + fDay = parsed[2], + fYear = parsed[3], + fHour = parsed[4], + fMinute = parsed[5], + fSecond = parsed[6]; + return [fYear, fMonth, fDay, fHour, fMinute, fSecond]; + } + + function partsOffset(dtf, date) { + var formatted = dtf.formatToParts(date), + filled = []; + + for (var i = 0; i < formatted.length; i++) { + var _formatted$i = formatted[i], + type = _formatted$i.type, + value = _formatted$i.value, + pos = typeToPos[type]; + + if (!isUndefined(pos)) { + filled[pos] = parseInt(value, 10); + } + } + + return filled; + } + + var ianaZoneCache = {}; + /** + * A zone identified by an IANA identifier, like America/New_York + * @implements {Zone} + */ + + var IANAZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(IANAZone, _Zone); + + /** + * @param {string} name - Zone name + * @return {IANAZone} + */ + IANAZone.create = function create(name) { + if (!ianaZoneCache[name]) { + ianaZoneCache[name] = new IANAZone(name); + } + + return ianaZoneCache[name]; + } + /** + * Reset local caches. Should only be necessary in testing scenarios. + * @return {void} + */ + ; + + IANAZone.resetCache = function resetCache() { + ianaZoneCache = {}; + dtfCache = {}; + } + /** + * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that. + * @param {string} s - The string to check validity on + * @example IANAZone.isValidSpecifier("America/New_York") //=> true + * @example IANAZone.isValidSpecifier("Fantasia/Castle") //=> true + * @example IANAZone.isValidSpecifier("Sport~~blorp") //=> false + * @return {boolean} + */ + ; + + IANAZone.isValidSpecifier = function isValidSpecifier(s) { + return !!(s && s.match(matchingRegex)); + } + /** + * Returns whether the provided string identifies a real zone + * @param {string} zone - The string to check + * @example IANAZone.isValidZone("America/New_York") //=> true + * @example IANAZone.isValidZone("Fantasia/Castle") //=> false + * @example IANAZone.isValidZone("Sport~~blorp") //=> false + * @return {boolean} + */ + ; + + IANAZone.isValidZone = function isValidZone(zone) { + try { + new Intl.DateTimeFormat("en-US", { + timeZone: zone + }).format(); + return true; + } catch (e) { + return false; + } + } // Etc/GMT+8 -> -480 + + /** @ignore */ + ; + + IANAZone.parseGMTOffset = function parseGMTOffset(specifier) { + if (specifier) { + var match = specifier.match(/^Etc\/GMT([+-]\d{1,2})$/i); + + if (match) { + return -60 * parseInt(match[1]); + } + } + + return null; + }; + + function IANAZone(name) { + var _this; + + _this = _Zone.call(this) || this; + /** @private **/ + + _this.zoneName = name; + /** @private **/ + + _this.valid = IANAZone.isValidZone(name); + return _this; + } + /** @override **/ + + + var _proto = IANAZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName(ts, _ref) { + var format = _ref.format, + locale = _ref.locale; + return parseZoneInfo(ts, format, locale, this.name); + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.offset(ts), format); + } + /** @override **/ + ; + + _proto.offset = function offset(ts) { + var date = new Date(ts), + dtf = makeDTF(this.name), + _ref2 = dtf.formatToParts ? partsOffset(dtf, date) : hackyOffset(dtf, date), + year = _ref2[0], + month = _ref2[1], + day = _ref2[2], + hour = _ref2[3], + minute = _ref2[4], + second = _ref2[5], + adjustedHour = hour === 24 ? 0 : hour; + + var asUTC = objToLocalTS({ + year: year, + month: month, + day: day, + hour: adjustedHour, + minute: minute, + second: second, + millisecond: 0 + }); + var asTS = +date; + var over = asTS % 1000; + asTS -= over >= 0 ? over : 1000 + over; + return (asUTC - asTS) / (60 * 1000); + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "iana" && otherZone.name === this.name; + } + /** @override **/ + ; + + _createClass(IANAZone, [{ + key: "type", + get: function get() { + return "iana"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.zoneName; + } + /** @override **/ + + }, { + key: "universal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return this.valid; + } + }]); + + return IANAZone; + }(Zone); + + var singleton$1 = null; + /** + * A zone with a fixed offset (meaning no DST) + * @implements {Zone} + */ + + var FixedOffsetZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(FixedOffsetZone, _Zone); + + /** + * Get an instance with a specified offset + * @param {number} offset - The offset in minutes + * @return {FixedOffsetZone} + */ + FixedOffsetZone.instance = function instance(offset) { + return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset); + } + /** + * Get an instance of FixedOffsetZone from a UTC offset string, like "UTC+6" + * @param {string} s - The offset string to parse + * @example FixedOffsetZone.parseSpecifier("UTC+6") + * @example FixedOffsetZone.parseSpecifier("UTC+06") + * @example FixedOffsetZone.parseSpecifier("UTC-6:00") + * @return {FixedOffsetZone} + */ + ; + + FixedOffsetZone.parseSpecifier = function parseSpecifier(s) { + if (s) { + var r = s.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i); + + if (r) { + return new FixedOffsetZone(signedOffset(r[1], r[2])); + } + } + + return null; + }; + + _createClass(FixedOffsetZone, null, [{ + key: "utcInstance", + + /** + * Get a singleton instance of UTC + * @return {FixedOffsetZone} + */ + get: function get() { + if (singleton$1 === null) { + singleton$1 = new FixedOffsetZone(0); + } + + return singleton$1; + } + }]); + + function FixedOffsetZone(offset) { + var _this; + + _this = _Zone.call(this) || this; + /** @private **/ + + _this.fixed = offset; + return _this; + } + /** @override **/ + + + var _proto = FixedOffsetZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName() { + return this.name; + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset$1(ts, format) { + return formatOffset(this.fixed, format); + } + /** @override **/ + ; + + /** @override **/ + _proto.offset = function offset() { + return this.fixed; + } + /** @override **/ + ; + + _proto.equals = function equals(otherZone) { + return otherZone.type === "fixed" && otherZone.fixed === this.fixed; + } + /** @override **/ + ; + + _createClass(FixedOffsetZone, [{ + key: "type", + get: function get() { + return "fixed"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.fixed === 0 ? "UTC" : "UTC" + formatOffset(this.fixed, "narrow"); + } + }, { + key: "universal", + get: function get() { + return true; + } + }, { + key: "isValid", + get: function get() { + return true; + } + }]); + + return FixedOffsetZone; + }(Zone); + + /** + * A zone that failed to parse. You should never need to instantiate this. + * @implements {Zone} + */ + + var InvalidZone = /*#__PURE__*/function (_Zone) { + _inheritsLoose(InvalidZone, _Zone); + + function InvalidZone(zoneName) { + var _this; + + _this = _Zone.call(this) || this; + /** @private */ + + _this.zoneName = zoneName; + return _this; + } + /** @override **/ + + + var _proto = InvalidZone.prototype; + + /** @override **/ + _proto.offsetName = function offsetName() { + return null; + } + /** @override **/ + ; + + _proto.formatOffset = function formatOffset() { + return ""; + } + /** @override **/ + ; + + _proto.offset = function offset() { + return NaN; + } + /** @override **/ + ; + + _proto.equals = function equals() { + return false; + } + /** @override **/ + ; + + _createClass(InvalidZone, [{ + key: "type", + get: function get() { + return "invalid"; + } + /** @override **/ + + }, { + key: "name", + get: function get() { + return this.zoneName; + } + /** @override **/ + + }, { + key: "universal", + get: function get() { + return false; + } + }, { + key: "isValid", + get: function get() { + return false; + } + }]); + + return InvalidZone; + }(Zone); + + /** + * @private + */ + function normalizeZone(input, defaultZone) { + var offset; + + if (isUndefined(input) || input === null) { + return defaultZone; + } else if (input instanceof Zone) { + return input; + } else if (isString(input)) { + var lowered = input.toLowerCase(); + if (lowered === "local") return defaultZone;else if (lowered === "utc" || lowered === "gmt") return FixedOffsetZone.utcInstance;else if ((offset = IANAZone.parseGMTOffset(input)) != null) { + // handle Etc/GMT-4, which V8 chokes on + return FixedOffsetZone.instance(offset); + } else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input); + } else if (isNumber(input)) { + return FixedOffsetZone.instance(input); + } else if (typeof input === "object" && input.offset && typeof input.offset === "number") { + // This is dumb, but the instanceof check above doesn't seem to really work + // so we're duck checking it + return input; + } else { + return new InvalidZone(input); + } + } + + var now = function now() { + return Date.now(); + }, + defaultZone = null, + // not setting this directly to LocalZone.instance bc loading order issues + defaultLocale = null, + defaultNumberingSystem = null, + defaultOutputCalendar = null, + throwOnInvalid = false; + /** + * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here. + */ + + + var Settings = /*#__PURE__*/function () { + function Settings() {} + + /** + * Reset Luxon's global caches. Should only be necessary in testing scenarios. + * @return {void} + */ + Settings.resetCaches = function resetCaches() { + Locale.resetCache(); + IANAZone.resetCache(); + }; + + _createClass(Settings, null, [{ + key: "now", + + /** + * Get the callback for returning the current timestamp. + * @type {function} + */ + get: function get() { + return now; + } + /** + * Set the callback for returning the current timestamp. + * The function should return a number, which will be interpreted as an Epoch millisecond count + * @type {function} + * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future + * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time + */ + , + set: function set(n) { + now = n; + } + /** + * Get the default time zone to create DateTimes in. + * @type {string} + */ + + }, { + key: "defaultZoneName", + get: function get() { + return Settings.defaultZone.name; + } + /** + * Set the default time zone to create DateTimes in. Does not affect existing instances. + * @type {string} + */ + , + set: function set(z) { + if (!z) { + defaultZone = null; + } else { + defaultZone = normalizeZone(z); + } + } + /** + * Get the default time zone object to create DateTimes in. Does not affect existing instances. + * @type {Zone} + */ + + }, { + key: "defaultZone", + get: function get() { + return defaultZone || LocalZone.instance; + } + /** + * Get the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + + }, { + key: "defaultLocale", + get: function get() { + return defaultLocale; + } + /** + * Set the default locale to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(locale) { + defaultLocale = locale; + } + /** + * Get the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + + }, { + key: "defaultNumberingSystem", + get: function get() { + return defaultNumberingSystem; + } + /** + * Set the default numbering system to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(numberingSystem) { + defaultNumberingSystem = numberingSystem; + } + /** + * Get the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + + }, { + key: "defaultOutputCalendar", + get: function get() { + return defaultOutputCalendar; + } + /** + * Set the default output calendar to create DateTimes with. Does not affect existing instances. + * @type {string} + */ + , + set: function set(outputCalendar) { + defaultOutputCalendar = outputCalendar; + } + /** + * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + + }, { + key: "throwOnInvalid", + get: function get() { + return throwOnInvalid; + } + /** + * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals + * @type {boolean} + */ + , + set: function set(t) { + throwOnInvalid = t; + } + }]); + + return Settings; + }(); + + var intlDTCache = {}; + + function getCachedDTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var key = JSON.stringify([locString, opts]); + var dtf = intlDTCache[key]; + + if (!dtf) { + dtf = new Intl.DateTimeFormat(locString, opts); + intlDTCache[key] = dtf; + } + + return dtf; + } + + var intlNumCache = {}; + + function getCachedINF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var key = JSON.stringify([locString, opts]); + var inf = intlNumCache[key]; + + if (!inf) { + inf = new Intl.NumberFormat(locString, opts); + intlNumCache[key] = inf; + } + + return inf; + } + + var intlRelCache = {}; + + function getCachedRTF(locString, opts) { + if (opts === void 0) { + opts = {}; + } + + var _opts = opts, + base = _opts.base, + cacheKeyOpts = _objectWithoutPropertiesLoose(_opts, ["base"]); // exclude `base` from the options + + + var key = JSON.stringify([locString, cacheKeyOpts]); + var inf = intlRelCache[key]; + + if (!inf) { + inf = new Intl.RelativeTimeFormat(locString, opts); + intlRelCache[key] = inf; + } + + return inf; + } + + var sysLocaleCache = null; + + function systemLocale() { + if (sysLocaleCache) { + return sysLocaleCache; + } else if (hasIntl()) { + var computedSys = new Intl.DateTimeFormat().resolvedOptions().locale; // node sometimes defaults to "und". Override that because that is dumb + + sysLocaleCache = !computedSys || computedSys === "und" ? "en-US" : computedSys; + return sysLocaleCache; + } else { + sysLocaleCache = "en-US"; + return sysLocaleCache; + } + } + + function parseLocaleString(localeStr) { + // I really want to avoid writing a BCP 47 parser + // see, e.g. https://github.com/wooorm/bcp-47 + // Instead, we'll do this: + // a) if the string has no -u extensions, just leave it alone + // b) if it does, use Intl to resolve everything + // c) if Intl fails, try again without the -u + var uIndex = localeStr.indexOf("-u-"); + + if (uIndex === -1) { + return [localeStr]; + } else { + var options; + var smaller = localeStr.substring(0, uIndex); + + try { + options = getCachedDTF(localeStr).resolvedOptions(); + } catch (e) { + options = getCachedDTF(smaller).resolvedOptions(); + } + + var _options = options, + numberingSystem = _options.numberingSystem, + calendar = _options.calendar; // return the smaller one so that we can append the calendar and numbering overrides to it + + return [smaller, numberingSystem, calendar]; + } + } + + function intlConfigString(localeStr, numberingSystem, outputCalendar) { + if (hasIntl()) { + if (outputCalendar || numberingSystem) { + localeStr += "-u"; + + if (outputCalendar) { + localeStr += "-ca-" + outputCalendar; + } + + if (numberingSystem) { + localeStr += "-nu-" + numberingSystem; + } + + return localeStr; + } else { + return localeStr; + } + } else { + return []; + } + } + + function mapMonths(f) { + var ms = []; + + for (var i = 1; i <= 12; i++) { + var dt = DateTime.utc(2016, i, 1); + ms.push(f(dt)); + } + + return ms; + } + + function mapWeekdays(f) { + var ms = []; + + for (var i = 1; i <= 7; i++) { + var dt = DateTime.utc(2016, 11, 13 + i); + ms.push(f(dt)); + } + + return ms; + } + + function listStuff(loc, length, defaultOK, englishFn, intlFn) { + var mode = loc.listingMode(defaultOK); + + if (mode === "error") { + return null; + } else if (mode === "en") { + return englishFn(length); + } else { + return intlFn(length); + } + } + + function supportsFastNumbers(loc) { + if (loc.numberingSystem && loc.numberingSystem !== "latn") { + return false; + } else { + return loc.numberingSystem === "latn" || !loc.locale || loc.locale.startsWith("en") || hasIntl() && new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === "latn"; + } + } + /** + * @private + */ + + + var PolyNumberFormatter = /*#__PURE__*/function () { + function PolyNumberFormatter(intl, forceSimple, opts) { + this.padTo = opts.padTo || 0; + this.floor = opts.floor || false; + + if (!forceSimple && hasIntl()) { + var intlOpts = { + useGrouping: false + }; + if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo; + this.inf = getCachedINF(intl, intlOpts); + } + } + + var _proto = PolyNumberFormatter.prototype; + + _proto.format = function format(i) { + if (this.inf) { + var fixed = this.floor ? Math.floor(i) : i; + return this.inf.format(fixed); + } else { + // to match the browser's numberformatter defaults + var _fixed = this.floor ? Math.floor(i) : roundTo(i, 3); + + return padStart(_fixed, this.padTo); + } + }; + + return PolyNumberFormatter; + }(); + /** + * @private + */ + + + var PolyDateFormatter = /*#__PURE__*/function () { + function PolyDateFormatter(dt, intl, opts) { + this.opts = opts; + this.hasIntl = hasIntl(); + var z; + + if (dt.zone.universal && this.hasIntl) { + // Chromium doesn't support fixed-offset zones like Etc/GMT+8 in its formatter, + // See https://bugs.chromium.org/p/chromium/issues/detail?id=364374. + // So we have to make do. Two cases: + // 1. The format options tell us to show the zone. We can't do that, so the best + // we can do is format the date in UTC. + // 2. The format options don't tell us to show the zone. Then we can adjust them + // the time and tell the formatter to show it to us in UTC, so that the time is right + // and the bad zone doesn't show up. + // We can clean all this up when Chrome fixes this. + z = "UTC"; + + if (opts.timeZoneName) { + this.dt = dt; + } else { + this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000); + } + } else if (dt.zone.type === "local") { + this.dt = dt; + } else { + this.dt = dt; + z = dt.zone.name; + } + + if (this.hasIntl) { + var intlOpts = Object.assign({}, this.opts); + + if (z) { + intlOpts.timeZone = z; + } + + this.dtf = getCachedDTF(intl, intlOpts); + } + } + + var _proto2 = PolyDateFormatter.prototype; + + _proto2.format = function format() { + if (this.hasIntl) { + return this.dtf.format(this.dt.toJSDate()); + } else { + var tokenFormat = formatString(this.opts), + loc = Locale.create("en-US"); + return Formatter.create(loc).formatDateTimeFromString(this.dt, tokenFormat); + } + }; + + _proto2.formatToParts = function formatToParts() { + if (this.hasIntl && hasFormatToParts()) { + return this.dtf.formatToParts(this.dt.toJSDate()); + } else { + // This is kind of a cop out. We actually could do this for English. However, we couldn't do it for intl strings + // and IMO it's too weird to have an uncanny valley like that + return []; + } + }; + + _proto2.resolvedOptions = function resolvedOptions() { + if (this.hasIntl) { + return this.dtf.resolvedOptions(); + } else { + return { + locale: "en-US", + numberingSystem: "latn", + outputCalendar: "gregory" + }; + } + }; + + return PolyDateFormatter; + }(); + /** + * @private + */ + + + var PolyRelFormatter = /*#__PURE__*/function () { + function PolyRelFormatter(intl, isEnglish, opts) { + this.opts = Object.assign({ + style: "long" + }, opts); + + if (!isEnglish && hasRelative()) { + this.rtf = getCachedRTF(intl, opts); + } + } + + var _proto3 = PolyRelFormatter.prototype; + + _proto3.format = function format(count, unit) { + if (this.rtf) { + return this.rtf.format(count, unit); + } else { + return formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== "long"); + } + }; + + _proto3.formatToParts = function formatToParts(count, unit) { + if (this.rtf) { + return this.rtf.formatToParts(count, unit); + } else { + return []; + } + }; + + return PolyRelFormatter; + }(); + /** + * @private + */ + + + var Locale = /*#__PURE__*/function () { + Locale.fromOpts = function fromOpts(opts) { + return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN); + }; + + Locale.create = function create(locale, numberingSystem, outputCalendar, defaultToEN) { + if (defaultToEN === void 0) { + defaultToEN = false; + } + + var specifiedLocale = locale || Settings.defaultLocale, + // the system locale is useful for human readable strings but annoying for parsing/formatting known formats + localeR = specifiedLocale || (defaultToEN ? "en-US" : systemLocale()), + numberingSystemR = numberingSystem || Settings.defaultNumberingSystem, + outputCalendarR = outputCalendar || Settings.defaultOutputCalendar; + return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale); + }; + + Locale.resetCache = function resetCache() { + sysLocaleCache = null; + intlDTCache = {}; + intlNumCache = {}; + intlRelCache = {}; + }; + + Locale.fromObject = function fromObject(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + locale = _ref.locale, + numberingSystem = _ref.numberingSystem, + outputCalendar = _ref.outputCalendar; + + return Locale.create(locale, numberingSystem, outputCalendar); + }; + + function Locale(locale, numbering, outputCalendar, specifiedLocale) { + var _parseLocaleString = parseLocaleString(locale), + parsedLocale = _parseLocaleString[0], + parsedNumberingSystem = _parseLocaleString[1], + parsedOutputCalendar = _parseLocaleString[2]; + + this.locale = parsedLocale; + this.numberingSystem = numbering || parsedNumberingSystem || null; + this.outputCalendar = outputCalendar || parsedOutputCalendar || null; + this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar); + this.weekdaysCache = { + format: {}, + standalone: {} + }; + this.monthsCache = { + format: {}, + standalone: {} + }; + this.meridiemCache = null; + this.eraCache = {}; + this.specifiedLocale = specifiedLocale; + this.fastNumbersCached = null; + } + + var _proto4 = Locale.prototype; + + _proto4.listingMode = function listingMode(defaultOK) { + if (defaultOK === void 0) { + defaultOK = true; + } + + var intl = hasIntl(), + hasFTP = intl && hasFormatToParts(), + isActuallyEn = this.isEnglish(), + hasNoWeirdness = (this.numberingSystem === null || this.numberingSystem === "latn") && (this.outputCalendar === null || this.outputCalendar === "gregory"); + + if (!hasFTP && !(isActuallyEn && hasNoWeirdness) && !defaultOK) { + return "error"; + } else if (!hasFTP || isActuallyEn && hasNoWeirdness) { + return "en"; + } else { + return "intl"; + } + }; + + _proto4.clone = function clone(alts) { + if (!alts || Object.getOwnPropertyNames(alts).length === 0) { + return this; + } else { + return Locale.create(alts.locale || this.specifiedLocale, alts.numberingSystem || this.numberingSystem, alts.outputCalendar || this.outputCalendar, alts.defaultToEN || false); + } + }; + + _proto4.redefaultToEN = function redefaultToEN(alts) { + if (alts === void 0) { + alts = {}; + } + + return this.clone(Object.assign({}, alts, { + defaultToEN: true + })); + }; + + _proto4.redefaultToSystem = function redefaultToSystem(alts) { + if (alts === void 0) { + alts = {}; + } + + return this.clone(Object.assign({}, alts, { + defaultToEN: false + })); + }; + + _proto4.months = function months$1(length, format, defaultOK) { + var _this = this; + + if (format === void 0) { + format = false; + } + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, months, function () { + var intl = format ? { + month: length, + day: "numeric" + } : { + month: length + }, + formatStr = format ? "format" : "standalone"; + + if (!_this.monthsCache[formatStr][length]) { + _this.monthsCache[formatStr][length] = mapMonths(function (dt) { + return _this.extract(dt, intl, "month"); + }); + } + + return _this.monthsCache[formatStr][length]; + }); + }; + + _proto4.weekdays = function weekdays$1(length, format, defaultOK) { + var _this2 = this; + + if (format === void 0) { + format = false; + } + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, weekdays, function () { + var intl = format ? { + weekday: length, + year: "numeric", + month: "long", + day: "numeric" + } : { + weekday: length + }, + formatStr = format ? "format" : "standalone"; + + if (!_this2.weekdaysCache[formatStr][length]) { + _this2.weekdaysCache[formatStr][length] = mapWeekdays(function (dt) { + return _this2.extract(dt, intl, "weekday"); + }); + } + + return _this2.weekdaysCache[formatStr][length]; + }); + }; + + _proto4.meridiems = function meridiems$1(defaultOK) { + var _this3 = this; + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, undefined, defaultOK, function () { + return meridiems; + }, function () { + // In theory there could be aribitrary day periods. We're gonna assume there are exactly two + // for AM and PM. This is probably wrong, but it's makes parsing way easier. + if (!_this3.meridiemCache) { + var intl = { + hour: "numeric", + hour12: true + }; + _this3.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(function (dt) { + return _this3.extract(dt, intl, "dayperiod"); + }); + } + + return _this3.meridiemCache; + }); + }; + + _proto4.eras = function eras$1(length, defaultOK) { + var _this4 = this; + + if (defaultOK === void 0) { + defaultOK = true; + } + + return listStuff(this, length, defaultOK, eras, function () { + var intl = { + era: length + }; // This is utter bullshit. Different calendars are going to define eras totally differently. What I need is the minimum set of dates + // to definitely enumerate them. + + if (!_this4.eraCache[length]) { + _this4.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(function (dt) { + return _this4.extract(dt, intl, "era"); + }); + } + + return _this4.eraCache[length]; + }); + }; + + _proto4.extract = function extract(dt, intlOpts, field) { + var df = this.dtFormatter(dt, intlOpts), + results = df.formatToParts(), + matching = results.find(function (m) { + return m.type.toLowerCase() === field; + }); + return matching ? matching.value : null; + }; + + _proto4.numberFormatter = function numberFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + + // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave) + // (in contrast, the rest of the condition is used heavily) + return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts); + }; + + _proto4.dtFormatter = function dtFormatter(dt, intlOpts) { + if (intlOpts === void 0) { + intlOpts = {}; + } + + return new PolyDateFormatter(dt, this.intl, intlOpts); + }; + + _proto4.relFormatter = function relFormatter(opts) { + if (opts === void 0) { + opts = {}; + } + + return new PolyRelFormatter(this.intl, this.isEnglish(), opts); + }; + + _proto4.isEnglish = function isEnglish() { + return this.locale === "en" || this.locale.toLowerCase() === "en-us" || hasIntl() && new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us"); + }; + + _proto4.equals = function equals(other) { + return this.locale === other.locale && this.numberingSystem === other.numberingSystem && this.outputCalendar === other.outputCalendar; + }; + + _createClass(Locale, [{ + key: "fastNumbers", + get: function get() { + if (this.fastNumbersCached == null) { + this.fastNumbersCached = supportsFastNumbers(this); + } + + return this.fastNumbersCached; + } + }]); + + return Locale; + }(); + + /* + * This file handles parsing for well-specified formats. Here's how it works: + * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match. + * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object + * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence. + * Extractors can take a "cursor" representing the offset in the match to look at. This makes it easy to combine extractors. + * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions. + * Some extractions are super dumb and simpleParse and fromStrings help DRY them. + */ + + function combineRegexes() { + for (var _len = arguments.length, regexes = new Array(_len), _key = 0; _key < _len; _key++) { + regexes[_key] = arguments[_key]; + } + + var full = regexes.reduce(function (f, r) { + return f + r.source; + }, ""); + return RegExp("^" + full + "$"); + } + + function combineExtractors() { + for (var _len2 = arguments.length, extractors = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + extractors[_key2] = arguments[_key2]; + } + + return function (m) { + return extractors.reduce(function (_ref, ex) { + var mergedVals = _ref[0], + mergedZone = _ref[1], + cursor = _ref[2]; + + var _ex = ex(m, cursor), + val = _ex[0], + zone = _ex[1], + next = _ex[2]; + + return [Object.assign(mergedVals, val), mergedZone || zone, next]; + }, [{}, null, 1]).slice(0, 2); + }; + } + + function parse(s) { + if (s == null) { + return [null, null]; + } + + for (var _len3 = arguments.length, patterns = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) { + patterns[_key3 - 1] = arguments[_key3]; + } + + for (var _i = 0, _patterns = patterns; _i < _patterns.length; _i++) { + var _patterns$_i = _patterns[_i], + regex = _patterns$_i[0], + extractor = _patterns$_i[1]; + var m = regex.exec(s); + + if (m) { + return extractor(m); + } + } + + return [null, null]; + } + + function simpleParse() { + for (var _len4 = arguments.length, keys = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) { + keys[_key4] = arguments[_key4]; + } + + return function (match, cursor) { + var ret = {}; + var i; + + for (i = 0; i < keys.length; i++) { + ret[keys[i]] = parseInteger(match[cursor + i]); + } + + return [ret, null, cursor + i]; + }; + } // ISO and SQL parsing + + + var offsetRegex = /(?:(Z)|([+-]\d\d)(?::?(\d\d))?)/, + isoTimeBaseRegex = /(\d\d)(?::?(\d\d)(?::?(\d\d)(?:[.,](\d{1,9}))?)?)?/, + isoTimeRegex = RegExp("" + isoTimeBaseRegex.source + offsetRegex.source + "?"), + isoTimeExtensionRegex = RegExp("(?:T" + isoTimeRegex.source + ")?"), + isoYmdRegex = /([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/, + isoWeekRegex = /(\d{4})-?W(\d\d)(?:-?(\d))?/, + isoOrdinalRegex = /(\d{4})-?(\d{3})/, + extractISOWeekData = simpleParse("weekYear", "weekNumber", "weekDay"), + extractISOOrdinalData = simpleParse("year", "ordinal"), + sqlYmdRegex = /(\d{4})-(\d\d)-(\d\d)/, + // dumbed-down version of the ISO one + sqlTimeRegex = RegExp(isoTimeBaseRegex.source + " ?(?:" + offsetRegex.source + "|(" + ianaRegex.source + "))?"), + sqlTimeExtensionRegex = RegExp("(?: " + sqlTimeRegex.source + ")?"); + + function int(match, pos, fallback) { + var m = match[pos]; + return isUndefined(m) ? fallback : parseInteger(m); + } + + function extractISOYmd(match, cursor) { + var item = { + year: int(match, cursor), + month: int(match, cursor + 1, 1), + day: int(match, cursor + 2, 1) + }; + return [item, null, cursor + 3]; + } + + function extractISOTime(match, cursor) { + var item = { + hour: int(match, cursor, 0), + minute: int(match, cursor + 1, 0), + second: int(match, cursor + 2, 0), + millisecond: parseMillis(match[cursor + 3]) + }; + return [item, null, cursor + 4]; + } + + function extractISOOffset(match, cursor) { + var local = !match[cursor] && !match[cursor + 1], + fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]), + zone = local ? null : FixedOffsetZone.instance(fullOffset); + return [{}, zone, cursor + 3]; + } + + function extractIANAZone(match, cursor) { + var zone = match[cursor] ? IANAZone.create(match[cursor]) : null; + return [{}, zone, cursor + 1]; + } // ISO duration parsing + + + var isoDuration = /^-?P(?:(?:(-?\d{1,9})Y)?(?:(-?\d{1,9})M)?(?:(-?\d{1,9})W)?(?:(-?\d{1,9})D)?(?:T(?:(-?\d{1,9})H)?(?:(-?\d{1,9})M)?(?:(-?\d{1,9})(?:[.,](-?\d{1,9}))?S)?)?)$/; + + function extractISODuration(match) { + var s = match[0], + yearStr = match[1], + monthStr = match[2], + weekStr = match[3], + dayStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + millisecondsStr = match[8]; + var hasNegativePrefix = s[0] === "-"; + + var maybeNegate = function maybeNegate(num) { + return num && hasNegativePrefix ? -num : num; + }; + + return [{ + years: maybeNegate(parseInteger(yearStr)), + months: maybeNegate(parseInteger(monthStr)), + weeks: maybeNegate(parseInteger(weekStr)), + days: maybeNegate(parseInteger(dayStr)), + hours: maybeNegate(parseInteger(hourStr)), + minutes: maybeNegate(parseInteger(minuteStr)), + seconds: maybeNegate(parseInteger(secondStr)), + milliseconds: maybeNegate(parseMillis(millisecondsStr)) + }]; + } // These are a little braindead. EDT *should* tell us that we're in, say, America/New_York + // and not just that we're in -240 *right now*. But since I don't think these are used that often + // I'm just going to ignore that + + + var obsOffsets = { + GMT: 0, + EDT: -4 * 60, + EST: -5 * 60, + CDT: -5 * 60, + CST: -6 * 60, + MDT: -6 * 60, + MST: -7 * 60, + PDT: -7 * 60, + PST: -8 * 60 + }; + + function fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) { + var result = { + year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr), + month: monthsShort.indexOf(monthStr) + 1, + day: parseInteger(dayStr), + hour: parseInteger(hourStr), + minute: parseInteger(minuteStr) + }; + if (secondStr) result.second = parseInteger(secondStr); + + if (weekdayStr) { + result.weekday = weekdayStr.length > 3 ? weekdaysLong.indexOf(weekdayStr) + 1 : weekdaysShort.indexOf(weekdayStr) + 1; + } + + return result; + } // RFC 2822/5322 + + + var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/; + + function extractRFC2822(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + obsOffset = match[8], + milOffset = match[9], + offHourStr = match[10], + offMinuteStr = match[11], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + var offset; + + if (obsOffset) { + offset = obsOffsets[obsOffset]; + } else if (milOffset) { + offset = 0; + } else { + offset = signedOffset(offHourStr, offMinuteStr); + } + + return [result, new FixedOffsetZone(offset)]; + } + + function preprocessRFC2822(s) { + // Remove comments and folding whitespace and replace multiple-spaces with a single space + return s.replace(/\([^)]*\)|[\n\t]/g, " ").replace(/(\s\s+)/g, " ").trim(); + } // http date + + + var rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/, + rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/, + ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/; + + function extractRFC1123Or850(match) { + var weekdayStr = match[1], + dayStr = match[2], + monthStr = match[3], + yearStr = match[4], + hourStr = match[5], + minuteStr = match[6], + secondStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; + } + + function extractASCII(match) { + var weekdayStr = match[1], + monthStr = match[2], + dayStr = match[3], + hourStr = match[4], + minuteStr = match[5], + secondStr = match[6], + yearStr = match[7], + result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr); + return [result, FixedOffsetZone.utcInstance]; + } + + var isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex); + var isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex); + var isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex); + var isoTimeCombinedRegex = combineRegexes(isoTimeRegex); + var extractISOYmdTimeAndOffset = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset); + var extractISOWeekTimeAndOffset = combineExtractors(extractISOWeekData, extractISOTime, extractISOOffset); + var extractISOOrdinalDataAndTime = combineExtractors(extractISOOrdinalData, extractISOTime); + var extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset); + /** + * @private + */ + + function parseISODate(s) { + return parse(s, [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset], [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset], [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDataAndTime], [isoTimeCombinedRegex, extractISOTimeAndOffset]); + } + function parseRFC2822Date(s) { + return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]); + } + function parseHTTPDate(s) { + return parse(s, [rfc1123, extractRFC1123Or850], [rfc850, extractRFC1123Or850], [ascii, extractASCII]); + } + function parseISODuration(s) { + return parse(s, [isoDuration, extractISODuration]); + } + var sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex); + var sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex); + var extractISOYmdTimeOffsetAndIANAZone = combineExtractors(extractISOYmd, extractISOTime, extractISOOffset, extractIANAZone); + var extractISOTimeOffsetAndIANAZone = combineExtractors(extractISOTime, extractISOOffset, extractIANAZone); + function parseSQL(s) { + return parse(s, [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone], [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]); + } + + var INVALID = "Invalid Duration"; // unit conversion constants + + var lowOrderMatrix = { + weeks: { + days: 7, + hours: 7 * 24, + minutes: 7 * 24 * 60, + seconds: 7 * 24 * 60 * 60, + milliseconds: 7 * 24 * 60 * 60 * 1000 + }, + days: { + hours: 24, + minutes: 24 * 60, + seconds: 24 * 60 * 60, + milliseconds: 24 * 60 * 60 * 1000 + }, + hours: { + minutes: 60, + seconds: 60 * 60, + milliseconds: 60 * 60 * 1000 + }, + minutes: { + seconds: 60, + milliseconds: 60 * 1000 + }, + seconds: { + milliseconds: 1000 + } + }, + casualMatrix = Object.assign({ + years: { + months: 12, + weeks: 52, + days: 365, + hours: 365 * 24, + minutes: 365 * 24 * 60, + seconds: 365 * 24 * 60 * 60, + milliseconds: 365 * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: 13, + days: 91, + hours: 91 * 24, + minutes: 91 * 24 * 60, + milliseconds: 91 * 24 * 60 * 60 * 1000 + }, + months: { + weeks: 4, + days: 30, + hours: 30 * 24, + minutes: 30 * 24 * 60, + seconds: 30 * 24 * 60 * 60, + milliseconds: 30 * 24 * 60 * 60 * 1000 + } + }, lowOrderMatrix), + daysInYearAccurate = 146097.0 / 400, + daysInMonthAccurate = 146097.0 / 4800, + accurateMatrix = Object.assign({ + years: { + months: 12, + weeks: daysInYearAccurate / 7, + days: daysInYearAccurate, + hours: daysInYearAccurate * 24, + minutes: daysInYearAccurate * 24 * 60, + seconds: daysInYearAccurate * 24 * 60 * 60, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 + }, + quarters: { + months: 3, + weeks: daysInYearAccurate / 28, + days: daysInYearAccurate / 4, + hours: daysInYearAccurate * 24 / 4, + minutes: daysInYearAccurate * 24 * 60 / 4, + seconds: daysInYearAccurate * 24 * 60 * 60 / 4, + milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000 / 4 + }, + months: { + weeks: daysInMonthAccurate / 7, + days: daysInMonthAccurate, + hours: daysInMonthAccurate * 24, + minutes: daysInMonthAccurate * 24 * 60, + seconds: daysInMonthAccurate * 24 * 60 * 60, + milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000 + } + }, lowOrderMatrix); // units ordered by size + + var orderedUnits = ["years", "quarters", "months", "weeks", "days", "hours", "minutes", "seconds", "milliseconds"]; + var reverseUnits = orderedUnits.slice(0).reverse(); // clone really means "create another instance just like this one, but with these changes" + + function clone(dur, alts, clear) { + if (clear === void 0) { + clear = false; + } + + // deep merge for vals + var conf = { + values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}), + loc: dur.loc.clone(alts.loc), + conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy + }; + return new Duration(conf); + } + + function antiTrunc(n) { + return n < 0 ? Math.floor(n) : Math.ceil(n); + } // NB: mutates parameters + + + function convert(matrix, fromMap, fromUnit, toMap, toUnit) { + var conv = matrix[toUnit][fromUnit], + raw = fromMap[fromUnit] / conv, + sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]), + // ok, so this is wild, but see the matrix in the tests + added = !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw); + toMap[toUnit] += added; + fromMap[fromUnit] -= added * conv; + } // NB: mutates parameters + + + function normalizeValues(matrix, vals) { + reverseUnits.reduce(function (previous, current) { + if (!isUndefined(vals[current])) { + if (previous) { + convert(matrix, vals, previous, vals, current); + } + + return current; + } else { + return previous; + } + }, null); + } + /** + * A Duration object represents a period of time, like "2 months" or "1 day, 1 hour". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime. + * + * Here is a brief overview of commonly used methods and getters in Duration: + * + * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}. + * * **Unit values** See the {@link Duration.years}, {@link Duration.months}, {@link Duration.weeks}, {@link Duration.days}, {@link Duration.hours}, {@link Duration.minutes}, {@link Duration.seconds}, {@link Duration.milliseconds} accessors. + * * **Configuration** See {@link Duration.locale} and {@link Duration.numberingSystem} accessors. + * * **Transformation** To create new Durations out of old ones use {@link Duration.plus}, {@link Duration.minus}, {@link Duration.normalize}, {@link Duration.set}, {@link Duration.reconfigure}, {@link Duration.shiftTo}, and {@link Duration.negate}. + * * **Output** To convert the Duration into other representations, see {@link Duration.as}, {@link Duration.toISO}, {@link Duration.toFormat}, and {@link Duration.toJSON} + * + * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation. + */ + + + var Duration = /*#__PURE__*/function () { + /** + * @private + */ + function Duration(config) { + var accurate = config.conversionAccuracy === "longterm" || false; + /** + * @access private + */ + + this.values = config.values; + /** + * @access private + */ + + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + + this.conversionAccuracy = accurate ? "longterm" : "casual"; + /** + * @access private + */ + + this.invalid = config.invalid || null; + /** + * @access private + */ + + this.matrix = accurate ? accurateMatrix : casualMatrix; + /** + * @access private + */ + + this.isLuxonDuration = true; + } + /** + * Create Duration from a number of milliseconds. + * @param {number} count of milliseconds + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + + + Duration.fromMillis = function fromMillis(count, opts) { + return Duration.fromObject(Object.assign({ + milliseconds: count + }, opts)); + } + /** + * Create a Duration from a Javascript object with keys like 'years' and 'hours. + * If this object is empty then a zero milliseconds duration is returned. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.years + * @param {number} obj.quarters + * @param {number} obj.months + * @param {number} obj.weeks + * @param {number} obj.days + * @param {number} obj.hours + * @param {number} obj.minutes + * @param {number} obj.seconds + * @param {number} obj.milliseconds + * @param {string} [obj.locale='en-US'] - the locale to use + * @param {string} obj.numberingSystem - the numbering system to use + * @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + ; + + Duration.fromObject = function fromObject(obj) { + if (obj == null || typeof obj !== "object") { + throw new InvalidArgumentError("Duration.fromObject: argument expected to be an object, got " + (obj === null ? "null" : typeof obj)); + } + + return new Duration({ + values: normalizeObject(obj, Duration.normalizeUnit, ["locale", "numberingSystem", "conversionAccuracy", "zone" // a bit of debt; it's super inconvenient internally not to be able to blindly pass this + ]), + loc: Locale.fromObject(obj), + conversionAccuracy: obj.conversionAccuracy + }); + } + /** + * Create a Duration from an ISO 8601 duration string. + * @param {string} text - text to parse + * @param {Object} opts - options for parsing + * @param {string} [opts.locale='en-US'] - the locale to use + * @param {string} opts.numberingSystem - the numbering system to use + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 } + * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 } + * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 } + * @return {Duration} + */ + ; + + Duration.fromISO = function fromISO(text, opts) { + var _parseISODuration = parseISODuration(text), + parsed = _parseISODuration[0]; + + if (parsed) { + var obj = Object.assign(parsed, opts); + return Duration.fromObject(obj); + } else { + return Duration.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + } + /** + * Create an invalid Duration. + * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Duration} + */ + ; + + Duration.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Duration is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDurationError(invalid); + } else { + return new Duration({ + invalid: invalid + }); + } + } + /** + * @private + */ + ; + + Duration.normalizeUnit = function normalizeUnit(unit) { + var normalized = { + year: "years", + years: "years", + quarter: "quarters", + quarters: "quarters", + month: "months", + months: "months", + week: "weeks", + weeks: "weeks", + day: "days", + days: "days", + hour: "hours", + hours: "hours", + minute: "minutes", + minutes: "minutes", + second: "seconds", + seconds: "seconds", + millisecond: "milliseconds", + milliseconds: "milliseconds" + }[unit ? unit.toLowerCase() : unit]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } + /** + * Check if an object is a Duration. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + Duration.isDuration = function isDuration(o) { + return o && o.isLuxonDuration || false; + } + /** + * Get the locale of a Duration, such 'en-GB' + * @type {string} + */ + ; + + var _proto = Duration.prototype; + + /** + * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens: + * * `S` for milliseconds + * * `s` for seconds + * * `m` for minutes + * * `h` for hours + * * `d` for days + * * `M` for months + * * `y` for years + * Notes: + * * Add padding by repeating the token, e.g. "yy" pads the years to two digits, "hhhh" pads the hours out to four digits + * * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting. + * @param {string} fmt - the format string + * @param {Object} opts - options + * @param {boolean} [opts.floor=true] - floor numerical values + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("y d s") //=> "1 6 2" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("yy dd sss") //=> "01 06 002" + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat("M S") //=> "12 518402000" + * @return {string} + */ + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + // reverse-compat since 1.2; we always round down now, never up, and we do it by default + var fmtOpts = Object.assign({}, opts, { + floor: opts.round !== false && opts.floor !== false + }); + return this.isValid ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt) : INVALID; + } + /** + * Returns a Javascript object with this Duration's values. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 } + * @return {Object} + */ + ; + + _proto.toObject = function toObject(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) return {}; + var base = Object.assign({}, this.values); + + if (opts.includeConfig) { + base.conversionAccuracy = this.conversionAccuracy; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + + return base; + } + /** + * Returns an ISO 8601-compliant string representation of this Duration. + * @see https://en.wikipedia.org/wiki/ISO_8601#Durations + * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S' + * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S' + * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M' + * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M' + * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S' + * @return {string} + */ + ; + + _proto.toISO = function toISO() { + // we could use the formatter, but this is an easier way to get the minimum string + if (!this.isValid) return null; + var s = "P"; + if (this.years !== 0) s += this.years + "Y"; + if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + "M"; + if (this.weeks !== 0) s += this.weeks + "W"; + if (this.days !== 0) s += this.days + "D"; + if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0) s += "T"; + if (this.hours !== 0) s += this.hours + "H"; + if (this.minutes !== 0) s += this.minutes + "M"; + if (this.seconds !== 0 || this.milliseconds !== 0) // this will handle "floating point madness" by removing extra decimal places + // https://stackoverflow.com/questions/588004/is-floating-point-math-broken + s += roundTo(this.seconds + this.milliseconds / 1000, 3) + "S"; + if (s === "P") s += "T0S"; + return s; + } + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in JSON. + * @return {string} + */ + ; + + _proto.toJSON = function toJSON() { + return this.toISO(); + } + /** + * Returns an ISO 8601 representation of this Duration appropriate for use in debugging. + * @return {string} + */ + ; + + _proto.toString = function toString() { + return this.toISO(); + } + /** + * Returns an milliseconds value of this Duration. + * @return {number} + */ + ; + + _proto.valueOf = function valueOf() { + return this.as("milliseconds"); + } + /** + * Make this Duration longer by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + ; + + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration), + result = {}; + + for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits), _step; !(_step = _iterator()).done;) { + var k = _step.value; + + if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) { + result[k] = dur.get(k) + this.get(k); + } + } + + return clone(this, { + values: result + }, true); + } + /** + * Make this Duration shorter by the specified amount. Return a newly-constructed Duration. + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @return {Duration} + */ + ; + + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration); + return this.plus(dur.negate()); + } + /** + * Scale this Duration by the specified amount. Return a newly-constructed Duration. + * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number. + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit(x => x * 2) //=> { hours: 2, minutes: 60 } + * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit((x, u) => u === "hour" ? x * 2 : x) //=> { hours: 2, minutes: 30 } + * @return {Duration} + */ + ; + + _proto.mapUnits = function mapUnits(fn) { + if (!this.isValid) return this; + var result = {}; + + for (var _i = 0, _Object$keys = Object.keys(this.values); _i < _Object$keys.length; _i++) { + var k = _Object$keys[_i]; + result[k] = asNumber(fn(this.values[k], k)); + } + + return clone(this, { + values: result + }, true); + } + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example Duration.fromObject({years: 2, days: 3}).years //=> 2 + * @example Duration.fromObject({years: 2, days: 3}).months //=> 0 + * @example Duration.fromObject({years: 2, days: 3}).days //=> 3 + * @return {number} + */ + ; + + _proto.get = function get(unit) { + return this[Duration.normalizeUnit(unit)]; + } + /** + * "Set" the values of specified units. Return a newly-constructed Duration. + * @param {Object} values - a mapping of units to numbers + * @example dur.set({ years: 2017 }) + * @example dur.set({ hours: 8, minutes: 30 }) + * @return {Duration} + */ + ; + + _proto.set = function set(values) { + if (!this.isValid) return this; + var mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit, [])); + return clone(this, { + values: mixed + }); + } + /** + * "Set" the locale and/or numberingSystem. Returns a newly-constructed Duration. + * @example dur.reconfigure({ locale: 'en-GB' }) + * @return {Duration} + */ + ; + + _proto.reconfigure = function reconfigure(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + locale = _ref.locale, + numberingSystem = _ref.numberingSystem, + conversionAccuracy = _ref.conversionAccuracy; + + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem + }), + opts = { + loc: loc + }; + + if (conversionAccuracy) { + opts.conversionAccuracy = conversionAccuracy; + } + + return clone(this, opts); + } + /** + * Return the length of the duration in the specified unit. + * @param {string} unit - a unit such as 'minutes' or 'days' + * @example Duration.fromObject({years: 1}).as('days') //=> 365 + * @example Duration.fromObject({years: 1}).as('months') //=> 12 + * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5 + * @return {number} + */ + ; + + _proto.as = function as(unit) { + return this.isValid ? this.shiftTo(unit).get(unit) : NaN; + } + /** + * Reduce this Duration to its canonical representation in its current units. + * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 } + * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 } + * @return {Duration} + */ + ; + + _proto.normalize = function normalize() { + if (!this.isValid) return this; + var vals = this.toObject(); + normalizeValues(this.matrix, vals); + return clone(this, { + values: vals + }, true); + } + /** + * Convert this Duration into its representation in a different set of units. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 } + * @return {Duration} + */ + ; + + _proto.shiftTo = function shiftTo() { + for (var _len = arguments.length, units = new Array(_len), _key = 0; _key < _len; _key++) { + units[_key] = arguments[_key]; + } + + if (!this.isValid) return this; + + if (units.length === 0) { + return this; + } + + units = units.map(function (u) { + return Duration.normalizeUnit(u); + }); + var built = {}, + accumulated = {}, + vals = this.toObject(); + var lastUnit; + normalizeValues(this.matrix, vals); + + for (var _iterator2 = _createForOfIteratorHelperLoose(orderedUnits), _step2; !(_step2 = _iterator2()).done;) { + var k = _step2.value; + + if (units.indexOf(k) >= 0) { + lastUnit = k; + var own = 0; // anything we haven't boiled down yet should get boiled to this unit + + for (var ak in accumulated) { + own += this.matrix[ak][k] * accumulated[ak]; + accumulated[ak] = 0; + } // plus anything that's already in this unit + + + if (isNumber(vals[k])) { + own += vals[k]; + } + + var i = Math.trunc(own); + built[k] = i; + accumulated[k] = own - i; // we'd like to absorb these fractions in another unit + // plus anything further down the chain that should be rolled up in to this + + for (var down in vals) { + if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) { + convert(this.matrix, vals, down, built, k); + } + } // otherwise, keep it in the wings to boil it later + + } else if (isNumber(vals[k])) { + accumulated[k] = vals[k]; + } + } // anything leftover becomes the decimal for the last unit + // lastUnit must be defined since units is not empty + + + for (var key in accumulated) { + if (accumulated[key] !== 0) { + built[lastUnit] += key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key]; + } + } + + return clone(this, { + values: built + }, true).normalize(); + } + /** + * Return the negative of this Duration. + * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 } + * @return {Duration} + */ + ; + + _proto.negate = function negate() { + if (!this.isValid) return this; + var negated = {}; + + for (var _i2 = 0, _Object$keys2 = Object.keys(this.values); _i2 < _Object$keys2.length; _i2++) { + var k = _Object$keys2[_i2]; + negated[k] = -this.values[k]; + } + + return clone(this, { + values: negated + }, true); + } + /** + * Get the years. + * @type {number} + */ + ; + + /** + * Equality check + * Two Durations are equal iff they have the same units and the same values for each unit. + * @param {Duration} other + * @return {boolean} + */ + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + if (!this.loc.equals(other.loc)) { + return false; + } + + for (var _iterator3 = _createForOfIteratorHelperLoose(orderedUnits), _step3; !(_step3 = _iterator3()).done;) { + var u = _step3.value; + + if (this.values[u] !== other.values[u]) { + return false; + } + } + + return true; + }; + + _createClass(Duration, [{ + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + /** + * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration + * + * @type {string} + */ + + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + }, { + key: "years", + get: function get() { + return this.isValid ? this.values.years || 0 : NaN; + } + /** + * Get the quarters. + * @type {number} + */ + + }, { + key: "quarters", + get: function get() { + return this.isValid ? this.values.quarters || 0 : NaN; + } + /** + * Get the months. + * @type {number} + */ + + }, { + key: "months", + get: function get() { + return this.isValid ? this.values.months || 0 : NaN; + } + /** + * Get the weeks + * @type {number} + */ + + }, { + key: "weeks", + get: function get() { + return this.isValid ? this.values.weeks || 0 : NaN; + } + /** + * Get the days. + * @type {number} + */ + + }, { + key: "days", + get: function get() { + return this.isValid ? this.values.days || 0 : NaN; + } + /** + * Get the hours. + * @type {number} + */ + + }, { + key: "hours", + get: function get() { + return this.isValid ? this.values.hours || 0 : NaN; + } + /** + * Get the minutes. + * @type {number} + */ + + }, { + key: "minutes", + get: function get() { + return this.isValid ? this.values.minutes || 0 : NaN; + } + /** + * Get the seconds. + * @return {number} + */ + + }, { + key: "seconds", + get: function get() { + return this.isValid ? this.values.seconds || 0 : NaN; + } + /** + * Get the milliseconds. + * @return {number} + */ + + }, { + key: "milliseconds", + get: function get() { + return this.isValid ? this.values.milliseconds || 0 : NaN; + } + /** + * Returns whether the Duration is invalid. Invalid durations are returned by diff operations + * on invalid DateTimes or Intervals. + * @return {boolean} + */ + + }, { + key: "isValid", + get: function get() { + return this.invalid === null; + } + /** + * Returns an error code if this Duration became invalid, or null if the Duration is valid + * @return {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this Duration became invalid, or null if the Duration is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + + return Duration; + }(); + function friendlyDuration(durationish) { + if (isNumber(durationish)) { + return Duration.fromMillis(durationish); + } else if (Duration.isDuration(durationish)) { + return durationish; + } else if (typeof durationish === "object") { + return Duration.fromObject(durationish); + } else { + throw new InvalidArgumentError("Unknown duration argument " + durationish + " of type " + typeof durationish); + } + } + + var INVALID$1 = "Invalid Interval"; // checks if the start is equal to or before the end + + function validateStartEnd(start, end) { + if (!start || !start.isValid) { + return Interval.invalid("missing or invalid start"); + } else if (!end || !end.isValid) { + return Interval.invalid("missing or invalid end"); + } else if (end < start) { + return Interval.invalid("end before start", "The end of an interval must be after its start, but you had start=" + start.toISO() + " and end=" + end.toISO()); + } else { + return null; + } + } + /** + * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them. + * + * Here is a brief overview of the most commonly used methods and getters in Interval: + * + * * **Creation** To create an Interval, use {@link fromDateTimes}, {@link after}, {@link before}, or {@link fromISO}. + * * **Accessors** Use {@link start} and {@link end} to get the start and end. + * * **Interrogation** To analyze the Interval, use {@link count}, {@link length}, {@link hasSame}, {@link contains}, {@link isAfter}, or {@link isBefore}. + * * **Transformation** To create other Intervals out of this one, use {@link set}, {@link splitAt}, {@link splitBy}, {@link divideEqually}, {@link merge}, {@link xor}, {@link union}, {@link intersection}, or {@link difference}. + * * **Comparison** To compare this Interval to another one, use {@link equals}, {@link overlaps}, {@link abutsStart}, {@link abutsEnd}, {@link engulfs} + * * **Output** To convert the Interval into other representations, see {@link toString}, {@link toISO}, {@link toISODate}, {@link toISOTime}, {@link toFormat}, and {@link toDuration}. + */ + + + var Interval = /*#__PURE__*/function () { + /** + * @private + */ + function Interval(config) { + /** + * @access private + */ + this.s = config.start; + /** + * @access private + */ + + this.e = config.end; + /** + * @access private + */ + + this.invalid = config.invalid || null; + /** + * @access private + */ + + this.isLuxonInterval = true; + } + /** + * Create an invalid Interval. + * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {Interval} + */ + + + Interval.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the Interval is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidIntervalError(invalid); + } else { + return new Interval({ + invalid: invalid + }); + } + } + /** + * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end. + * @param {DateTime|Date|Object} start + * @param {DateTime|Date|Object} end + * @return {Interval} + */ + ; + + Interval.fromDateTimes = function fromDateTimes(start, end) { + var builtStart = friendlyDateTime(start), + builtEnd = friendlyDateTime(end); + var validateError = validateStartEnd(builtStart, builtEnd); + + if (validateError == null) { + return new Interval({ + start: builtStart, + end: builtEnd + }); + } else { + return validateError; + } + } + /** + * Create an Interval from a start DateTime and a Duration to extend to. + * @param {DateTime|Date|Object} start + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + ; + + Interval.after = function after(start, duration) { + var dur = friendlyDuration(duration), + dt = friendlyDateTime(start); + return Interval.fromDateTimes(dt, dt.plus(dur)); + } + /** + * Create an Interval from an end DateTime and a Duration to extend backwards to. + * @param {DateTime|Date|Object} end + * @param {Duration|Object|number} duration - the length of the Interval. + * @return {Interval} + */ + ; + + Interval.before = function before(end, duration) { + var dur = friendlyDuration(duration), + dt = friendlyDateTime(end); + return Interval.fromDateTimes(dt.minus(dur), dt); + } + /** + * Create an Interval from an ISO 8601 string. + * Accepts `/`, `/`, and `/` formats. + * @param {string} text - the ISO string to parse + * @param {Object} [opts] - options to pass {@link DateTime.fromISO} and optionally {@link Duration.fromISO} + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {Interval} + */ + ; + + Interval.fromISO = function fromISO(text, opts) { + var _split = (text || "").split("/", 2), + s = _split[0], + e = _split[1]; + + if (s && e) { + var start = DateTime.fromISO(s, opts), + end = DateTime.fromISO(e, opts); + + if (start.isValid && end.isValid) { + return Interval.fromDateTimes(start, end); + } + + if (start.isValid) { + var dur = Duration.fromISO(e, opts); + + if (dur.isValid) { + return Interval.after(start, dur); + } + } else if (end.isValid) { + var _dur = Duration.fromISO(s, opts); + + if (_dur.isValid) { + return Interval.before(end, _dur); + } + } + } + + return Interval.invalid("unparsable", "the input \"" + text + "\" can't be parsed as ISO 8601"); + } + /** + * Check if an object is an Interval. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + Interval.isInterval = function isInterval(o) { + return o && o.isLuxonInterval || false; + } + /** + * Returns the start of the Interval + * @type {DateTime} + */ + ; + + var _proto = Interval.prototype; + + /** + * Returns the length of the Interval in the specified unit. + * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in. + * @return {number} + */ + _proto.length = function length(unit) { + if (unit === void 0) { + unit = "milliseconds"; + } + + return this.isValid ? this.toDuration.apply(this, [unit]).get(unit) : NaN; + } + /** + * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part. + * Unlike {@link length} this counts sections of the calendar, not periods of time, e.g. specifying 'day' + * asks 'what dates are included in this interval?', not 'how many days long is this interval?' + * @param {string} [unit='milliseconds'] - the unit of time to count. + * @return {number} + */ + ; + + _proto.count = function count(unit) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (!this.isValid) return NaN; + var start = this.start.startOf(unit), + end = this.end.startOf(unit); + return Math.floor(end.diff(start, unit).get(unit)) + 1; + } + /** + * Returns whether this Interval's start and end are both in the same unit of time + * @param {string} unit - the unit of time to check sameness on + * @return {boolean} + */ + ; + + _proto.hasSame = function hasSame(unit) { + return this.isValid ? this.e.minus(1).hasSame(this.s, unit) : false; + } + /** + * Return whether this Interval has the same start and end DateTimes. + * @return {boolean} + */ + ; + + _proto.isEmpty = function isEmpty() { + return this.s.valueOf() === this.e.valueOf(); + } + /** + * Return whether this Interval's start is after the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.isAfter = function isAfter(dateTime) { + if (!this.isValid) return false; + return this.s > dateTime; + } + /** + * Return whether this Interval's end is before the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.isBefore = function isBefore(dateTime) { + if (!this.isValid) return false; + return this.e <= dateTime; + } + /** + * Return whether this Interval contains the specified DateTime. + * @param {DateTime} dateTime + * @return {boolean} + */ + ; + + _proto.contains = function contains(dateTime) { + if (!this.isValid) return false; + return this.s <= dateTime && this.e > dateTime; + } + /** + * "Sets" the start and/or end dates. Returns a newly-constructed Interval. + * @param {Object} values - the values to set + * @param {DateTime} values.start - the starting DateTime + * @param {DateTime} values.end - the ending DateTime + * @return {Interval} + */ + ; + + _proto.set = function set(_temp) { + var _ref = _temp === void 0 ? {} : _temp, + start = _ref.start, + end = _ref.end; + + if (!this.isValid) return this; + return Interval.fromDateTimes(start || this.s, end || this.e); + } + /** + * Split this Interval at each of the specified DateTimes + * @param {...[DateTime]} dateTimes - the unit of time to count. + * @return {[Interval]} + */ + ; + + _proto.splitAt = function splitAt() { + var _this = this; + + if (!this.isValid) return []; + + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + + var sorted = dateTimes.map(friendlyDateTime).filter(function (d) { + return _this.contains(d); + }).sort(), + results = []; + var s = this.s, + i = 0; + + while (s < this.e) { + var added = sorted[i] || this.e, + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + i += 1; + } + + return results; + } + /** + * Split this Interval into smaller Intervals, each of the specified length. + * Left over time is grouped into a smaller interval + * @param {Duration|Object|number} duration - The length of each resulting interval. + * @return {[Interval]} + */ + ; + + _proto.splitBy = function splitBy(duration) { + var dur = friendlyDuration(duration); + + if (!this.isValid || !dur.isValid || dur.as("milliseconds") === 0) { + return []; + } + + var s = this.s, + added, + next; + var results = []; + + while (s < this.e) { + added = s.plus(dur); + next = +added > +this.e ? this.e : added; + results.push(Interval.fromDateTimes(s, next)); + s = next; + } + + return results; + } + /** + * Split this Interval into the specified number of smaller intervals. + * @param {number} numberOfParts - The number of Intervals to divide the Interval into. + * @return {[Interval]} + */ + ; + + _proto.divideEqually = function divideEqually(numberOfParts) { + if (!this.isValid) return []; + return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts); + } + /** + * Return whether this Interval overlaps with the specified Interval + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.overlaps = function overlaps(other) { + return this.e > other.s && this.s < other.e; + } + /** + * Return whether this Interval's end is adjacent to the specified Interval's start. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.abutsStart = function abutsStart(other) { + if (!this.isValid) return false; + return +this.e === +other.s; + } + /** + * Return whether this Interval's start is adjacent to the specified Interval's end. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.abutsEnd = function abutsEnd(other) { + if (!this.isValid) return false; + return +other.e === +this.s; + } + /** + * Return whether this Interval engulfs the start and end of the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.engulfs = function engulfs(other) { + if (!this.isValid) return false; + return this.s <= other.s && this.e >= other.e; + } + /** + * Return whether this Interval has the same start and end as the specified Interval. + * @param {Interval} other + * @return {boolean} + */ + ; + + _proto.equals = function equals(other) { + if (!this.isValid || !other.isValid) { + return false; + } + + return this.s.equals(other.s) && this.e.equals(other.e); + } + /** + * Return an Interval representing the intersection of this Interval and the specified Interval. + * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals. + * Returns null if the intersection is empty, meaning, the intervals don't intersect. + * @param {Interval} other + * @return {Interval} + */ + ; + + _proto.intersection = function intersection(other) { + if (!this.isValid) return this; + var s = this.s > other.s ? this.s : other.s, + e = this.e < other.e ? this.e : other.e; + + if (s > e) { + return null; + } else { + return Interval.fromDateTimes(s, e); + } + } + /** + * Return an Interval representing the union of this Interval and the specified Interval. + * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals. + * @param {Interval} other + * @return {Interval} + */ + ; + + _proto.union = function union(other) { + if (!this.isValid) return this; + var s = this.s < other.s ? this.s : other.s, + e = this.e > other.e ? this.e : other.e; + return Interval.fromDateTimes(s, e); + } + /** + * Merge an array of Intervals into a equivalent minimal set of Intervals. + * Combines overlapping and adjacent Intervals. + * @param {[Interval]} intervals + * @return {[Interval]} + */ + ; + + Interval.merge = function merge(intervals) { + var _intervals$sort$reduc = intervals.sort(function (a, b) { + return a.s - b.s; + }).reduce(function (_ref2, item) { + var sofar = _ref2[0], + current = _ref2[1]; + + if (!current) { + return [sofar, item]; + } else if (current.overlaps(item) || current.abutsStart(item)) { + return [sofar, current.union(item)]; + } else { + return [sofar.concat([current]), item]; + } + }, [[], null]), + found = _intervals$sort$reduc[0], + final = _intervals$sort$reduc[1]; + + if (final) { + found.push(final); + } + + return found; + } + /** + * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals. + * @param {[Interval]} intervals + * @return {[Interval]} + */ + ; + + Interval.xor = function xor(intervals) { + var _Array$prototype; + + var start = null, + currentCount = 0; + + var results = [], + ends = intervals.map(function (i) { + return [{ + time: i.s, + type: "s" + }, { + time: i.e, + type: "e" + }]; + }), + flattened = (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, ends), + arr = flattened.sort(function (a, b) { + return a.time - b.time; + }); + + for (var _iterator = _createForOfIteratorHelperLoose(arr), _step; !(_step = _iterator()).done;) { + var i = _step.value; + currentCount += i.type === "s" ? 1 : -1; + + if (currentCount === 1) { + start = i.time; + } else { + if (start && +start !== +i.time) { + results.push(Interval.fromDateTimes(start, i.time)); + } + + start = null; + } + } + + return Interval.merge(results); + } + /** + * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals. + * @param {...Interval} intervals + * @return {[Interval]} + */ + ; + + _proto.difference = function difference() { + var _this2 = this; + + for (var _len2 = arguments.length, intervals = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + intervals[_key2] = arguments[_key2]; + } + + return Interval.xor([this].concat(intervals)).map(function (i) { + return _this2.intersection(i); + }).filter(function (i) { + return i && !i.isEmpty(); + }); + } + /** + * Returns a string representation of this Interval appropriate for debugging. + * @return {string} + */ + ; + + _proto.toString = function toString() { + if (!this.isValid) return INVALID$1; + return "[" + this.s.toISO() + " \u2013 " + this.e.toISO() + ")"; + } + /** + * Returns an ISO 8601-compliant string representation of this Interval. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime.toISO} + * @return {string} + */ + ; + + _proto.toISO = function toISO(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISO(opts) + "/" + this.e.toISO(opts); + } + /** + * Returns an ISO 8601-compliant string representation of date of this Interval. + * The time components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @return {string} + */ + ; + + _proto.toISODate = function toISODate() { + if (!this.isValid) return INVALID$1; + return this.s.toISODate() + "/" + this.e.toISODate(); + } + /** + * Returns an ISO 8601-compliant string representation of time of this Interval. + * The date components are ignored. + * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals + * @param {Object} opts - The same options as {@link DateTime.toISO} + * @return {string} + */ + ; + + _proto.toISOTime = function toISOTime(opts) { + if (!this.isValid) return INVALID$1; + return this.s.toISOTime(opts) + "/" + this.e.toISOTime(opts); + } + /** + * Returns a string representation of this Interval formatted according to the specified format string. + * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details. + * @param {Object} opts - options + * @param {string} [opts.separator = ' – '] - a separator to place between the start and end representations + * @return {string} + */ + ; + + _proto.toFormat = function toFormat(dateFormat, _temp2) { + var _ref3 = _temp2 === void 0 ? {} : _temp2, + _ref3$separator = _ref3.separator, + separator = _ref3$separator === void 0 ? " – " : _ref3$separator; + + if (!this.isValid) return INVALID$1; + return "" + this.s.toFormat(dateFormat) + separator + this.e.toFormat(dateFormat); + } + /** + * Return a Duration representing the time spanned by this interval. + * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 } + * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 } + * @return {Duration} + */ + ; + + _proto.toDuration = function toDuration(unit, opts) { + if (!this.isValid) { + return Duration.invalid(this.invalidReason); + } + + return this.e.diff(this.s, unit, opts); + } + /** + * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes + * @param {function} mapFn + * @return {Interval} + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC()) + * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 })) + */ + ; + + _proto.mapEndpoints = function mapEndpoints(mapFn) { + return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e)); + }; + + _createClass(Interval, [{ + key: "start", + get: function get() { + return this.isValid ? this.s : null; + } + /** + * Returns the end of the Interval + * @type {DateTime} + */ + + }, { + key: "end", + get: function get() { + return this.isValid ? this.e : null; + } + /** + * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'. + * @type {boolean} + */ + + }, { + key: "isValid", + get: function get() { + return this.invalidReason === null; + } + /** + * Returns an error code if this Interval is invalid, or null if the Interval is valid + * @type {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this Interval became invalid, or null if the Interval is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + }]); + + return Interval; + }(); + + /** + * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment. + */ + + var Info = /*#__PURE__*/function () { + function Info() {} + + /** + * Return whether the specified zone contains a DST. + * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone. + * @return {boolean} + */ + Info.hasDST = function hasDST(zone) { + if (zone === void 0) { + zone = Settings.defaultZone; + } + + var proto = DateTime.local().setZone(zone).set({ + month: 12 + }); + return !zone.universal && proto.offset !== proto.set({ + month: 6 + }).offset; + } + /** + * Return whether the specified zone is a valid IANA specifier. + * @param {string} zone - Zone to check + * @return {boolean} + */ + ; + + Info.isValidIANAZone = function isValidIANAZone(zone) { + return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone); + } + /** + * Converts the input into a {@link Zone} instance. + * + * * If `input` is already a Zone instance, it is returned unchanged. + * * If `input` is a string containing a valid time zone name, a Zone instance + * with that name is returned. + * * If `input` is a string that doesn't refer to a known time zone, a Zone + * instance with {@link Zone.isValid} == false is returned. + * * If `input is a number, a Zone instance with the specified fixed offset + * in minutes is returned. + * * If `input` is `null` or `undefined`, the default zone is returned. + * @param {string|Zone|number} [input] - the value to be converted + * @return {Zone} + */ + ; + + Info.normalizeZone = function normalizeZone$1(input) { + return normalizeZone(input, Settings.defaultZone); + } + /** + * Return an array of standalone month names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @example Info.months()[0] //=> 'January' + * @example Info.months('short')[0] //=> 'Jan' + * @example Info.months('numeric')[0] //=> '1' + * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.' + * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١' + * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I' + * @return {[string]} + */ + ; + + Info.months = function months(length, _temp) { + if (length === void 0) { + length = "long"; + } + + var _ref = _temp === void 0 ? {} : _temp, + _ref$locale = _ref.locale, + locale = _ref$locale === void 0 ? null : _ref$locale, + _ref$numberingSystem = _ref.numberingSystem, + numberingSystem = _ref$numberingSystem === void 0 ? null : _ref$numberingSystem, + _ref$outputCalendar = _ref.outputCalendar, + outputCalendar = _ref$outputCalendar === void 0 ? "gregory" : _ref$outputCalendar; + + return Locale.create(locale, numberingSystem, outputCalendar).months(length); + } + /** + * Return an array of format month names. + * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that + * changes the string. + * See {@link months} + * @param {string} [length='long'] - the length of the month representation, such as "numeric", "2-digit", "narrow", "short", "long" + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @param {string} [opts.outputCalendar='gregory'] - the calendar + * @return {[string]} + */ + ; + + Info.monthsFormat = function monthsFormat(length, _temp2) { + if (length === void 0) { + length = "long"; + } + + var _ref2 = _temp2 === void 0 ? {} : _temp2, + _ref2$locale = _ref2.locale, + locale = _ref2$locale === void 0 ? null : _ref2$locale, + _ref2$numberingSystem = _ref2.numberingSystem, + numberingSystem = _ref2$numberingSystem === void 0 ? null : _ref2$numberingSystem, + _ref2$outputCalendar = _ref2.outputCalendar, + outputCalendar = _ref2$outputCalendar === void 0 ? "gregory" : _ref2$outputCalendar; + + return Locale.create(locale, numberingSystem, outputCalendar).months(length, true); + } + /** + * Return an array of standalone week names. + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @example Info.weekdays()[0] //=> 'Monday' + * @example Info.weekdays('short')[0] //=> 'Mon' + * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.' + * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين' + * @return {[string]} + */ + ; + + Info.weekdays = function weekdays(length, _temp3) { + if (length === void 0) { + length = "long"; + } + + var _ref3 = _temp3 === void 0 ? {} : _temp3, + _ref3$locale = _ref3.locale, + locale = _ref3$locale === void 0 ? null : _ref3$locale, + _ref3$numberingSystem = _ref3.numberingSystem, + numberingSystem = _ref3$numberingSystem === void 0 ? null : _ref3$numberingSystem; + + return Locale.create(locale, numberingSystem, null).weekdays(length); + } + /** + * Return an array of format week names. + * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that + * changes the string. + * See {@link weekdays} + * @param {string} [length='long'] - the length of the month representation, such as "narrow", "short", "long". + * @param {Object} opts - options + * @param {string} [opts.locale=null] - the locale code + * @param {string} [opts.numberingSystem=null] - the numbering system + * @return {[string]} + */ + ; + + Info.weekdaysFormat = function weekdaysFormat(length, _temp4) { + if (length === void 0) { + length = "long"; + } + + var _ref4 = _temp4 === void 0 ? {} : _temp4, + _ref4$locale = _ref4.locale, + locale = _ref4$locale === void 0 ? null : _ref4$locale, + _ref4$numberingSystem = _ref4.numberingSystem, + numberingSystem = _ref4$numberingSystem === void 0 ? null : _ref4$numberingSystem; + + return Locale.create(locale, numberingSystem, null).weekdays(length, true); + } + /** + * Return an array of meridiems. + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.meridiems() //=> [ 'AM', 'PM' ] + * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ] + * @return {[string]} + */ + ; + + Info.meridiems = function meridiems(_temp5) { + var _ref5 = _temp5 === void 0 ? {} : _temp5, + _ref5$locale = _ref5.locale, + locale = _ref5$locale === void 0 ? null : _ref5$locale; + + return Locale.create(locale).meridiems(); + } + /** + * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian. + * @param {string} [length='short'] - the length of the era representation, such as "short" or "long". + * @param {Object} opts - options + * @param {string} [opts.locale] - the locale code + * @example Info.eras() //=> [ 'BC', 'AD' ] + * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ] + * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ] + * @return {[string]} + */ + ; + + Info.eras = function eras(length, _temp6) { + if (length === void 0) { + length = "short"; + } + + var _ref6 = _temp6 === void 0 ? {} : _temp6, + _ref6$locale = _ref6.locale, + locale = _ref6$locale === void 0 ? null : _ref6$locale; + + return Locale.create(locale, null, "gregory").eras(length); + } + /** + * Return the set of available features in this environment. + * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case. + * Keys: + * * `zones`: whether this environment supports IANA timezones + * * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing + * * `intl`: whether this environment supports general internationalization + * * `relative`: whether this environment supports relative time formatting + * @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false } + * @return {Object} + */ + ; + + Info.features = function features() { + var intl = false, + intlTokens = false, + zones = false, + relative = false; + + if (hasIntl()) { + intl = true; + intlTokens = hasFormatToParts(); + relative = hasRelative(); + + try { + zones = new Intl.DateTimeFormat("en", { + timeZone: "America/New_York" + }).resolvedOptions().timeZone === "America/New_York"; + } catch (e) { + zones = false; + } + } + + return { + intl: intl, + intlTokens: intlTokens, + zones: zones, + relative: relative + }; + }; + + return Info; + }(); + + function dayDiff(earlier, later) { + var utcDayStart = function utcDayStart(dt) { + return dt.toUTC(0, { + keepLocalTime: true + }).startOf("day").valueOf(); + }, + ms = utcDayStart(later) - utcDayStart(earlier); + + return Math.floor(Duration.fromMillis(ms).as("days")); + } + + function highOrderDiffs(cursor, later, units) { + var differs = [["years", function (a, b) { + return b.year - a.year; + }], ["months", function (a, b) { + return b.month - a.month + (b.year - a.year) * 12; + }], ["weeks", function (a, b) { + var days = dayDiff(a, b); + return (days - days % 7) / 7; + }], ["days", dayDiff]]; + var results = {}; + var lowestOrder, highWater; + + for (var _i = 0, _differs = differs; _i < _differs.length; _i++) { + var _differs$_i = _differs[_i], + unit = _differs$_i[0], + differ = _differs$_i[1]; + + if (units.indexOf(unit) >= 0) { + var _cursor$plus; + + lowestOrder = unit; + var delta = differ(cursor, later); + highWater = cursor.plus((_cursor$plus = {}, _cursor$plus[unit] = delta, _cursor$plus)); + + if (highWater > later) { + var _cursor$plus2; + + cursor = cursor.plus((_cursor$plus2 = {}, _cursor$plus2[unit] = delta - 1, _cursor$plus2)); + delta -= 1; + } else { + cursor = highWater; + } + + results[unit] = delta; + } + } + + return [cursor, results, highWater, lowestOrder]; + } + + function _diff (earlier, later, units, opts) { + var _highOrderDiffs = highOrderDiffs(earlier, later, units), + cursor = _highOrderDiffs[0], + results = _highOrderDiffs[1], + highWater = _highOrderDiffs[2], + lowestOrder = _highOrderDiffs[3]; + + var remainingMillis = later - cursor; + var lowerOrderUnits = units.filter(function (u) { + return ["hours", "minutes", "seconds", "milliseconds"].indexOf(u) >= 0; + }); + + if (lowerOrderUnits.length === 0) { + if (highWater < later) { + var _cursor$plus3; + + highWater = cursor.plus((_cursor$plus3 = {}, _cursor$plus3[lowestOrder] = 1, _cursor$plus3)); + } + + if (highWater !== cursor) { + results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor); + } + } + + var duration = Duration.fromObject(Object.assign(results, opts)); + + if (lowerOrderUnits.length > 0) { + var _Duration$fromMillis; + + return (_Duration$fromMillis = Duration.fromMillis(remainingMillis, opts)).shiftTo.apply(_Duration$fromMillis, lowerOrderUnits).plus(duration); + } else { + return duration; + } + } + + var numberingSystems = { + arab: "[\u0660-\u0669]", + arabext: "[\u06F0-\u06F9]", + bali: "[\u1B50-\u1B59]", + beng: "[\u09E6-\u09EF]", + deva: "[\u0966-\u096F]", + fullwide: "[\uFF10-\uFF19]", + gujr: "[\u0AE6-\u0AEF]", + hanidec: "[〇|一|二|三|四|五|六|七|八|九]", + khmr: "[\u17E0-\u17E9]", + knda: "[\u0CE6-\u0CEF]", + laoo: "[\u0ED0-\u0ED9]", + limb: "[\u1946-\u194F]", + mlym: "[\u0D66-\u0D6F]", + mong: "[\u1810-\u1819]", + mymr: "[\u1040-\u1049]", + orya: "[\u0B66-\u0B6F]", + tamldec: "[\u0BE6-\u0BEF]", + telu: "[\u0C66-\u0C6F]", + thai: "[\u0E50-\u0E59]", + tibt: "[\u0F20-\u0F29]", + latn: "\\d" + }; + var numberingSystemsUTF16 = { + arab: [1632, 1641], + arabext: [1776, 1785], + bali: [6992, 7001], + beng: [2534, 2543], + deva: [2406, 2415], + fullwide: [65296, 65303], + gujr: [2790, 2799], + khmr: [6112, 6121], + knda: [3302, 3311], + laoo: [3792, 3801], + limb: [6470, 6479], + mlym: [3430, 3439], + mong: [6160, 6169], + mymr: [4160, 4169], + orya: [2918, 2927], + tamldec: [3046, 3055], + telu: [3174, 3183], + thai: [3664, 3673], + tibt: [3872, 3881] + }; // eslint-disable-next-line + + var hanidecChars = numberingSystems.hanidec.replace(/[\[|\]]/g, "").split(""); + function parseDigits(str) { + var value = parseInt(str, 10); + + if (isNaN(value)) { + value = ""; + + for (var i = 0; i < str.length; i++) { + var code = str.charCodeAt(i); + + if (str[i].search(numberingSystems.hanidec) !== -1) { + value += hanidecChars.indexOf(str[i]); + } else { + for (var key in numberingSystemsUTF16) { + var _numberingSystemsUTF = numberingSystemsUTF16[key], + min = _numberingSystemsUTF[0], + max = _numberingSystemsUTF[1]; + + if (code >= min && code <= max) { + value += code - min; + } + } + } + } + + return parseInt(value, 10); + } else { + return value; + } + } + function digitRegex(_ref, append) { + var numberingSystem = _ref.numberingSystem; + + if (append === void 0) { + append = ""; + } + + return new RegExp("" + numberingSystems[numberingSystem || "latn"] + append); + } + + var MISSING_FTP = "missing Intl.DateTimeFormat.formatToParts support"; + + function intUnit(regex, post) { + if (post === void 0) { + post = function post(i) { + return i; + }; + } + + return { + regex: regex, + deser: function deser(_ref) { + var s = _ref[0]; + return post(parseDigits(s)); + } + }; + } + + function fixListRegex(s) { + // make dots optional and also make them literal + return s.replace(/\./, "\\.?"); + } + + function stripInsensitivities(s) { + return s.replace(/\./, "").toLowerCase(); + } + + function oneOf(strings, startIndex) { + if (strings === null) { + return null; + } else { + return { + regex: RegExp(strings.map(fixListRegex).join("|")), + deser: function deser(_ref2) { + var s = _ref2[0]; + return strings.findIndex(function (i) { + return stripInsensitivities(s) === stripInsensitivities(i); + }) + startIndex; + } + }; + } + } + + function offset(regex, groups) { + return { + regex: regex, + deser: function deser(_ref3) { + var h = _ref3[1], + m = _ref3[2]; + return signedOffset(h, m); + }, + groups: groups + }; + } + + function simple(regex) { + return { + regex: regex, + deser: function deser(_ref4) { + var s = _ref4[0]; + return s; + } + }; + } + + function escapeToken(value) { + // eslint-disable-next-line no-useless-escape + return value.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g, "\\$&"); + } + + function unitForToken(token, loc) { + var one = digitRegex(loc), + two = digitRegex(loc, "{2}"), + three = digitRegex(loc, "{3}"), + four = digitRegex(loc, "{4}"), + six = digitRegex(loc, "{6}"), + oneOrTwo = digitRegex(loc, "{1,2}"), + oneToThree = digitRegex(loc, "{1,3}"), + oneToSix = digitRegex(loc, "{1,6}"), + oneToNine = digitRegex(loc, "{1,9}"), + twoToFour = digitRegex(loc, "{2,4}"), + fourToSix = digitRegex(loc, "{4,6}"), + literal = function literal(t) { + return { + regex: RegExp(escapeToken(t.val)), + deser: function deser(_ref5) { + var s = _ref5[0]; + return s; + }, + literal: true + }; + }, + unitate = function unitate(t) { + if (token.literal) { + return literal(t); + } + + switch (t.val) { + // era + case "G": + return oneOf(loc.eras("short", false), 0); + + case "GG": + return oneOf(loc.eras("long", false), 0); + // years + + case "y": + return intUnit(oneToSix); + + case "yy": + return intUnit(twoToFour, untruncateYear); + + case "yyyy": + return intUnit(four); + + case "yyyyy": + return intUnit(fourToSix); + + case "yyyyyy": + return intUnit(six); + // months + + case "M": + return intUnit(oneOrTwo); + + case "MM": + return intUnit(two); + + case "MMM": + return oneOf(loc.months("short", true, false), 1); + + case "MMMM": + return oneOf(loc.months("long", true, false), 1); + + case "L": + return intUnit(oneOrTwo); + + case "LL": + return intUnit(two); + + case "LLL": + return oneOf(loc.months("short", false, false), 1); + + case "LLLL": + return oneOf(loc.months("long", false, false), 1); + // dates + + case "d": + return intUnit(oneOrTwo); + + case "dd": + return intUnit(two); + // ordinals + + case "o": + return intUnit(oneToThree); + + case "ooo": + return intUnit(three); + // time + + case "HH": + return intUnit(two); + + case "H": + return intUnit(oneOrTwo); + + case "hh": + return intUnit(two); + + case "h": + return intUnit(oneOrTwo); + + case "mm": + return intUnit(two); + + case "m": + return intUnit(oneOrTwo); + + case "q": + return intUnit(oneOrTwo); + + case "qq": + return intUnit(two); + + case "s": + return intUnit(oneOrTwo); + + case "ss": + return intUnit(two); + + case "S": + return intUnit(oneToThree); + + case "SSS": + return intUnit(three); + + case "u": + return simple(oneToNine); + // meridiem + + case "a": + return oneOf(loc.meridiems(), 0); + // weekYear (k) + + case "kkkk": + return intUnit(four); + + case "kk": + return intUnit(twoToFour, untruncateYear); + // weekNumber (W) + + case "W": + return intUnit(oneOrTwo); + + case "WW": + return intUnit(two); + // weekdays + + case "E": + case "c": + return intUnit(one); + + case "EEE": + return oneOf(loc.weekdays("short", false, false), 1); + + case "EEEE": + return oneOf(loc.weekdays("long", false, false), 1); + + case "ccc": + return oneOf(loc.weekdays("short", true, false), 1); + + case "cccc": + return oneOf(loc.weekdays("long", true, false), 1); + // offset/zone + + case "Z": + case "ZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(?::(" + two.source + "))?"), 2); + + case "ZZZ": + return offset(new RegExp("([+-]" + oneOrTwo.source + ")(" + two.source + ")?"), 2); + // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing + // because we don't have any way to figure out what they are + + case "z": + return simple(/[a-z_+-/]{1,256}?/i); + + default: + return literal(t); + } + }; + + var unit = unitate(token) || { + invalidReason: MISSING_FTP + }; + unit.token = token; + return unit; + } + + var partTypeStyleToTokenVal = { + year: { + "2-digit": "yy", + numeric: "yyyyy" + }, + month: { + numeric: "M", + "2-digit": "MM", + short: "MMM", + long: "MMMM" + }, + day: { + numeric: "d", + "2-digit": "dd" + }, + weekday: { + short: "EEE", + long: "EEEE" + }, + dayperiod: "a", + dayPeriod: "a", + hour: { + numeric: "h", + "2-digit": "hh" + }, + minute: { + numeric: "m", + "2-digit": "mm" + }, + second: { + numeric: "s", + "2-digit": "ss" + } + }; + + function tokenForPart(part, locale, formatOpts) { + var type = part.type, + value = part.value; + + if (type === "literal") { + return { + literal: true, + val: value + }; + } + + var style = formatOpts[type]; + var val = partTypeStyleToTokenVal[type]; + + if (typeof val === "object") { + val = val[style]; + } + + if (val) { + return { + literal: false, + val: val + }; + } + + return undefined; + } + + function buildRegex(units) { + var re = units.map(function (u) { + return u.regex; + }).reduce(function (f, r) { + return f + "(" + r.source + ")"; + }, ""); + return ["^" + re + "$", units]; + } + + function match(input, regex, handlers) { + var matches = input.match(regex); + + if (matches) { + var all = {}; + var matchIndex = 1; + + for (var i in handlers) { + if (hasOwnProperty(handlers, i)) { + var h = handlers[i], + groups = h.groups ? h.groups + 1 : 1; + + if (!h.literal && h.token) { + all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups)); + } + + matchIndex += groups; + } + } + + return [matches, all]; + } else { + return [matches, {}]; + } + } + + function dateTimeFromMatches(matches) { + var toField = function toField(token) { + switch (token) { + case "S": + return "millisecond"; + + case "s": + return "second"; + + case "m": + return "minute"; + + case "h": + case "H": + return "hour"; + + case "d": + return "day"; + + case "o": + return "ordinal"; + + case "L": + case "M": + return "month"; + + case "y": + return "year"; + + case "E": + case "c": + return "weekday"; + + case "W": + return "weekNumber"; + + case "k": + return "weekYear"; + + case "q": + return "quarter"; + + default: + return null; + } + }; + + var zone; + + if (!isUndefined(matches.Z)) { + zone = new FixedOffsetZone(matches.Z); + } else if (!isUndefined(matches.z)) { + zone = IANAZone.create(matches.z); + } else { + zone = null; + } + + if (!isUndefined(matches.q)) { + matches.M = (matches.q - 1) * 3 + 1; + } + + if (!isUndefined(matches.h)) { + if (matches.h < 12 && matches.a === 1) { + matches.h += 12; + } else if (matches.h === 12 && matches.a === 0) { + matches.h = 0; + } + } + + if (matches.G === 0 && matches.y) { + matches.y = -matches.y; + } + + if (!isUndefined(matches.u)) { + matches.S = parseMillis(matches.u); + } + + var vals = Object.keys(matches).reduce(function (r, k) { + var f = toField(k); + + if (f) { + r[f] = matches[k]; + } + + return r; + }, {}); + return [vals, zone]; + } + + var dummyDateTimeCache = null; + + function getDummyDateTime() { + if (!dummyDateTimeCache) { + dummyDateTimeCache = DateTime.fromMillis(1555555555555); + } + + return dummyDateTimeCache; + } + + function maybeExpandMacroToken(token, locale) { + if (token.literal) { + return token; + } + + var formatOpts = Formatter.macroTokenToFormatOpts(token.val); + + if (!formatOpts) { + return token; + } + + var formatter = Formatter.create(locale, formatOpts); + var parts = formatter.formatDateTimeParts(getDummyDateTime()); + var tokens = parts.map(function (p) { + return tokenForPart(p, locale, formatOpts); + }); + + if (tokens.includes(undefined)) { + return token; + } + + return tokens; + } + + function expandMacroTokens(tokens, locale) { + var _Array$prototype; + + return (_Array$prototype = Array.prototype).concat.apply(_Array$prototype, tokens.map(function (t) { + return maybeExpandMacroToken(t, locale); + })); + } + /** + * @private + */ + + + function explainFromTokens(locale, input, format) { + var tokens = expandMacroTokens(Formatter.parseFormat(format), locale), + units = tokens.map(function (t) { + return unitForToken(t, locale); + }), + disqualifyingUnit = units.find(function (t) { + return t.invalidReason; + }); + + if (disqualifyingUnit) { + return { + input: input, + tokens: tokens, + invalidReason: disqualifyingUnit.invalidReason + }; + } else { + var _buildRegex = buildRegex(units), + regexString = _buildRegex[0], + handlers = _buildRegex[1], + regex = RegExp(regexString, "i"), + _match = match(input, regex, handlers), + rawMatches = _match[0], + matches = _match[1], + _ref6 = matches ? dateTimeFromMatches(matches) : [null, null], + result = _ref6[0], + zone = _ref6[1]; + + if (hasOwnProperty(matches, "a") && hasOwnProperty(matches, "H")) { + throw new ConflictingSpecificationError("Can't include meridiem when specifying 24-hour format"); + } + + return { + input: input, + tokens: tokens, + regex: regex, + rawMatches: rawMatches, + matches: matches, + result: result, + zone: zone + }; + } + } + function parseFromTokens(locale, input, format) { + var _explainFromTokens = explainFromTokens(locale, input, format), + result = _explainFromTokens.result, + zone = _explainFromTokens.zone, + invalidReason = _explainFromTokens.invalidReason; + + return [result, zone, invalidReason]; + } + + var nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334], + leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335]; + + function unitOutOfRange(unit, value) { + return new Invalid("unit out of range", "you specified " + value + " (of type " + typeof value + ") as a " + unit + ", which is invalid"); + } + + function dayOfWeek(year, month, day) { + var js = new Date(Date.UTC(year, month - 1, day)).getUTCDay(); + return js === 0 ? 7 : js; + } + + function computeOrdinal(year, month, day) { + return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1]; + } + + function uncomputeOrdinal(year, ordinal) { + var table = isLeapYear(year) ? leapLadder : nonLeapLadder, + month0 = table.findIndex(function (i) { + return i < ordinal; + }), + day = ordinal - table[month0]; + return { + month: month0 + 1, + day: day + }; + } + /** + * @private + */ + + + function gregorianToWeek(gregObj) { + var year = gregObj.year, + month = gregObj.month, + day = gregObj.day, + ordinal = computeOrdinal(year, month, day), + weekday = dayOfWeek(year, month, day); + var weekNumber = Math.floor((ordinal - weekday + 10) / 7), + weekYear; + + if (weekNumber < 1) { + weekYear = year - 1; + weekNumber = weeksInWeekYear(weekYear); + } else if (weekNumber > weeksInWeekYear(year)) { + weekYear = year + 1; + weekNumber = 1; + } else { + weekYear = year; + } + + return Object.assign({ + weekYear: weekYear, + weekNumber: weekNumber, + weekday: weekday + }, timeObject(gregObj)); + } + function weekToGregorian(weekData) { + var weekYear = weekData.weekYear, + weekNumber = weekData.weekNumber, + weekday = weekData.weekday, + weekdayOfJan4 = dayOfWeek(weekYear, 1, 4), + yearInDays = daysInYear(weekYear); + var ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3, + year; + + if (ordinal < 1) { + year = weekYear - 1; + ordinal += daysInYear(year); + } else if (ordinal > yearInDays) { + year = weekYear + 1; + ordinal -= daysInYear(weekYear); + } else { + year = weekYear; + } + + var _uncomputeOrdinal = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal.month, + day = _uncomputeOrdinal.day; + + return Object.assign({ + year: year, + month: month, + day: day + }, timeObject(weekData)); + } + function gregorianToOrdinal(gregData) { + var year = gregData.year, + month = gregData.month, + day = gregData.day, + ordinal = computeOrdinal(year, month, day); + return Object.assign({ + year: year, + ordinal: ordinal + }, timeObject(gregData)); + } + function ordinalToGregorian(ordinalData) { + var year = ordinalData.year, + ordinal = ordinalData.ordinal, + _uncomputeOrdinal2 = uncomputeOrdinal(year, ordinal), + month = _uncomputeOrdinal2.month, + day = _uncomputeOrdinal2.day; + + return Object.assign({ + year: year, + month: month, + day: day + }, timeObject(ordinalData)); + } + function hasInvalidWeekData(obj) { + var validYear = isInteger(obj.weekYear), + validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)), + validWeekday = integerBetween(obj.weekday, 1, 7); + + if (!validYear) { + return unitOutOfRange("weekYear", obj.weekYear); + } else if (!validWeek) { + return unitOutOfRange("week", obj.week); + } else if (!validWeekday) { + return unitOutOfRange("weekday", obj.weekday); + } else return false; + } + function hasInvalidOrdinalData(obj) { + var validYear = isInteger(obj.year), + validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validOrdinal) { + return unitOutOfRange("ordinal", obj.ordinal); + } else return false; + } + function hasInvalidGregorianData(obj) { + var validYear = isInteger(obj.year), + validMonth = integerBetween(obj.month, 1, 12), + validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month)); + + if (!validYear) { + return unitOutOfRange("year", obj.year); + } else if (!validMonth) { + return unitOutOfRange("month", obj.month); + } else if (!validDay) { + return unitOutOfRange("day", obj.day); + } else return false; + } + function hasInvalidTimeData(obj) { + var hour = obj.hour, + minute = obj.minute, + second = obj.second, + millisecond = obj.millisecond; + var validHour = integerBetween(hour, 0, 23) || hour === 24 && minute === 0 && second === 0 && millisecond === 0, + validMinute = integerBetween(minute, 0, 59), + validSecond = integerBetween(second, 0, 59), + validMillisecond = integerBetween(millisecond, 0, 999); + + if (!validHour) { + return unitOutOfRange("hour", hour); + } else if (!validMinute) { + return unitOutOfRange("minute", minute); + } else if (!validSecond) { + return unitOutOfRange("second", second); + } else if (!validMillisecond) { + return unitOutOfRange("millisecond", millisecond); + } else return false; + } + + var INVALID$2 = "Invalid DateTime"; + var MAX_DATE = 8.64e15; + + function unsupportedZone(zone) { + return new Invalid("unsupported zone", "the zone \"" + zone.name + "\" is not supported"); + } // we cache week data on the DT object and this intermediates the cache + + + function possiblyCachedWeekData(dt) { + if (dt.weekData === null) { + dt.weekData = gregorianToWeek(dt.c); + } + + return dt.weekData; + } // clone really means, "make a new object with these modifications". all "setters" really use this + // to create a new object while only changing some of the properties + + + function clone$1(inst, alts) { + var current = { + ts: inst.ts, + zone: inst.zone, + c: inst.c, + o: inst.o, + loc: inst.loc, + invalid: inst.invalid + }; + return new DateTime(Object.assign({}, current, alts, { + old: current + })); + } // find the right offset a given local time. The o input is our guess, which determines which + // offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST) + + + function fixOffset(localTS, o, tz) { + // Our UTC time is just a guess because our offset is just a guess + var utcGuess = localTS - o * 60 * 1000; // Test whether the zone matches the offset for this ts + + var o2 = tz.offset(utcGuess); // If so, offset didn't change and we're done + + if (o === o2) { + return [utcGuess, o]; + } // If not, change the ts by the difference in the offset + + + utcGuess -= (o2 - o) * 60 * 1000; // If that gives us the local time we want, we're done + + var o3 = tz.offset(utcGuess); + + if (o2 === o3) { + return [utcGuess, o2]; + } // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time + + + return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)]; + } // convert an epoch timestamp into a calendar object with the given offset + + + function tsToObj(ts, offset) { + ts += offset * 60 * 1000; + var d = new Date(ts); + return { + year: d.getUTCFullYear(), + month: d.getUTCMonth() + 1, + day: d.getUTCDate(), + hour: d.getUTCHours(), + minute: d.getUTCMinutes(), + second: d.getUTCSeconds(), + millisecond: d.getUTCMilliseconds() + }; + } // convert a calendar object to a epoch timestamp + + + function objToTS(obj, offset, zone) { + return fixOffset(objToLocalTS(obj), offset, zone); + } // create a new DT instance by adding a duration, adjusting for DSTs + + + function adjustTime(inst, dur) { + var _dur; + + var keys = Object.keys(dur.values); + + if (keys.indexOf("milliseconds") === -1) { + keys.push("milliseconds"); + } + + dur = (_dur = dur).shiftTo.apply(_dur, keys); + var oPre = inst.o, + year = inst.c.year + dur.years, + month = inst.c.month + dur.months + dur.quarters * 3, + c = Object.assign({}, inst.c, { + year: year, + month: month, + day: Math.min(inst.c.day, daysInMonth(year, month)) + dur.days + dur.weeks * 7 + }), + millisToAdd = Duration.fromObject({ + hours: dur.hours, + minutes: dur.minutes, + seconds: dur.seconds, + milliseconds: dur.milliseconds + }).as("milliseconds"), + localTS = objToLocalTS(c); + + var _fixOffset = fixOffset(localTS, oPre, inst.zone), + ts = _fixOffset[0], + o = _fixOffset[1]; + + if (millisToAdd !== 0) { + ts += millisToAdd; // that could have changed the offset by going over a DST, but we want to keep the ts the same + + o = inst.zone.offset(ts); + } + + return { + ts: ts, + o: o + }; + } // helper useful in turning the results of parsing into real dates + // by handling the zone options + + + function parseDataToDateTime(parsed, parsedZone, opts, format, text) { + var setZone = opts.setZone, + zone = opts.zone; + + if (parsed && Object.keys(parsed).length !== 0) { + var interpretationZone = parsedZone || zone, + inst = DateTime.fromObject(Object.assign(parsed, opts, { + zone: interpretationZone, + // setZone is a valid option in the calling methods, but not in fromObject + setZone: undefined + })); + return setZone ? inst : inst.setZone(zone); + } else { + return DateTime.invalid(new Invalid("unparsable", "the input \"" + text + "\" can't be parsed as " + format)); + } + } // if you want to output a technical format (e.g. RFC 2822), this helper + // helps handle the details + + + function toTechFormat(dt, format, allowZ) { + if (allowZ === void 0) { + allowZ = true; + } + + return dt.isValid ? Formatter.create(Locale.create("en-US"), { + allowZ: allowZ, + forceSimple: true + }).formatDateTimeFromString(dt, format) : null; + } // technical time formats (e.g. the time part of ISO 8601), take some options + // and this commonizes their handling + + + function toTechTimeFormat(dt, _ref) { + var _ref$suppressSeconds = _ref.suppressSeconds, + suppressSeconds = _ref$suppressSeconds === void 0 ? false : _ref$suppressSeconds, + _ref$suppressMillisec = _ref.suppressMilliseconds, + suppressMilliseconds = _ref$suppressMillisec === void 0 ? false : _ref$suppressMillisec, + includeOffset = _ref.includeOffset, + _ref$includeZone = _ref.includeZone, + includeZone = _ref$includeZone === void 0 ? false : _ref$includeZone, + _ref$spaceZone = _ref.spaceZone, + spaceZone = _ref$spaceZone === void 0 ? false : _ref$spaceZone, + _ref$format = _ref.format, + format = _ref$format === void 0 ? "extended" : _ref$format; + var fmt = format === "basic" ? "HHmm" : "HH:mm"; + + if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) { + fmt += format === "basic" ? "ss" : ":ss"; + + if (!suppressMilliseconds || dt.millisecond !== 0) { + fmt += ".SSS"; + } + } + + if ((includeZone || includeOffset) && spaceZone) { + fmt += " "; + } + + if (includeZone) { + fmt += "z"; + } else if (includeOffset) { + fmt += format === "basic" ? "ZZZ" : "ZZ"; + } + + return toTechFormat(dt, fmt); + } // defaults for unspecified units in the supported calendars + + + var defaultUnitValues = { + month: 1, + day: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultWeekUnitValues = { + weekNumber: 1, + weekday: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }, + defaultOrdinalUnitValues = { + ordinal: 1, + hour: 0, + minute: 0, + second: 0, + millisecond: 0 + }; // Units in the supported calendars, sorted by bigness + + var orderedUnits$1 = ["year", "month", "day", "hour", "minute", "second", "millisecond"], + orderedWeekUnits = ["weekYear", "weekNumber", "weekday", "hour", "minute", "second", "millisecond"], + orderedOrdinalUnits = ["year", "ordinal", "hour", "minute", "second", "millisecond"]; // standardize case and plurality in units + + function normalizeUnit(unit) { + var normalized = { + year: "year", + years: "year", + month: "month", + months: "month", + day: "day", + days: "day", + hour: "hour", + hours: "hour", + minute: "minute", + minutes: "minute", + quarter: "quarter", + quarters: "quarter", + second: "second", + seconds: "second", + millisecond: "millisecond", + milliseconds: "millisecond", + weekday: "weekday", + weekdays: "weekday", + weeknumber: "weekNumber", + weeksnumber: "weekNumber", + weeknumbers: "weekNumber", + weekyear: "weekYear", + weekyears: "weekYear", + ordinal: "ordinal" + }[unit.toLowerCase()]; + if (!normalized) throw new InvalidUnitError(unit); + return normalized; + } // this is a dumbed down version of fromObject() that runs about 60% faster + // but doesn't do any validation, makes a bunch of assumptions about what units + // are present, and so on. + + + function quickDT(obj, zone) { + // assume we have the higher-order units + for (var _iterator = _createForOfIteratorHelperLoose(orderedUnits$1), _step; !(_step = _iterator()).done;) { + var u = _step.value; + + if (isUndefined(obj[u])) { + obj[u] = defaultUnitValues[u]; + } + } + + var invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj); + + if (invalid) { + return DateTime.invalid(invalid); + } + + var tsNow = Settings.now(), + offsetProvis = zone.offset(tsNow), + _objToTS = objToTS(obj, offsetProvis, zone), + ts = _objToTS[0], + o = _objToTS[1]; + + return new DateTime({ + ts: ts, + zone: zone, + o: o + }); + } + + function diffRelative(start, end, opts) { + var round = isUndefined(opts.round) ? true : opts.round, + format = function format(c, unit) { + c = roundTo(c, round || opts.calendary ? 0 : 2, true); + var formatter = end.loc.clone(opts).relFormatter(opts); + return formatter.format(c, unit); + }, + differ = function differ(unit) { + if (opts.calendary) { + if (!end.hasSame(start, unit)) { + return end.startOf(unit).diff(start.startOf(unit), unit).get(unit); + } else return 0; + } else { + return end.diff(start, unit).get(unit); + } + }; + + if (opts.unit) { + return format(differ(opts.unit), opts.unit); + } + + for (var _iterator2 = _createForOfIteratorHelperLoose(opts.units), _step2; !(_step2 = _iterator2()).done;) { + var unit = _step2.value; + var count = differ(unit); + + if (Math.abs(count) >= 1) { + return format(count, unit); + } + } + + return format(0, opts.units[opts.units.length - 1]); + } + /** + * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them. + * + * A DateTime comprises of: + * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch. + * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone). + * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`. + * + * Here is a brief overview of the most commonly used functionality it provides: + * + * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link local}, {@link utc}, and (most flexibly) {@link fromObject}. To create one from a standard string format, use {@link fromISO}, {@link fromHTTP}, and {@link fromRFC2822}. To create one from a custom string format, use {@link fromFormat}. To create one from a native JS date, use {@link fromJSDate}. + * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link toObject}), use the {@link year}, {@link month}, + * {@link day}, {@link hour}, {@link minute}, {@link second}, {@link millisecond} accessors. + * * **Week calendar**: For ISO week calendar attributes, see the {@link weekYear}, {@link weekNumber}, and {@link weekday} accessors. + * * **Configuration** See the {@link locale} and {@link numberingSystem} accessors. + * * **Transformation**: To transform the DateTime into other DateTimes, use {@link set}, {@link reconfigure}, {@link setZone}, {@link setLocale}, {@link plus}, {@link minus}, {@link endOf}, {@link startOf}, {@link toUTC}, and {@link toLocal}. + * * **Output**: To convert the DateTime to other representations, use the {@link toRelative}, {@link toRelativeCalendar}, {@link toJSON}, {@link toISO}, {@link toHTTP}, {@link toObject}, {@link toRFC2822}, {@link toString}, {@link toLocaleString}, {@link toFormat}, {@link toMillis} and {@link toJSDate}. + * + * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation. + */ + + + var DateTime = /*#__PURE__*/function () { + /** + * @access private + */ + function DateTime(config) { + var zone = config.zone || Settings.defaultZone; + var invalid = config.invalid || (Number.isNaN(config.ts) ? new Invalid("invalid input") : null) || (!zone.isValid ? unsupportedZone(zone) : null); + /** + * @access private + */ + + this.ts = isUndefined(config.ts) ? Settings.now() : config.ts; + var c = null, + o = null; + + if (!invalid) { + var unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone); + + if (unchanged) { + var _ref2 = [config.old.c, config.old.o]; + c = _ref2[0]; + o = _ref2[1]; + } else { + var ot = zone.offset(this.ts); + c = tsToObj(this.ts, ot); + invalid = Number.isNaN(c.year) ? new Invalid("invalid input") : null; + c = invalid ? null : c; + o = invalid ? null : ot; + } + } + /** + * @access private + */ + + + this._zone = zone; + /** + * @access private + */ + + this.loc = config.loc || Locale.create(); + /** + * @access private + */ + + this.invalid = invalid; + /** + * @access private + */ + + this.weekData = null; + /** + * @access private + */ + + this.c = c; + /** + * @access private + */ + + this.o = o; + /** + * @access private + */ + + this.isLuxonDateTime = true; + } // CONSTRUCT + + /** + * Create a local DateTime + * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.local() //~> now + * @example DateTime.local(2017) //~> 2017-01-01T00:00:00 + * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00 + * @example DateTime.local(2017, 3, 12) //~> 2017-03-12T00:00:00 + * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00 + * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00 + * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10 + * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765 + * @return {DateTime} + */ + + + DateTime.local = function local(year, month, day, hour, minute, second, millisecond) { + if (isUndefined(year)) { + return new DateTime({ + ts: Settings.now() + }); + } else { + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, Settings.defaultZone); + } + } + /** + * Create a DateTime in UTC + * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used + * @param {number} [month=1] - The month, 1-indexed + * @param {number} [day=1] - The day of the month + * @param {number} [hour=0] - The hour of the day, in 24-hour time + * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59 + * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59 + * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999 + * @example DateTime.utc() //~> now + * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z + * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z + * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z + * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z + * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765Z + * @return {DateTime} + */ + ; + + DateTime.utc = function utc(year, month, day, hour, minute, second, millisecond) { + if (isUndefined(year)) { + return new DateTime({ + ts: Settings.now(), + zone: FixedOffsetZone.utcInstance + }); + } else { + return quickDT({ + year: year, + month: month, + day: day, + hour: hour, + minute: minute, + second: second, + millisecond: millisecond + }, FixedOffsetZone.utcInstance); + } + } + /** + * Create a DateTime from a Javascript Date object. Uses the default zone. + * @param {Date} date - a Javascript Date object + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @return {DateTime} + */ + ; + + DateTime.fromJSDate = function fromJSDate(date, options) { + if (options === void 0) { + options = {}; + } + + var ts = isDate(date) ? date.valueOf() : NaN; + + if (Number.isNaN(ts)) { + return DateTime.invalid("invalid input"); + } + + var zoneToUse = normalizeZone(options.zone, Settings.defaultZone); + + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + return new DateTime({ + ts: ts, + zone: zoneToUse, + loc: Locale.fromObject(options) + }); + } + /** + * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} milliseconds - a number of milliseconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromMillis = function fromMillis(milliseconds, options) { + if (options === void 0) { + options = {}; + } + + if (!isNumber(milliseconds)) { + throw new InvalidArgumentError("fromMillis requires a numerical input, but received a " + typeof milliseconds + " with value " + milliseconds); + } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) { + // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start + return DateTime.invalid("Timestamp out of range"); + } else { + return new DateTime({ + ts: milliseconds, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + /** + * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone. + * @param {number} seconds - a number of seconds since 1970 UTC + * @param {Object} options - configuration options for the DateTime + * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into + * @param {string} [options.locale] - a locale to set on the resulting DateTime instance + * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromSeconds = function fromSeconds(seconds, options) { + if (options === void 0) { + options = {}; + } + + if (!isNumber(seconds)) { + throw new InvalidArgumentError("fromSeconds requires a numerical input"); + } else { + return new DateTime({ + ts: seconds * 1000, + zone: normalizeZone(options.zone, Settings.defaultZone), + loc: Locale.fromObject(options) + }); + } + } + /** + * Create a DateTime from a Javascript object with keys like 'year' and 'hour' with reasonable defaults. + * @param {Object} obj - the object to create the DateTime from + * @param {number} obj.year - a year, such as 1987 + * @param {number} obj.month - a month, 1-12 + * @param {number} obj.day - a day of the month, 1-31, depending on the month + * @param {number} obj.ordinal - day of the year, 1-365 or 366 + * @param {number} obj.weekYear - an ISO week year + * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year + * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday + * @param {number} obj.hour - hour of the day, 0-23 + * @param {number} obj.minute - minute of the hour, 0-59 + * @param {number} obj.second - second of the minute, 0-59 + * @param {number} obj.millisecond - millisecond of the second, 0-999 + * @param {string|Zone} [obj.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone() + * @param {string} [obj.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} obj.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} obj.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25' + * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01' + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06 + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'utc' }), + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'local' }) + * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'America/New_York' }) + * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13' + * @return {DateTime} + */ + ; + + DateTime.fromObject = function fromObject(obj) { + var zoneToUse = normalizeZone(obj.zone, Settings.defaultZone); + + if (!zoneToUse.isValid) { + return DateTime.invalid(unsupportedZone(zoneToUse)); + } + + var tsNow = Settings.now(), + offsetProvis = zoneToUse.offset(tsNow), + normalized = normalizeObject(obj, normalizeUnit, ["zone", "locale", "outputCalendar", "numberingSystem"]), + containsOrdinal = !isUndefined(normalized.ordinal), + containsGregorYear = !isUndefined(normalized.year), + containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day), + containsGregor = containsGregorYear || containsGregorMD, + definiteWeekDef = normalized.weekYear || normalized.weekNumber, + loc = Locale.fromObject(obj); // cases: + // just a weekday -> this week's instance of that weekday, no worries + // (gregorian data or ordinal) + (weekYear or weekNumber) -> error + // (gregorian month or day) + ordinal -> error + // otherwise just use weeks or ordinals or gregorian, depending on what's specified + + if ((containsGregor || containsOrdinal) && definiteWeekDef) { + throw new ConflictingSpecificationError("Can't mix weekYear/weekNumber units with year/month/day or ordinals"); + } + + if (containsGregorMD && containsOrdinal) { + throw new ConflictingSpecificationError("Can't mix ordinal dates with month/day"); + } + + var useWeekData = definiteWeekDef || normalized.weekday && !containsGregor; // configure ourselves to deal with gregorian dates or week stuff + + var units, + defaultValues, + objNow = tsToObj(tsNow, offsetProvis); + + if (useWeekData) { + units = orderedWeekUnits; + defaultValues = defaultWeekUnitValues; + objNow = gregorianToWeek(objNow); + } else if (containsOrdinal) { + units = orderedOrdinalUnits; + defaultValues = defaultOrdinalUnitValues; + objNow = gregorianToOrdinal(objNow); + } else { + units = orderedUnits$1; + defaultValues = defaultUnitValues; + } // set default values for missing stuff + + + var foundFirst = false; + + for (var _iterator3 = _createForOfIteratorHelperLoose(units), _step3; !(_step3 = _iterator3()).done;) { + var u = _step3.value; + var v = normalized[u]; + + if (!isUndefined(v)) { + foundFirst = true; + } else if (foundFirst) { + normalized[u] = defaultValues[u]; + } else { + normalized[u] = objNow[u]; + } + } // make sure the values we have are in range + + + var higherOrderInvalid = useWeekData ? hasInvalidWeekData(normalized) : containsOrdinal ? hasInvalidOrdinalData(normalized) : hasInvalidGregorianData(normalized), + invalid = higherOrderInvalid || hasInvalidTimeData(normalized); + + if (invalid) { + return DateTime.invalid(invalid); + } // compute the actual time + + + var gregorian = useWeekData ? weekToGregorian(normalized) : containsOrdinal ? ordinalToGregorian(normalized) : normalized, + _objToTS2 = objToTS(gregorian, offsetProvis, zoneToUse), + tsFinal = _objToTS2[0], + offsetFinal = _objToTS2[1], + inst = new DateTime({ + ts: tsFinal, + zone: zoneToUse, + o: offsetFinal, + loc: loc + }); // gregorian data + weekday serves only to validate + + + if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) { + return DateTime.invalid("mismatched weekday", "you can't specify both a weekday of " + normalized.weekday + " and a date of " + inst.toISO()); + } + + return inst; + } + /** + * Create a DateTime from an ISO 8601 string + * @param {string} text - the ISO string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromISO('2016-05-25T09:08:34.123') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00') + * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true}) + * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'}) + * @example DateTime.fromISO('2016-W05-4') + * @return {DateTime} + */ + ; + + DateTime.fromISO = function fromISO(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseISODate = parseISODate(text), + vals = _parseISODate[0], + parsedZone = _parseISODate[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "ISO 8601", text); + } + /** + * Create a DateTime from an RFC 2822 string + * @param {string} text - the RFC 2822 string + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT') + * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600') + * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z') + * @return {DateTime} + */ + ; + + DateTime.fromRFC2822 = function fromRFC2822(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseRFC2822Date = parseRFC2822Date(text), + vals = _parseRFC2822Date[0], + parsedZone = _parseRFC2822Date[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "RFC 2822", text); + } + /** + * Create a DateTime from an HTTP header date + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @param {string} text - the HTTP header date + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in. + * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods. + * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance + * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT') + * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT') + * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994') + * @return {DateTime} + */ + ; + + DateTime.fromHTTP = function fromHTTP(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseHTTPDate = parseHTTPDate(text), + vals = _parseHTTPDate[0], + parsedZone = _parseHTTPDate[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "HTTP", opts); + } + /** + * Create a DateTime from an input string and format string. + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @see https://moment.github.io/luxon/docs/manual/parsing.html#table-of-tokens + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see the link below for the formats) + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @return {DateTime} + */ + ; + + DateTime.fromFormat = function fromFormat(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + if (isUndefined(text) || isUndefined(fmt)) { + throw new InvalidArgumentError("fromFormat requires an input string and a format"); + } + + var _opts = opts, + _opts$locale = _opts.locale, + locale = _opts$locale === void 0 ? null : _opts$locale, + _opts$numberingSystem = _opts.numberingSystem, + numberingSystem = _opts$numberingSystem === void 0 ? null : _opts$numberingSystem, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }), + _parseFromTokens = parseFromTokens(localeToUse, text, fmt), + vals = _parseFromTokens[0], + parsedZone = _parseFromTokens[1], + invalid = _parseFromTokens[2]; + + if (invalid) { + return DateTime.invalid(invalid); + } else { + return parseDataToDateTime(vals, parsedZone, opts, "format " + fmt, text); + } + } + /** + * @deprecated use fromFormat instead + */ + ; + + DateTime.fromString = function fromString(text, fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + return DateTime.fromFormat(text, fmt, opts); + } + /** + * Create a DateTime from a SQL date, time, or datetime + * Defaults to en-US if no locale has been specified, regardless of the system's locale + * @param {string} text - the string to parse + * @param {Object} opts - options to affect the creation + * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone + * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one + * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale + * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system + * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance + * @example DateTime.fromSQL('2017-05-15') + * @example DateTime.fromSQL('2017-05-15 09:12:34') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles') + * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true }) + * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' }) + * @example DateTime.fromSQL('09:12:34.342') + * @return {DateTime} + */ + ; + + DateTime.fromSQL = function fromSQL(text, opts) { + if (opts === void 0) { + opts = {}; + } + + var _parseSQL = parseSQL(text), + vals = _parseSQL[0], + parsedZone = _parseSQL[1]; + + return parseDataToDateTime(vals, parsedZone, opts, "SQL", text); + } + /** + * Create an invalid DateTime. + * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent + * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information + * @return {DateTime} + */ + ; + + DateTime.invalid = function invalid(reason, explanation) { + if (explanation === void 0) { + explanation = null; + } + + if (!reason) { + throw new InvalidArgumentError("need to specify a reason the DateTime is invalid"); + } + + var invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation); + + if (Settings.throwOnInvalid) { + throw new InvalidDateTimeError(invalid); + } else { + return new DateTime({ + invalid: invalid + }); + } + } + /** + * Check if an object is a DateTime. Works across context boundaries + * @param {object} o + * @return {boolean} + */ + ; + + DateTime.isDateTime = function isDateTime(o) { + return o && o.isLuxonDateTime || false; + } // INFO + + /** + * Get the value of unit. + * @param {string} unit - a unit such as 'minute' or 'day' + * @example DateTime.local(2017, 7, 4).get('month'); //=> 7 + * @example DateTime.local(2017, 7, 4).get('day'); //=> 4 + * @return {number} + */ + ; + + var _proto = DateTime.prototype; + + _proto.get = function get(unit) { + return this[unit]; + } + /** + * Returns whether the DateTime is valid. Invalid DateTimes occur when: + * * The DateTime was created from invalid calendar information, such as the 13th month or February 30 + * * The DateTime was created by an operation on another invalid date + * @type {boolean} + */ + ; + + /** + * Returns the resolved Intl options for this DateTime. + * This is useful in understanding the behavior of formatting methods + * @param {Object} opts - the same options as toLocaleString + * @return {Object} + */ + _proto.resolvedLocaleOpts = function resolvedLocaleOpts(opts) { + if (opts === void 0) { + opts = {}; + } + + var _Formatter$create$res = Formatter.create(this.loc.clone(opts), opts).resolvedOptions(this), + locale = _Formatter$create$res.locale, + numberingSystem = _Formatter$create$res.numberingSystem, + calendar = _Formatter$create$res.calendar; + + return { + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: calendar + }; + } // TRANSFORM + + /** + * "Set" the DateTime's zone to UTC. Returns a newly-constructed DateTime. + * + * Equivalent to {@link setZone}('utc') + * @param {number} [offset=0] - optionally, an offset from UTC in minutes + * @param {Object} [opts={}] - options to pass to `setZone()` + * @return {DateTime} + */ + ; + + _proto.toUTC = function toUTC(offset, opts) { + if (offset === void 0) { + offset = 0; + } + + if (opts === void 0) { + opts = {}; + } + + return this.setZone(FixedOffsetZone.instance(offset), opts); + } + /** + * "Set" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime. + * + * Equivalent to `setZone('local')` + * @return {DateTime} + */ + ; + + _proto.toLocal = function toLocal() { + return this.setZone(Settings.defaultZone); + } + /** + * "Set" the DateTime's zone to specified zone. Returns a newly-constructed DateTime. + * + * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link plus}. You may wish to use {@link toLocal} and {@link toUTC} which provide simple convenience wrappers for commonly used zones. + * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link Zone} class. + * @param {Object} opts - options + * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this. + * @return {DateTime} + */ + ; + + _proto.setZone = function setZone(zone, _temp) { + var _ref3 = _temp === void 0 ? {} : _temp, + _ref3$keepLocalTime = _ref3.keepLocalTime, + keepLocalTime = _ref3$keepLocalTime === void 0 ? false : _ref3$keepLocalTime, + _ref3$keepCalendarTim = _ref3.keepCalendarTime, + keepCalendarTime = _ref3$keepCalendarTim === void 0 ? false : _ref3$keepCalendarTim; + + zone = normalizeZone(zone, Settings.defaultZone); + + if (zone.equals(this.zone)) { + return this; + } else if (!zone.isValid) { + return DateTime.invalid(unsupportedZone(zone)); + } else { + var newTS = this.ts; + + if (keepLocalTime || keepCalendarTime) { + var offsetGuess = zone.offset(this.ts); + var asObj = this.toObject(); + + var _objToTS3 = objToTS(asObj, offsetGuess, zone); + + newTS = _objToTS3[0]; + } + + return clone$1(this, { + ts: newTS, + zone: zone + }); + } + } + /** + * "Set" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime. + * @param {Object} properties - the properties to set + * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' }) + * @return {DateTime} + */ + ; + + _proto.reconfigure = function reconfigure(_temp2) { + var _ref4 = _temp2 === void 0 ? {} : _temp2, + locale = _ref4.locale, + numberingSystem = _ref4.numberingSystem, + outputCalendar = _ref4.outputCalendar; + + var loc = this.loc.clone({ + locale: locale, + numberingSystem: numberingSystem, + outputCalendar: outputCalendar + }); + return clone$1(this, { + loc: loc + }); + } + /** + * "Set" the locale. Returns a newly-constructed DateTime. + * Just a convenient alias for reconfigure({ locale }) + * @example DateTime.local(2017, 5, 25).setLocale('en-GB') + * @return {DateTime} + */ + ; + + _proto.setLocale = function setLocale(locale) { + return this.reconfigure({ + locale: locale + }); + } + /** + * "Set" the values of specified units. Returns a newly-constructed DateTime. + * You can only set units with this method; for "setting" metadata, see {@link reconfigure} and {@link setZone}. + * @param {Object} values - a mapping of units to numbers + * @example dt.set({ year: 2017 }) + * @example dt.set({ hour: 8, minute: 30 }) + * @example dt.set({ weekday: 5 }) + * @example dt.set({ year: 2005, ordinal: 234 }) + * @return {DateTime} + */ + ; + + _proto.set = function set(values) { + if (!this.isValid) return this; + var normalized = normalizeObject(values, normalizeUnit, []), + settingWeekStuff = !isUndefined(normalized.weekYear) || !isUndefined(normalized.weekNumber) || !isUndefined(normalized.weekday); + var mixed; + + if (settingWeekStuff) { + mixed = weekToGregorian(Object.assign(gregorianToWeek(this.c), normalized)); + } else if (!isUndefined(normalized.ordinal)) { + mixed = ordinalToGregorian(Object.assign(gregorianToOrdinal(this.c), normalized)); + } else { + mixed = Object.assign(this.toObject(), normalized); // if we didn't set the day but we ended up on an overflow date, + // use the last day of the right month + + if (isUndefined(normalized.day)) { + mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day); + } + } + + var _objToTS4 = objToTS(mixed, this.o, this.zone), + ts = _objToTS4[0], + o = _objToTS4[1]; + + return clone$1(this, { + ts: ts, + o: o + }); + } + /** + * Add a period of time to this DateTime and return the resulting DateTime + * + * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between. + * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + * @example DateTime.local().plus(123) //~> in 123 milliseconds + * @example DateTime.local().plus({ minutes: 15 }) //~> in 15 minutes + * @example DateTime.local().plus({ days: 1 }) //~> this time tomorrow + * @example DateTime.local().plus({ days: -1 }) //~> this time yesterday + * @example DateTime.local().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min + * @example DateTime.local().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min + * @return {DateTime} + */ + ; + + _proto.plus = function plus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration); + return clone$1(this, adjustTime(this, dur)); + } + /** + * Subtract a period of time to this DateTime and return the resulting DateTime + * See {@link plus} + * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject() + @return {DateTime} + */ + ; + + _proto.minus = function minus(duration) { + if (!this.isValid) return this; + var dur = friendlyDuration(duration).negate(); + return clone$1(this, adjustTime(this, dur)); + } + /** + * "Set" this DateTime to the beginning of a unit of time. + * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01' + * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00' + * @return {DateTime} + */ + ; + + _proto.startOf = function startOf(unit) { + if (!this.isValid) return this; + var o = {}, + normalizedUnit = Duration.normalizeUnit(unit); + + switch (normalizedUnit) { + case "years": + o.month = 1; + // falls through + + case "quarters": + case "months": + o.day = 1; + // falls through + + case "weeks": + case "days": + o.hour = 0; + // falls through + + case "hours": + o.minute = 0; + // falls through + + case "minutes": + o.second = 0; + // falls through + + case "seconds": + o.millisecond = 0; + break; + // no default, invalid units throw in normalizeUnit() + } + + if (normalizedUnit === "weeks") { + o.weekday = 1; + } + + if (normalizedUnit === "quarters") { + var q = Math.ceil(this.month / 3); + o.month = (q - 1) * 3 + 1; + } + + return this.set(o); + } + /** + * "Set" this DateTime to the end (meaning the last millisecond) of a unit of time + * @param {string} unit - The unit to go to the end of. Can be 'year', 'month', 'day', 'hour', 'minute', 'second', or 'millisecond'. + * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00' + * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00' + * @return {DateTime} + */ + ; + + _proto.endOf = function endOf(unit) { + var _this$plus; + + return this.isValid ? this.plus((_this$plus = {}, _this$plus[unit] = 1, _this$plus)).startOf(unit).minus(1) : this; + } // OUTPUT + + /** + * Returns a string representation of this DateTime formatted according to the specified format string. + * **You may not want this.** See {@link toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens). + * Defaults to en-US if no locale has been specified, regardless of the system's locale. + * @see https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens + * @param {string} fmt - the format string + * @param {Object} opts - opts to override the configuration options + * @example DateTime.local().toFormat('yyyy LLL dd') //=> '2017 Apr 22' + * @example DateTime.local().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22' + * @example DateTime.local().toFormat('yyyy LLL dd', { locale: "fr" }) //=> '2017 avr. 22' + * @example DateTime.local().toFormat("HH 'hours and' mm 'minutes'") //=> '20 hours and 55 minutes' + * @return {string} + */ + ; + + _proto.toFormat = function toFormat(fmt, opts) { + if (opts === void 0) { + opts = {}; + } + + return this.isValid ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt) : INVALID$2; + } + /** + * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`. + * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation + * of the DateTime in the assigned locale. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat + * @param opts {Object} - Intl.DateTimeFormat constructor options and configuration options + * @example DateTime.local().toLocaleString(); //=> 4/20/2017 + * @example DateTime.local().setLocale('en-gb').toLocaleString(); //=> '20/04/2017' + * @example DateTime.local().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017' + * @example DateTime.local().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017' + * @example DateTime.local().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM' + * @example DateTime.local().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM' + * @example DateTime.local().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20' + * @example DateTime.local().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM' + * @example DateTime.local().toLocaleString({ hour: '2-digit', minute: '2-digit', hour12: false }); //=> '11:32' + * @return {string} + */ + ; + + _proto.toLocaleString = function toLocaleString(opts) { + if (opts === void 0) { + opts = DATE_SHORT; + } + + return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTime(this) : INVALID$2; + } + /** + * Returns an array of format "parts", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output. + * Defaults to the system's locale if no locale has been specified + * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts + * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`. + * @example DateTime.local().toLocaleParts(); //=> [ + * //=> { type: 'day', value: '25' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'month', value: '05' }, + * //=> { type: 'literal', value: '/' }, + * //=> { type: 'year', value: '1982' } + * //=> ] + */ + ; + + _proto.toLocaleParts = function toLocaleParts(opts) { + if (opts === void 0) { + opts = {}; + } + + return this.isValid ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this) : []; + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z' + * @example DateTime.local().toISO() //=> '2017-04-22T20:47:05.335-04:00' + * @example DateTime.local().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335' + * @example DateTime.local().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400' + * @return {string} + */ + ; + + _proto.toISO = function toISO(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) { + return null; + } + + return this.toISODate(opts) + "T" + this.toISOTime(opts); + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's date component + * @param {Object} opts - options + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25' + * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525' + * @return {string} + */ + ; + + _proto.toISODate = function toISODate(_temp3) { + var _ref5 = _temp3 === void 0 ? {} : _temp3, + _ref5$format = _ref5.format, + format = _ref5$format === void 0 ? "extended" : _ref5$format; + + var fmt = format === "basic" ? "yyyyMMdd" : "yyyy-MM-dd"; + + if (this.year > 9999) { + fmt = "+" + fmt; + } + + return toTechFormat(this, fmt); + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's week date + * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2' + * @return {string} + */ + ; + + _proto.toISOWeekDate = function toISOWeekDate() { + return toTechFormat(this, "kkkk-'W'WW-c"); + } + /** + * Returns an ISO 8601-compliant string representation of this DateTime's time component + * @param {Object} opts - options + * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0 + * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0 + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @param {string} [opts.format='extended'] - choose between the basic and extended format + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z' + * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z' + * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z' + * @return {string} + */ + ; + + _proto.toISOTime = function toISOTime(_temp4) { + var _ref6 = _temp4 === void 0 ? {} : _temp4, + _ref6$suppressMillise = _ref6.suppressMilliseconds, + suppressMilliseconds = _ref6$suppressMillise === void 0 ? false : _ref6$suppressMillise, + _ref6$suppressSeconds = _ref6.suppressSeconds, + suppressSeconds = _ref6$suppressSeconds === void 0 ? false : _ref6$suppressSeconds, + _ref6$includeOffset = _ref6.includeOffset, + includeOffset = _ref6$includeOffset === void 0 ? true : _ref6$includeOffset, + _ref6$format = _ref6.format, + format = _ref6$format === void 0 ? "extended" : _ref6$format; + + return toTechTimeFormat(this, { + suppressSeconds: suppressSeconds, + suppressMilliseconds: suppressMilliseconds, + includeOffset: includeOffset, + format: format + }); + } + /** + * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC + * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000' + * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400' + * @return {string} + */ + ; + + _proto.toRFC2822 = function toRFC2822() { + return toTechFormat(this, "EEE, dd LLL yyyy HH:mm:ss ZZZ", false); + } + /** + * Returns a string representation of this DateTime appropriate for use in HTTP headers. + * Specifically, the string conforms to RFC 1123. + * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1 + * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT' + * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT' + * @return {string} + */ + ; + + _proto.toHTTP = function toHTTP() { + return toTechFormat(this.toUTC(), "EEE, dd LLL yyyy HH:mm:ss 'GMT'"); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL Date + * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13' + * @return {string} + */ + ; + + _proto.toSQLDate = function toSQLDate() { + return toTechFormat(this, "yyyy-MM-dd"); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL Time + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @example DateTime.utc().toSQL() //=> '05:15:16.345' + * @example DateTime.local().toSQL() //=> '05:15:16.345 -04:00' + * @example DateTime.local().toSQL({ includeOffset: false }) //=> '05:15:16.345' + * @example DateTime.local().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York' + * @return {string} + */ + ; + + _proto.toSQLTime = function toSQLTime(_temp5) { + var _ref7 = _temp5 === void 0 ? {} : _temp5, + _ref7$includeOffset = _ref7.includeOffset, + includeOffset = _ref7$includeOffset === void 0 ? true : _ref7$includeOffset, + _ref7$includeZone = _ref7.includeZone, + includeZone = _ref7$includeZone === void 0 ? false : _ref7$includeZone; + + return toTechTimeFormat(this, { + includeOffset: includeOffset, + includeZone: includeZone, + spaceZone: true + }); + } + /** + * Returns a string representation of this DateTime appropriate for use in SQL DateTime + * @param {Object} opts - options + * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset. + * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00' + * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z' + * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00' + * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000' + * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York' + * @return {string} + */ + ; + + _proto.toSQL = function toSQL(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) { + return null; + } + + return this.toSQLDate() + " " + this.toSQLTime(opts); + } + /** + * Returns a string representation of this DateTime appropriate for debugging + * @return {string} + */ + ; + + _proto.toString = function toString() { + return this.isValid ? this.toISO() : INVALID$2; + } + /** + * Returns the epoch milliseconds of this DateTime. Alias of {@link toMillis} + * @return {number} + */ + ; + + _proto.valueOf = function valueOf() { + return this.toMillis(); + } + /** + * Returns the epoch milliseconds of this DateTime. + * @return {number} + */ + ; + + _proto.toMillis = function toMillis() { + return this.isValid ? this.ts : NaN; + } + /** + * Returns the epoch seconds of this DateTime. + * @return {number} + */ + ; + + _proto.toSeconds = function toSeconds() { + return this.isValid ? this.ts / 1000 : NaN; + } + /** + * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON. + * @return {string} + */ + ; + + _proto.toJSON = function toJSON() { + return this.toISO(); + } + /** + * Returns a BSON serializable equivalent to this DateTime. + * @return {Date} + */ + ; + + _proto.toBSON = function toBSON() { + return this.toJSDate(); + } + /** + * Returns a Javascript object with this DateTime's year, month, day, and so on. + * @param opts - options for generating the object + * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output + * @example DateTime.local().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 } + * @return {Object} + */ + ; + + _proto.toObject = function toObject(opts) { + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid) return {}; + var base = Object.assign({}, this.c); + + if (opts.includeConfig) { + base.outputCalendar = this.outputCalendar; + base.numberingSystem = this.loc.numberingSystem; + base.locale = this.loc.locale; + } + + return base; + } + /** + * Returns a Javascript Date equivalent to this DateTime. + * @return {Date} + */ + ; + + _proto.toJSDate = function toJSDate() { + return new Date(this.isValid ? this.ts : NaN); + } // COMPARE + + /** + * Return the difference between two DateTimes as a Duration. + * @param {DateTime} otherDateTime - the DateTime to compare this one to + * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration. + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @example + * var i1 = DateTime.fromISO('1982-05-25T09:45'), + * i2 = DateTime.fromISO('1983-10-14T10:30'); + * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 } + * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 } + * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 } + * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 } + * @return {Duration} + */ + ; + + _proto.diff = function diff(otherDateTime, unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (opts === void 0) { + opts = {}; + } + + if (!this.isValid || !otherDateTime.isValid) { + return Duration.invalid(this.invalid || otherDateTime.invalid, "created by diffing an invalid DateTime"); + } + + var durOpts = Object.assign({ + locale: this.locale, + numberingSystem: this.numberingSystem + }, opts); + + var units = maybeArray(unit).map(Duration.normalizeUnit), + otherIsLater = otherDateTime.valueOf() > this.valueOf(), + earlier = otherIsLater ? this : otherDateTime, + later = otherIsLater ? otherDateTime : this, + diffed = _diff(earlier, later, units, durOpts); + + return otherIsLater ? diffed.negate() : diffed; + } + /** + * Return the difference between this DateTime and right now. + * See {@link diff} + * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration + * @param {Object} opts - options that affect the creation of the Duration + * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use + * @return {Duration} + */ + ; + + _proto.diffNow = function diffNow(unit, opts) { + if (unit === void 0) { + unit = "milliseconds"; + } + + if (opts === void 0) { + opts = {}; + } + + return this.diff(DateTime.local(), unit, opts); + } + /** + * Return an Interval spanning between this DateTime and another DateTime + * @param {DateTime} otherDateTime - the other end point of the Interval + * @return {Interval} + */ + ; + + _proto.until = function until(otherDateTime) { + return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this; + } + /** + * Return whether this DateTime is in the same unit of time as another DateTime + * @param {DateTime} otherDateTime - the other DateTime + * @param {string} unit - the unit of time to check sameness on + * @example DateTime.local().hasSame(otherDT, 'day'); //~> true if both the same calendar day + * @return {boolean} + */ + ; + + _proto.hasSame = function hasSame(otherDateTime, unit) { + if (!this.isValid) return false; + + if (unit === "millisecond") { + return this.valueOf() === otherDateTime.valueOf(); + } else { + var inputMs = otherDateTime.valueOf(); + return this.startOf(unit) <= inputMs && inputMs <= this.endOf(unit); + } + } + /** + * Equality check + * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid. + * To compare just the millisecond values, use `+dt1 === +dt2`. + * @param {DateTime} other - the other DateTime + * @return {boolean} + */ + ; + + _proto.equals = function equals(other) { + return this.isValid && other.isValid && this.valueOf() === other.valueOf() && this.zone.equals(other.zone) && this.loc.equals(other.loc); + } + /** + * Returns a string representation of a this time relative to now, such as "in two days". Can only internationalize if your + * platform supports Intl.RelativeTimeFormat. Rounds down by default. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.local()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} [options.style="long"] - the style of units, must be "long", "short", or "narrow" + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", "days", "hours", "minutes", or "seconds" + * @param {boolean} [options.round=true] - whether to round the numbers in the output. + * @param {boolean} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.local().plus({ days: 1 }).toRelative() //=> "in 1 day" + * @example DateTime.local().setLocale("es").toRelative({ days: 1 }) //=> "dentro de 1 día" + * @example DateTime.local().plus({ days: 1 }).toRelative({ locale: "fr" }) //=> "dans 23 heures" + * @example DateTime.local().minus({ days: 2 }).toRelative() //=> "2 days ago" + * @example DateTime.local().minus({ days: 2 }).toRelative({ unit: "hours" }) //=> "48 hours ago" + * @example DateTime.local().minus({ hours: 36 }).toRelative({ round: false }) //=> "1.5 days ago" + */ + ; + + _proto.toRelative = function toRelative(options) { + if (options === void 0) { + options = {}; + } + + if (!this.isValid) return null; + var base = options.base || DateTime.fromObject({ + zone: this.zone + }), + padding = options.padding ? this < base ? -options.padding : options.padding : 0; + return diffRelative(base, this.plus(padding), Object.assign(options, { + numeric: "always", + units: ["years", "months", "days", "hours", "minutes", "seconds"] + })); + } + /** + * Returns a string representation of this date relative to today, such as "yesterday" or "next month". + * Only internationalizes on platforms that supports Intl.RelativeTimeFormat. + * @param {Object} options - options that affect the output + * @param {DateTime} [options.base=DateTime.local()] - the DateTime to use as the basis to which this time is compared. Defaults to now. + * @param {string} options.locale - override the locale of this DateTime + * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of "years", "quarters", "months", "weeks", or "days" + * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this + * @example DateTime.local().plus({ days: 1 }).toRelativeCalendar() //=> "tomorrow" + * @example DateTime.local().setLocale("es").plus({ days: 1 }).toRelative() //=> ""mañana" + * @example DateTime.local().plus({ days: 1 }).toRelativeCalendar({ locale: "fr" }) //=> "demain" + * @example DateTime.local().minus({ days: 2 }).toRelativeCalendar() //=> "2 days ago" + */ + ; + + _proto.toRelativeCalendar = function toRelativeCalendar(options) { + if (options === void 0) { + options = {}; + } + + if (!this.isValid) return null; + return diffRelative(options.base || DateTime.fromObject({ + zone: this.zone + }), this, Object.assign(options, { + numeric: "auto", + units: ["years", "months", "days"], + calendary: true + })); + } + /** + * Return the min of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum + * @return {DateTime} the min DateTime, or undefined if called with no argument + */ + ; + + DateTime.min = function min() { + for (var _len = arguments.length, dateTimes = new Array(_len), _key = 0; _key < _len; _key++) { + dateTimes[_key] = arguments[_key]; + } + + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("min requires all arguments be DateTimes"); + } + + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.min); + } + /** + * Return the max of several date times + * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum + * @return {DateTime} the max DateTime, or undefined if called with no argument + */ + ; + + DateTime.max = function max() { + for (var _len2 = arguments.length, dateTimes = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + dateTimes[_key2] = arguments[_key2]; + } + + if (!dateTimes.every(DateTime.isDateTime)) { + throw new InvalidArgumentError("max requires all arguments be DateTimes"); + } + + return bestBy(dateTimes, function (i) { + return i.valueOf(); + }, Math.max); + } // MISC + + /** + * Explain how a string would be parsed by fromFormat() + * @param {string} text - the string to parse + * @param {string} fmt - the format the string is expected to be in (see description) + * @param {Object} options - options taken by fromFormat() + * @return {Object} + */ + ; + + DateTime.fromFormatExplain = function fromFormatExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + + var _options = options, + _options$locale = _options.locale, + locale = _options$locale === void 0 ? null : _options$locale, + _options$numberingSys = _options.numberingSystem, + numberingSystem = _options$numberingSys === void 0 ? null : _options$numberingSys, + localeToUse = Locale.fromOpts({ + locale: locale, + numberingSystem: numberingSystem, + defaultToEN: true + }); + return explainFromTokens(localeToUse, text, fmt); + } + /** + * @deprecated use fromFormatExplain instead + */ + ; + + DateTime.fromStringExplain = function fromStringExplain(text, fmt, options) { + if (options === void 0) { + options = {}; + } + + return DateTime.fromFormatExplain(text, fmt, options); + } // FORMAT PRESETS + + /** + * {@link toLocaleString} format like 10/14/1983 + * @type {Object} + */ + ; + + _createClass(DateTime, [{ + key: "isValid", + get: function get() { + return this.invalid === null; + } + /** + * Returns an error code if this DateTime is invalid, or null if the DateTime is valid + * @type {string} + */ + + }, { + key: "invalidReason", + get: function get() { + return this.invalid ? this.invalid.reason : null; + } + /** + * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid + * @type {string} + */ + + }, { + key: "invalidExplanation", + get: function get() { + return this.invalid ? this.invalid.explanation : null; + } + /** + * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "locale", + get: function get() { + return this.isValid ? this.loc.locale : null; + } + /** + * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "numberingSystem", + get: function get() { + return this.isValid ? this.loc.numberingSystem : null; + } + /** + * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime + * + * @type {string} + */ + + }, { + key: "outputCalendar", + get: function get() { + return this.isValid ? this.loc.outputCalendar : null; + } + /** + * Get the time zone associated with this DateTime. + * @type {Zone} + */ + + }, { + key: "zone", + get: function get() { + return this._zone; + } + /** + * Get the name of the time zone. + * @type {string} + */ + + }, { + key: "zoneName", + get: function get() { + return this.isValid ? this.zone.name : null; + } + /** + * Get the year + * @example DateTime.local(2017, 5, 25).year //=> 2017 + * @type {number} + */ + + }, { + key: "year", + get: function get() { + return this.isValid ? this.c.year : NaN; + } + /** + * Get the quarter + * @example DateTime.local(2017, 5, 25).quarter //=> 2 + * @type {number} + */ + + }, { + key: "quarter", + get: function get() { + return this.isValid ? Math.ceil(this.c.month / 3) : NaN; + } + /** + * Get the month (1-12). + * @example DateTime.local(2017, 5, 25).month //=> 5 + * @type {number} + */ + + }, { + key: "month", + get: function get() { + return this.isValid ? this.c.month : NaN; + } + /** + * Get the day of the month (1-30ish). + * @example DateTime.local(2017, 5, 25).day //=> 25 + * @type {number} + */ + + }, { + key: "day", + get: function get() { + return this.isValid ? this.c.day : NaN; + } + /** + * Get the hour of the day (0-23). + * @example DateTime.local(2017, 5, 25, 9).hour //=> 9 + * @type {number} + */ + + }, { + key: "hour", + get: function get() { + return this.isValid ? this.c.hour : NaN; + } + /** + * Get the minute of the hour (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30 + * @type {number} + */ + + }, { + key: "minute", + get: function get() { + return this.isValid ? this.c.minute : NaN; + } + /** + * Get the second of the minute (0-59). + * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52 + * @type {number} + */ + + }, { + key: "second", + get: function get() { + return this.isValid ? this.c.second : NaN; + } + /** + * Get the millisecond of the second (0-999). + * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654 + * @type {number} + */ + + }, { + key: "millisecond", + get: function get() { + return this.isValid ? this.c.millisecond : NaN; + } + /** + * Get the week year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekYear //=> 2015 + * @type {number} + */ + + }, { + key: "weekYear", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN; + } + /** + * Get the week number of the week year (1-52ish). + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2017, 5, 25).weekNumber //=> 21 + * @type {number} + */ + + }, { + key: "weekNumber", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN; + } + /** + * Get the day of the week. + * 1 is Monday and 7 is Sunday + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2014, 11, 31).weekday //=> 4 + * @type {number} + */ + + }, { + key: "weekday", + get: function get() { + return this.isValid ? possiblyCachedWeekData(this).weekday : NaN; + } + /** + * Get the ordinal (meaning the day of the year) + * @example DateTime.local(2017, 5, 25).ordinal //=> 145 + * @type {number|DateTime} + */ + + }, { + key: "ordinal", + get: function get() { + return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN; + } + /** + * Get the human readable short month name, such as 'Oct'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthShort //=> Oct + * @type {string} + */ + + }, { + key: "monthShort", + get: function get() { + return this.isValid ? Info.months("short", { + locale: this.locale + })[this.month - 1] : null; + } + /** + * Get the human readable long month name, such as 'October'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).monthLong //=> October + * @type {string} + */ + + }, { + key: "monthLong", + get: function get() { + return this.isValid ? Info.months("long", { + locale: this.locale + })[this.month - 1] : null; + } + /** + * Get the human readable short weekday, such as 'Mon'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon + * @type {string} + */ + + }, { + key: "weekdayShort", + get: function get() { + return this.isValid ? Info.weekdays("short", { + locale: this.locale + })[this.weekday - 1] : null; + } + /** + * Get the human readable long weekday, such as 'Monday'. + * Defaults to the system's locale if no locale has been specified + * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday + * @type {string} + */ + + }, { + key: "weekdayLong", + get: function get() { + return this.isValid ? Info.weekdays("long", { + locale: this.locale + })[this.weekday - 1] : null; + } + /** + * Get the UTC offset of this DateTime in minutes + * @example DateTime.local().offset //=> -240 + * @example DateTime.utc().offset //=> 0 + * @type {number} + */ + + }, { + key: "offset", + get: function get() { + return this.isValid ? +this.o : NaN; + } + /** + * Get the short human name for the zone's current offset, for example "EST" or "EDT". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + + }, { + key: "offsetNameShort", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "short", + locale: this.locale + }); + } else { + return null; + } + } + /** + * Get the long human name for the zone's current offset, for example "Eastern Standard Time" or "Eastern Daylight Time". + * Defaults to the system's locale if no locale has been specified + * @type {string} + */ + + }, { + key: "offsetNameLong", + get: function get() { + if (this.isValid) { + return this.zone.offsetName(this.ts, { + format: "long", + locale: this.locale + }); + } else { + return null; + } + } + /** + * Get whether this zone's offset ever changes, as in a DST. + * @type {boolean} + */ + + }, { + key: "isOffsetFixed", + get: function get() { + return this.isValid ? this.zone.universal : null; + } + /** + * Get whether the DateTime is in a DST. + * @type {boolean} + */ + + }, { + key: "isInDST", + get: function get() { + if (this.isOffsetFixed) { + return false; + } else { + return this.offset > this.set({ + month: 1 + }).offset || this.offset > this.set({ + month: 5 + }).offset; + } + } + /** + * Returns true if this DateTime is in a leap year, false otherwise + * @example DateTime.local(2016).isInLeapYear //=> true + * @example DateTime.local(2013).isInLeapYear //=> false + * @type {boolean} + */ + + }, { + key: "isInLeapYear", + get: function get() { + return isLeapYear(this.year); + } + /** + * Returns the number of days in this DateTime's month + * @example DateTime.local(2016, 2).daysInMonth //=> 29 + * @example DateTime.local(2016, 3).daysInMonth //=> 31 + * @type {number} + */ + + }, { + key: "daysInMonth", + get: function get() { + return daysInMonth(this.year, this.month); + } + /** + * Returns the number of days in this DateTime's year + * @example DateTime.local(2016).daysInYear //=> 366 + * @example DateTime.local(2013).daysInYear //=> 365 + * @type {number} + */ + + }, { + key: "daysInYear", + get: function get() { + return this.isValid ? daysInYear(this.year) : NaN; + } + /** + * Returns the number of weeks in this DateTime's year + * @see https://en.wikipedia.org/wiki/ISO_week_date + * @example DateTime.local(2004).weeksInWeekYear //=> 53 + * @example DateTime.local(2013).weeksInWeekYear //=> 52 + * @type {number} + */ + + }, { + key: "weeksInWeekYear", + get: function get() { + return this.isValid ? weeksInWeekYear(this.weekYear) : NaN; + } + }], [{ + key: "DATE_SHORT", + get: function get() { + return DATE_SHORT; + } + /** + * {@link toLocaleString} format like 'Oct 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_MED", + get: function get() { + return DATE_MED; + } + /** + * {@link toLocaleString} format like 'October 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_FULL", + get: function get() { + return DATE_FULL; + } + /** + * {@link toLocaleString} format like 'Tuesday, October 14, 1983' + * @type {Object} + */ + + }, { + key: "DATE_HUGE", + get: function get() { + return DATE_HUGE; + } + /** + * {@link toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_SIMPLE", + get: function get() { + return TIME_SIMPLE; + } + /** + * {@link toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_SECONDS", + get: function get() { + return TIME_WITH_SECONDS; + } + /** + * {@link toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_SHORT_OFFSET", + get: function get() { + return TIME_WITH_SHORT_OFFSET; + } + /** + * {@link toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "TIME_WITH_LONG_OFFSET", + get: function get() { + return TIME_WITH_LONG_OFFSET; + } + /** + * {@link toLocaleString} format like '09:30', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_SIMPLE", + get: function get() { + return TIME_24_SIMPLE; + } + /** + * {@link toLocaleString} format like '09:30:23', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_SECONDS", + get: function get() { + return TIME_24_WITH_SECONDS; + } + /** + * {@link toLocaleString} format like '09:30:23 EDT', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_SHORT_OFFSET", + get: function get() { + return TIME_24_WITH_SHORT_OFFSET; + } + /** + * {@link toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour. + * @type {Object} + */ + + }, { + key: "TIME_24_WITH_LONG_OFFSET", + get: function get() { + return TIME_24_WITH_LONG_OFFSET; + } + /** + * {@link toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_SHORT", + get: function get() { + return DATETIME_SHORT; + } + /** + * {@link toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_SHORT_WITH_SECONDS", + get: function get() { + return DATETIME_SHORT_WITH_SECONDS; + } + /** + * {@link toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED", + get: function get() { + return DATETIME_MED; + } + /** + * {@link toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED_WITH_SECONDS", + get: function get() { + return DATETIME_MED_WITH_SECONDS; + } + /** + * {@link toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_MED_WITH_WEEKDAY", + get: function get() { + return DATETIME_MED_WITH_WEEKDAY; + } + /** + * {@link toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_FULL", + get: function get() { + return DATETIME_FULL; + } + /** + * {@link toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_FULL_WITH_SECONDS", + get: function get() { + return DATETIME_FULL_WITH_SECONDS; + } + /** + * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_HUGE", + get: function get() { + return DATETIME_HUGE; + } + /** + * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is. + * @type {Object} + */ + + }, { + key: "DATETIME_HUGE_WITH_SECONDS", + get: function get() { + return DATETIME_HUGE_WITH_SECONDS; + } + }]); + + return DateTime; + }(); + function friendlyDateTime(dateTimeish) { + if (DateTime.isDateTime(dateTimeish)) { + return dateTimeish; + } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) { + return DateTime.fromJSDate(dateTimeish); + } else if (dateTimeish && typeof dateTimeish === "object") { + return DateTime.fromObject(dateTimeish); + } else { + throw new InvalidArgumentError("Unknown datetime argument: " + dateTimeish + ", of type " + typeof dateTimeish); + } + } + + exports.DateTime = DateTime; + exports.Duration = Duration; + exports.FixedOffsetZone = FixedOffsetZone; + exports.IANAZone = IANAZone; + exports.Info = Info; + exports.Interval = Interval; + exports.InvalidZone = InvalidZone; + exports.LocalZone = LocalZone; + exports.Settings = Settings; + exports.Zone = Zone; + + return exports; + +}({})); +//# sourceMappingURL=luxon.js.map diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.js.map b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.js.map new file mode 100644 index 0000000000..2b8f42a654 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.js.map @@ -0,0 +1 @@ +{"version":3,"file":"luxon.js","sources":["../../src/errors.js","../../src/impl/formats.js","../../src/impl/util.js","../../src/impl/english.js","../../src/impl/formatter.js","../../src/impl/invalid.js","../../src/zone.js","../../src/zones/localZone.js","../../src/zones/IANAZone.js","../../src/zones/fixedOffsetZone.js","../../src/zones/invalidZone.js","../../src/impl/zoneUtil.js","../../src/settings.js","../../src/impl/locale.js","../../src/impl/regexParser.js","../../src/duration.js","../../src/interval.js","../../src/info.js","../../src/impl/diff.js","../../src/impl/digits.js","../../src/impl/tokenParser.js","../../src/impl/conversions.js","../../src/datetime.js"],"sourcesContent":["// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23', always 24-hour.\n */\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hour12: false\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 EDT', always 24-hour.\n */\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hour12: false,\n timeZoneName: s\n};\n\n/**\n * {@link toLocaleString}; format like '09:30:23 Eastern Daylight Time', always 24-hour.\n */\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hour12: false,\n timeZoneName: l\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n */\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n\n};\n\n/**\n * {@link toLocaleString}; format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n */\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l\n};\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasIntl() {\n try {\n return typeof Intl !== \"undefined\" && Intl.DateTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasFormatToParts() {\n return !isUndefined(Intl.DateTimeFormat.prototype.formatToParts);\n}\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n if (input.toString().length < n) {\n return (\"0\".repeat(n) + input).slice(-n);\n } else {\n return input.toString();\n }\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, towardZero = false) {\n const factor = 10 ** digits,\n rounder = towardZero ? Math.trunc : Math.round;\n return rounder(number * factor) / factor;\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// covert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n return +d;\n}\n\nexport function weeksInWeekYear(weekYear) {\n const p1 =\n (weekYear +\n Math.floor(weekYear / 4) -\n Math.floor(weekYear / 100) +\n Math.floor(weekYear / 400)) %\n 7,\n last = weekYear - 1,\n p2 = (last + Math.floor(last / 4) - Math.floor(last / 100) + Math.floor(last / 400)) % 7;\n return p1 === 4 || p2 === 3 ? 53 : 52;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > 60 ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hour12: false,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\"\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = Object.assign({ timeZoneName: offsetFormat }, intlOpts),\n intl = hasIntl();\n\n if (intl && hasFormatToParts()) {\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find(m => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n } else if (intl) {\n // this probably doesn't work for all locales\n const without = new Intl.DateTimeFormat(locale, intlOpts).format(date),\n included = new Intl.DateTimeFormat(locale, modified).format(date),\n diffed = included.substring(without.length),\n trimmed = diffed.replace(/^[, \\u200e]+/, \"\");\n return trimmed;\n } else {\n return null;\n }\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || Number.isNaN(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer, nonUnitKeys) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n if (nonUnitKeys.indexOf(u) >= 0) continue;\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(offset / 60),\n minutes = Math.abs(offset % 60),\n sign = hours >= 0 && !Object.is(hours, -0) ? \"+\" : \"-\",\n base = `${sign}${Math.abs(hours)}`;\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(Math.abs(hours), 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return minutes > 0 ? `${base}:${minutes}` : base;\n case \"techie\":\n return `${sign}${padStart(Math.abs(hours), 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n\nexport const ianaRegex = /[A-Za-z_+-]{1,256}(:?\\/[A-Za-z_+-]{1,256}(\\/[A-Za-z_+-]{1,256})?)?/;\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\"\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\"\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return monthsNarrow;\n case \"short\":\n return monthsShort;\n case \"long\":\n return monthsLong;\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\"\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return weekdaysNarrow;\n case \"short\":\n return weekdaysShort;\n case \"long\":\n return weekdaysLong;\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return erasNarrow;\n case \"short\":\n return erasShort;\n case \"long\":\n return erasLong;\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"]\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hour12\"\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { hasFormatToParts, padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed, val: currentFull });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: false, val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed, val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.format();\n }\n\n formatDateTime(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.format();\n }\n\n formatDateTimeParts(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.formatToParts();\n }\n\n resolvedOptions(dt, opts = {}) {\n const df = this.loc.dtFormatter(dt, Object.assign({}, this.opts, opts));\n return df.resolvedOptions();\n }\n\n num(n, p = 0) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = Object.assign({}, this.opts);\n\n if (p > 0) {\n opts.padTo = p;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter =\n this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\" && hasFormatToParts(),\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = opts => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hour12: true }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = token => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = length =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = token => {\n // Where possible: http://cldr.unicode.org/translation/date-time#TOC-Stand-Alone-vs.-Format-Styles\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const tokenToField = token => {\n switch (token[0]) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n default:\n return null;\n }\n },\n tokenToString = lildur => token => {\n const mapped = tokenToField(token);\n if (mapped) {\n return this.num(lildur.get(mapped), token.length);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter(t => t));\n return stringifyTokens(tokens, tokenToString(collapsed));\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","/* eslint no-unused-vars: \"off\" */\nimport { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get universal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo, hasIntl } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this Javascript environment.\n * @implements {Zone}\n */\nexport default class LocalZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {LocalZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new LocalZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"local\";\n }\n\n /** @override **/\n get name() {\n if (hasIntl()) {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n } else return \"local\";\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"local\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, ianaRegex, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst matchingRegex = RegExp(`^${ianaRegex.source}$`);\n\nlet dtfCache = {};\nfunction makeDTF(zone) {\n if (!dtfCache[zone]) {\n dtfCache[zone] = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zone,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\"\n });\n }\n return dtfCache[zone];\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n hour: 3,\n minute: 4,\n second: 5\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date),\n filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i],\n pos = typeToPos[type];\n\n if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nlet ianaZoneCache = {};\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n if (!ianaZoneCache[name]) {\n ianaZoneCache[name] = new IANAZone(name);\n }\n return ianaZoneCache[name];\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache = {};\n dtfCache = {};\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Fantasia/Castle\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return !!(s && s.match(matchingRegex));\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n // Etc/GMT+8 -> -480\n /** @ignore */\n static parseGMTOffset(specifier) {\n if (specifier) {\n const match = specifier.match(/^Etc\\/GMT([+-]\\d{1,2})$/i);\n if (match) {\n return -60 * parseInt(match[1]);\n }\n }\n return null;\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /** @override **/\n get type() {\n return \"iana\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n const date = new Date(ts),\n dtf = makeDTF(this.name),\n [year, month, day, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date),\n // work around https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /** @override **/\n get isValid() {\n return this.valid;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /** @override **/\n get type() {\n return \"fixed\";\n }\n\n /** @override **/\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /** @override **/\n offsetName() {\n return this.name;\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /** @override **/\n get universal() {\n return true;\n }\n\n /** @override **/\n offset() {\n return this.fixed;\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get universal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"local\") return defaultZone;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else if ((offset = IANAZone.parseGMTOffset(input)) != null) {\n // handle Etc/GMT-4, which V8 chokes on\n return FixedOffsetZone.instance(offset);\n } else if (IANAZone.isValidSpecifier(lowered)) return IANAZone.create(input);\n else return FixedOffsetZone.parseSpecifier(lowered) || new InvalidZone(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && input.offset && typeof input.offset === \"number\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","import LocalZone from \"./zones/localZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nlet now = () => Date.now(),\n defaultZone = null, // not setting this directly to LocalZone.instance bc loading order issues\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n throwOnInvalid = false;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Get the default time zone to create DateTimes in.\n * @type {string}\n */\n static get defaultZoneName() {\n return Settings.defaultZone.name;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * @type {string}\n */\n static set defaultZoneName(z) {\n if (!z) {\n defaultZone = null;\n } else {\n defaultZone = normalizeZone(z);\n }\n }\n\n /**\n * Get the default time zone object to create DateTimes in. Does not affect existing instances.\n * @type {Zone}\n */\n static get defaultZone() {\n return defaultZone || LocalZone.instance;\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n }\n}\n","import { hasFormatToParts, hasIntl, padStart, roundTo, hasRelative } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport Formatter from \"./formatter.js\";\n\nlet intlDTCache = {};\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache[key];\n if (!dtf) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache[key] = dtf;\n }\n return dtf;\n}\n\nlet intlNumCache = {};\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache[key];\n if (!inf) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache[key] = inf;\n }\n return inf;\n}\n\nlet intlRelCache = {};\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache[key];\n if (!inf) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache[key] = inf;\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else if (hasIntl()) {\n const computedSys = new Intl.DateTimeFormat().resolvedOptions().locale;\n // node sometimes defaults to \"und\". Override that because that is dumb\n sysLocaleCache = !computedSys || computedSys === \"und\" ? \"en-US\" : computedSys;\n return sysLocaleCache;\n } else {\n sysLocaleCache = \"en-US\";\n return sysLocaleCache;\n }\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n const smaller = localeStr.substring(0, uIndex);\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n } catch (e) {\n options = getCachedDTF(smaller).resolvedOptions();\n }\n\n const { numberingSystem, calendar } = options;\n // return the smaller one so that we can append the calendar and numbering overrides to it\n return [smaller, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (hasIntl()) {\n if (outputCalendar || numberingSystem) {\n localeStr += \"-u\";\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n } else {\n return [];\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2016, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, defaultOK, englishFn, intlFn) {\n const mode = loc.listingMode(defaultOK);\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n (hasIntl() && new Intl.DateTimeFormat(loc.intl).resolvedOptions().numberingSystem === \"latn\")\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n if (!forceSimple && hasIntl()) {\n const intlOpts = { useGrouping: false };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.hasIntl = hasIntl();\n\n let z;\n if (dt.zone.universal && this.hasIntl) {\n // Chromium doesn't support fixed-offset zones like Etc/GMT+8 in its formatter,\n // See https://bugs.chromium.org/p/chromium/issues/detail?id=364374.\n // So we have to make do. Two cases:\n // 1. The format options tell us to show the zone. We can't do that, so the best\n // we can do is format the date in UTC.\n // 2. The format options don't tell us to show the zone. Then we can adjust them\n // the time and tell the formatter to show it to us in UTC, so that the time is right\n // and the bad zone doesn't show up.\n // We can clean all this up when Chrome fixes this.\n z = \"UTC\";\n if (opts.timeZoneName) {\n this.dt = dt;\n } else {\n this.dt = dt.offset === 0 ? dt : DateTime.fromMillis(dt.ts + dt.offset * 60 * 1000);\n }\n } else if (dt.zone.type === \"local\") {\n this.dt = dt;\n } else {\n this.dt = dt;\n z = dt.zone.name;\n }\n\n if (this.hasIntl) {\n const intlOpts = Object.assign({}, this.opts);\n if (z) {\n intlOpts.timeZone = z;\n }\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n }\n\n format() {\n if (this.hasIntl) {\n return this.dtf.format(this.dt.toJSDate());\n } else {\n const tokenFormat = English.formatString(this.opts),\n loc = Locale.create(\"en-US\");\n return Formatter.create(loc).formatDateTimeFromString(this.dt, tokenFormat);\n }\n }\n\n formatToParts() {\n if (this.hasIntl && hasFormatToParts()) {\n return this.dtf.formatToParts(this.dt.toJSDate());\n } else {\n // This is kind of a cop out. We actually could do this for English. However, we couldn't do it for intl strings\n // and IMO it's too weird to have an uncanny valley like that\n return [];\n }\n }\n\n resolvedOptions() {\n if (this.hasIntl) {\n return this.dtf.resolvedOptions();\n } else {\n return {\n locale: \"en-US\",\n numberingSystem: \"latn\",\n outputCalendar: \"gregory\"\n };\n }\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = Object.assign({ style: \"long\" }, opts);\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\n/**\n * @private\n */\n\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(opts.locale, opts.numberingSystem, opts.outputCalendar, opts.defaultToEN);\n }\n\n static create(locale, numberingSystem, outputCalendar, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale,\n // the system locale is useful for human readable strings but annoying for parsing/formatting known formats\n localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale()),\n numberingSystemR = numberingSystem || Settings.defaultNumberingSystem,\n outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n return new Locale(localeR, numberingSystemR, outputCalendarR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache = {};\n intlNumCache = {};\n intlRelCache = {};\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar);\n }\n\n constructor(locale, numbering, outputCalendar, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode(defaultOK = true) {\n const intl = hasIntl(),\n hasFTP = intl && hasFormatToParts(),\n isActuallyEn = this.isEnglish(),\n hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n\n if (!hasFTP && !(isActuallyEn && hasNoWeirdness) && !defaultOK) {\n return \"error\";\n } else if (!hasFTP || (isActuallyEn && hasNoWeirdness)) {\n return \"en\";\n } else {\n return \"intl\";\n }\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone(Object.assign({}, alts, { defaultToEN: true }));\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone(Object.assign({}, alts, { defaultToEN: false }));\n }\n\n months(length, format = false, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.months, () => {\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n this.monthsCache[formatStr][length] = mapMonths(dt => this.extract(dt, intl, \"month\"));\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays(dt =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems(defaultOK = true) {\n return listStuff(\n this,\n undefined,\n defaultOK,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hour12: true };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n dt => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length, defaultOK = true) {\n return listStuff(this, length, defaultOK, English.eras, () => {\n const intl = { era: length };\n\n // This is utter bullshit. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map(dt =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find(m => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n (hasIntl() && new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith(\"en-us\"))\n );\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n ianaRegex,\n isUndefined\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return m =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [Object.assign(mergedVals, val), mergedZone || zone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:(Z)|([+-]\\d\\d)(?::?(\\d\\d))?)/,\n isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,9}))?)?)?/,\n isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${offsetRegex.source}?`),\n isoTimeExtensionRegex = RegExp(`(?:T${isoTimeRegex.source})?`),\n isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/,\n isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/,\n isoOrdinalRegex = /(\\d{4})-?(\\d{3})/,\n extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\"),\n extractISOOrdinalData = simpleParse(\"year\", \"ordinal\"),\n sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/, // dumbed-down version of the ISO one\n sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n ),\n sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1)\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hour: int(match, cursor, 0),\n minute: int(match, cursor + 1, 0),\n second: int(match, cursor + 2, 0),\n millisecond: parseMillis(match[cursor + 3])\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO duration parsing\n\nconst isoDuration = /^-?P(?:(?:(-?\\d{1,9})Y)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,9})W)?(?:(-?\\d{1,9})D)?(?:T(?:(-?\\d{1,9})H)?(?:(-?\\d{1,9})M)?(?:(-?\\d{1,9})(?:[.,](-?\\d{1,9}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [\n s,\n yearStr,\n monthStr,\n weekStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr,\n millisecondsStr\n ] = match;\n\n const hasNegativePrefix = s[0] === \"-\";\n\n const maybeNegate = num => (num && hasNegativePrefix ? -num : num);\n\n return [\n {\n years: maybeNegate(parseInteger(yearStr)),\n months: maybeNegate(parseInteger(monthStr)),\n weeks: maybeNegate(parseInteger(weekStr)),\n days: maybeNegate(parseInteger(dayStr)),\n hours: maybeNegate(parseInteger(hourStr)),\n minutes: maybeNegate(parseInteger(minuteStr)),\n seconds: maybeNegate(parseInteger(secondStr)),\n milliseconds: maybeNegate(parseMillis(millisecondsStr))\n }\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr)\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^)]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 = /^(Monday|Tuesday|Wedsday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii = /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset\n);\nconst extractISOOrdinalDataAndTime = combineExtractors(extractISOOrdinalData, extractISOTime);\nconst extractISOTimeAndOffset = combineExtractors(extractISOTime, extractISOOffset);\n\n/**\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDataAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOYmdTimeOffsetAndIANAZone = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeOffsetAndIANAZone],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nconst lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 }\n },\n casualMatrix = Object.assign(\n {\n years: {\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000\n }\n },\n lowOrderMatrix\n ),\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = Object.assign(\n {\n years: {\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000\n }\n },\n lowOrderMatrix\n );\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : Object.assign({}, dur.values, alts.values || {}),\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy\n };\n return new Duration(conf);\n}\n\nfunction antiTrunc(n) {\n return n < 0 ? Math.floor(n) : Math.ceil(n);\n}\n\n// NB: mutates parameters\nfunction convert(matrix, fromMap, fromUnit, toMap, toUnit) {\n const conv = matrix[toUnit][fromUnit],\n raw = fromMap[fromUnit] / conv,\n sameSign = Math.sign(raw) === Math.sign(toMap[toUnit]),\n // ok, so this is wild, but see the matrix in the tests\n added =\n !sameSign && toMap[toUnit] !== 0 && Math.abs(raw) <= 1 ? antiTrunc(raw) : Math.trunc(raw);\n toMap[toUnit] += added;\n fromMap[fromUnit] -= added * conv;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n reverseUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n convert(matrix, vals, previous, vals, current);\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime.plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration.years}, {@link Duration.months}, {@link Duration.weeks}, {@link Duration.days}, {@link Duration.hours}, {@link Duration.minutes}, {@link Duration.seconds}, {@link Duration.milliseconds} accessors.\n * * **Configuration** See {@link Duration.locale} and {@link Duration.numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration.plus}, {@link Duration.minus}, {@link Duration.normalize}, {@link Duration.set}, {@link Duration.reconfigure}, {@link Duration.shiftTo}, and {@link Duration.negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration.as}, {@link Duration.toISO}, {@link Duration.toFormat}, and {@link Duration.toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = accurate ? accurateMatrix : casualMatrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject(Object.assign({ milliseconds: count }, opts));\n }\n\n /**\n * Create a Duration from a Javascript object with keys like 'years' and 'hours.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {string} [obj.locale='en-US'] - the locale to use\n * @param {string} obj.numberingSystem - the numbering system to use\n * @param {string} [obj.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromObject(obj) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit, [\n \"locale\",\n \"numberingSystem\",\n \"conversionAccuracy\",\n \"zone\" // a bit of debt; it's super inconvenient internally not to be able to blindly pass this\n ]),\n loc: Locale.fromObject(obj),\n conversionAccuracy: obj.conversionAccuracy\n });\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n const obj = Object.assign(parsed, opts);\n return Duration.fromObject(obj);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\"\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * The duration will be converted to the set of units in the format string using {@link Duration.shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = Object.assign({}, opts, {\n floor: opts.round !== false && opts.floor !== false\n });\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a Javascript object with this Duration's values.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = Object.assign({}, this.values);\n\n if (opts.includeConfig) {\n base.conversionAccuracy = this.conversionAccuracy;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n valueOf() {\n return this.as(\"milliseconds\");\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = friendlyDuration(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = friendlyDuration(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnit((x, u) => u === \"hour\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).years //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).months //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).days //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = Object.assign(this.values, normalizeObject(values, Duration.normalizeUnit, []));\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem }),\n opts = { loc };\n\n if (conversionAccuracy) {\n opts.conversionAccuracy = conversionAccuracy;\n }\n\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map(u => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n normalizeValues(this.matrix, vals);\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = own - i; // we'd like to absorb these fractions in another unit\n\n // plus anything further down the chain that should be rolled up in to this\n for (const down in vals) {\n if (orderedUnits.indexOf(down) > orderedUnits.indexOf(k)) {\n convert(this.matrix, vals, down, built, k);\n }\n }\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n return clone(this, { values: built }, true).normalize();\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n for (const u of orderedUnits) {\n if (this.values[u] !== other.values[u]) {\n return false;\n }\n }\n return true;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDuration(durationish) {\n if (isNumber(durationish)) {\n return Duration.fromMillis(durationish);\n } else if (Duration.isDuration(durationish)) {\n return durationish;\n } else if (typeof durationish === \"object\") {\n return Duration.fromObject(durationish);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationish} of type ${typeof durationish}`\n );\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration, { friendlyDuration } from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link fromDateTimes}, {@link after}, {@link before}, or {@link fromISO}.\n * * **Accessors** Use {@link start} and {@link end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link count}, {@link length}, {@link hasSame}, {@link contains}, {@link isAfter}, or {@link isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link set}, {@link splitAt}, {@link splitBy}, {@link divideEqually}, {@link merge}, {@link xor}, {@link union}, {@link intersection}, or {@link difference}.\n * * **Comparison** To compare this Interval to another one, use {@link equals}, {@link overlaps}, {@link abutsStart}, {@link abutsEnd}, {@link engulfs}\n * * **Output** To convert the Interval into other representations, see {@link toString}, {@link toISO}, {@link toISODate}, {@link toISOTime}, {@link toFormat}, and {@link toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = friendlyDuration(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = friendlyDuration(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `/`, `/`, and `/` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime.fromISO} and optionally {@link Duration.fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n const start = DateTime.fromISO(s, opts),\n end = DateTime.fromISO(e, opts);\n\n if (start.isValid && end.isValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (start.isValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (end.isValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @return {number}\n */\n count(unit = \"milliseconds\") {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit),\n end = this.end.startOf(unit);\n return Math.floor(end.diff(start, unit).get(unit)) + 1;\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...[DateTime]} dateTimes - the unit of time to count.\n * @return {[Interval]}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter(d => this.contains(d))\n .sort(),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {[Interval]}\n */\n splitBy(duration) {\n const dur = friendlyDuration(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n added,\n next;\n\n const results = [];\n while (s < this.e) {\n added = s.plus(dur);\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {[Interval]}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Return whether this Interval engulfs the start and end of the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s > e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into a equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * @param {[Interval]} intervals\n * @return {[Interval]}\n */\n static merge(intervals) {\n const [found, final] = intervals.sort((a, b) => a.s - b.s).reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {[Interval]} intervals\n * @return {[Interval]}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map(i => [{ time: i.s, type: \"s\" }, { time: i.e, type: \"e\" }]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {[Interval]}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map(i => this.intersection(i))\n .filter(i => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime.toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime.toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format string.\n * @param {string} dateFormat - the format string. This string formats the start and end time. See {@link DateTime.toFormat} for details.\n * @param {Object} opts - options\n * @param {string} [opts.separator = ' – '] - a separator to place between the start and end representations\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasFormatToParts, hasIntl, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.local()\n .setZone(zone)\n .set({ month: 12 });\n\n return !zone.universal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidSpecifier(zone) && IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone.isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {[string]}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, outputCalendar = \"gregory\" } = {}\n ) {\n return Locale.create(locale, numberingSystem, outputCalendar).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {[string]}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, outputCalendar = \"gregory\" } = {}\n ) {\n return Locale.create(locale, numberingSystem, outputCalendar).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {[string]}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null } = {}) {\n return Locale.create(locale, numberingSystem, null).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @return {[string]}\n */\n static weekdaysFormat(length = \"long\", { locale = null, numberingSystem = null } = {}) {\n return Locale.create(locale, numberingSystem, null).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {[string]}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {[string]}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, timezone support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `zones`: whether this environment supports IANA timezones\n * * `intlTokens`: whether this environment supports internationalized token-based formatting/parsing\n * * `intl`: whether this environment supports general internationalization\n * * `relative`: whether this environment supports relative time formatting\n * @example Info.features() //=> { intl: true, intlTokens: false, zones: true, relative: false }\n * @return {Object}\n */\n static features() {\n let intl = false,\n intlTokens = false,\n zones = false,\n relative = false;\n\n if (hasIntl()) {\n intl = true;\n intlTokens = hasFormatToParts();\n relative = hasRelative();\n\n try {\n zones =\n new Intl.DateTimeFormat(\"en\", { timeZone: \"America/New_York\" }).resolvedOptions()\n .timeZone === \"America/New_York\";\n } catch (e) {\n zones = false;\n }\n }\n\n return { intl, intlTokens, zones, relative };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = dt =>\n dt\n .toUTC(0, { keepLocalTime: true })\n .startOf(\"day\")\n .valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n }\n ],\n [\"days\", dayDiff]\n ];\n\n const results = {};\n let lowestOrder, highWater;\n\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n let delta = differ(cursor, later);\n highWater = cursor.plus({ [unit]: delta });\n\n if (highWater > later) {\n cursor = cursor.plus({ [unit]: delta - 1 });\n delta -= 1;\n } else {\n cursor = highWater;\n }\n\n results[unit] = delta;\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function(earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n u => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(Object.assign(results, opts));\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\"\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881]\n};\n\n// eslint-disable-next-line\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n return new RegExp(`${numberingSystems[numberingSystem || \"latn\"]}${append}`);\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = i => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n return s.replace(/\\./, \"\\\\.?\");\n}\n\nfunction stripInsensitivities(s) {\n return s.replace(/\\./, \"\").toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex(i => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n // eslint-disable-next-line no-useless-escape\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = t => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = t => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\", false), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\", false), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true, false), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true, false), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false, false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false, false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false, false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false, false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true, false), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true, false), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\"\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\"\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\"\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\"\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour: {\n numeric: \"h\",\n \"2-digit\": \"hh\"\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\"\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\"\n }\n};\n\nfunction tokenForPart(part, locale, formatOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n return {\n literal: true,\n val: value\n };\n }\n\n const style = formatOpts[type];\n\n let val = partTypeStyleToTokenVal[type];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map(u => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = token => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone;\n if (!isUndefined(matches.Z)) {\n zone = new FixedOffsetZone(matches.Z);\n } else if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n } else {\n zone = null;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n\n if (!formatOpts) {\n return token;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const parts = formatter.formatDateTimeParts(getDummyDateTime());\n\n const tokens = parts.map(p => tokenForPart(p, locale, formatOpts));\n\n if (tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nfunction expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map(t => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport function explainFromTokens(locale, input, format) {\n const tokens = expandMacroTokens(Formatter.parseFormat(format), locale),\n units = tokens.map(t => unitForToken(t, locale)),\n disqualifyingUnit = units.find(t => t.invalidReason);\n\n if (disqualifyingUnit) {\n return { input, tokens, invalidReason: disqualifyingUnit.invalidReason };\n } else {\n const [regexString, handlers] = buildRegex(units),\n regex = RegExp(regexString, \"i\"),\n [rawMatches, matches] = match(input, regex, handlers),\n [result, zone] = matches ? dateTimeFromMatches(matches) : [null, null];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return { input, tokens, regex, rawMatches, matches, result, zone };\n }\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, invalidReason];\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nfunction dayOfWeek(year, month, day) {\n const js = new Date(Date.UTC(year, month - 1, day)).getUTCDay();\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex(i => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = dayOfWeek(year, month, day);\n\n let weekNumber = Math.floor((ordinal - weekday + 10) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear);\n } else if (weekNumber > weeksInWeekYear(year)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return Object.assign({ weekYear, weekNumber, weekday }, timeObject(gregObj));\n}\n\nexport function weekToGregorian(weekData) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = dayOfWeek(weekYear, 1, 4),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 3,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n\n return Object.assign({ year, month, day }, timeObject(weekData));\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData,\n ordinal = computeOrdinal(year, month, day);\n\n return Object.assign({ year, ordinal }, timeObject(gregData));\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData,\n { month, day } = uncomputeOrdinal(year, ordinal);\n\n return Object.assign({ year, month, day }, timeObject(ordinalData));\n}\n\nexport function hasInvalidWeekData(obj) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(obj.weekNumber, 1, weeksInWeekYear(obj.weekYear)),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.week);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","import Duration, { friendlyDuration } from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport { parseFromTokens, explainFromTokens } from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid\n };\n return new DateTime(Object.assign({}, current, alts, { old: current }));\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds()\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const keys = Object.keys(dur.values);\n if (keys.indexOf(\"milliseconds\") === -1) {\n keys.push(\"milliseconds\");\n }\n\n dur = dur.shiftTo(...keys);\n\n const oPre = inst.o,\n year = inst.c.year + dur.years,\n month = inst.c.month + dur.months + dur.quarters * 3,\n c = Object.assign({}, inst.c, {\n year,\n month,\n day: Math.min(inst.c.day, daysInMonth(year, month)) + dur.days + dur.weeks * 7\n }),\n millisToAdd = Duration.fromObject({\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text) {\n const { setZone, zone } = opts;\n if (parsed && Object.keys(parsed).length !== 0) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(\n Object.assign(parsed, opts, {\n zone: interpretationZone,\n // setZone is a valid option in the calling methods, but not in fromObject\n setZone: undefined\n })\n );\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\n// technical time formats (e.g. the time part of ISO 8601), take some options\n// and this commonizes their handling\nfunction toTechTimeFormat(\n dt,\n {\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset,\n includeZone = false,\n spaceZone = false,\n format = \"extended\"\n }\n) {\n let fmt = format === \"basic\" ? \"HHmm\" : \"HH:mm\";\n\n if (!suppressSeconds || dt.second !== 0 || dt.millisecond !== 0) {\n fmt += format === \"basic\" ? \"ss\" : \":ss\";\n if (!suppressMilliseconds || dt.millisecond !== 0) {\n fmt += \".SSS\";\n }\n }\n\n if ((includeZone || includeOffset) && spaceZone) {\n fmt += \" \";\n }\n\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += format === \"basic\" ? \"ZZZ\" : \"ZZ\";\n }\n\n return toTechFormat(dt, fmt);\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\"\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\"\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, zone) {\n // assume we have the higher-order units\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const tsNow = Settings.now(),\n offsetProvis = zone.offset(tsNow),\n [ts, o] = objToTS(obj, offsetProvis, zone);\n\n return new DateTime({\n ts,\n zone,\n o\n });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, true);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = unit => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end\n .startOf(unit)\n .diff(start.startOf(unit), unit)\n .get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(0, opts.units[opts.units.length - 1]);\n}\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link local}, {@link utc}, and (most flexibly) {@link fromObject}. To create one from a standard string format, use {@link fromISO}, {@link fromHTTP}, and {@link fromRFC2822}. To create one from a custom string format, use {@link fromFormat}. To create one from a native JS date, use {@link fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link toObject}), use the {@link year}, {@link month},\n * {@link day}, {@link hour}, {@link minute}, {@link second}, {@link millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link weekYear}, {@link weekNumber}, and {@link weekday} accessors.\n * * **Configuration** See the {@link locale} and {@link numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link set}, {@link reconfigure}, {@link setZone}, {@link setLocale}, {@link plus}, {@link minus}, {@link endOf}, {@link startOf}, {@link toUTC}, and {@link toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link toRelative}, {@link toRelativeCalendar}, {@link toJSON}, {@link toISO}, {@link toHTTP}, {@link toObject}, {@link toRFC2822}, {@link toString}, {@link toLocaleString}, {@link toFormat}, {@link toMillis} and {@link toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n const ot = zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12) //~> 2017-03-12T00:00:00\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local(year, month, day, hour, minute, second, millisecond) {\n if (isUndefined(year)) {\n return new DateTime({ ts: Settings.now() });\n } else {\n return quickDT(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n },\n Settings.defaultZone\n );\n }\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765Z\n * @return {DateTime}\n */\n static utc(year, month, day, hour, minute, second, millisecond) {\n if (isUndefined(year)) {\n return new DateTime({\n ts: Settings.now(),\n zone: FixedOffsetZone.utcInstance\n });\n } else {\n return quickDT(\n {\n year,\n month,\n day,\n hour,\n minute,\n second,\n millisecond\n },\n FixedOffsetZone.utcInstance\n );\n }\n }\n\n /**\n * Create a DateTime from a Javascript Date object. Uses the default zone.\n * @param {Date} date - a Javascript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options)\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options)\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options)\n });\n }\n }\n\n /**\n * Create a DateTime from a Javascript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {string|Zone} [obj.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [obj.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} obj.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} obj.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6, zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @return {DateTime}\n */\n static fromObject(obj) {\n const zoneToUse = normalizeZone(obj.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const tsNow = Settings.now(),\n offsetProvis = zoneToUse.offset(tsNow),\n normalized = normalizeObject(obj, normalizeUnit, [\n \"zone\",\n \"locale\",\n \"outputCalendar\",\n \"numberingSystem\"\n ]),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber,\n loc = Locale.fromObject(obj);\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @see https://moment.github.io/luxon/docs/manual/parsing.html#table-of-tokens\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true\n }),\n [vals, parsedZone, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is a DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locale: this.locale })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locale: this.locale })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locale: this.locale })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locale: this.locale })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.local().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.universal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1 }).offset || this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOpts(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link plus}. You may wish to use {@link toLocal} and {@link toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link reconfigure} and {@link setZone}.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnit, []),\n settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday);\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(Object.assign(gregorianToWeek(this.c), normalized));\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian(Object.assign(gregorianToOrdinal(this.c), normalized));\n } else {\n mixed = Object.assign(this.toObject(), normalized);\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.local().plus(123) //~> in 123 milliseconds\n * @example DateTime.local().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.local().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.local().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.local().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.local().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = friendlyDuration(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = friendlyDuration(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit) {\n if (!this.isValid) return this;\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n o.weekday = 1;\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'month', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @see https://moment.github.io/luxon/docs/manual/formatting.html#table-of-tokens\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options\n * @example DateTime.local().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.local().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.local().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.local().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param opts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @example DateTime.local().toLocaleString(); //=> 4/20/2017\n * @example DateTime.local().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.local().toLocaleString({ locale: 'en-gb' }); //=> '20/04/2017'\n * @example DateTime.local().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.local().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.local().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.local().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.local().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.local().toLocaleString({ hour: '2-digit', minute: '2-digit', hour12: false }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(opts = Formats.DATE_SHORT) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.local().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.local().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.local().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.local().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @return {string}\n */\n toISO(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toISODate(opts)}T${this.toISOTime(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @return {string}\n */\n toISODate({ format = \"extended\" } = {}) {\n let fmt = format === \"basic\" ? \"yyyyMMdd\" : \"yyyy-MM-dd\";\n if (this.year > 9999) {\n fmt = \"+\" + fmt;\n }\n\n return toTechFormat(this, fmt);\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n format = \"extended\"\n } = {}) {\n return toTechTimeFormat(this, {\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n format\n });\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime, always in UTC\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string}\n */\n toSQLDate() {\n return toTechFormat(this, \"yyyy-MM-dd\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.local().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.local().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.local().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false } = {}) {\n return toTechTimeFormat(this, {\n includeOffset,\n includeZone,\n spaceZone: true\n });\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a Javascript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.local().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = Object.assign({}, this.c);\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a Javascript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\n this.invalid || otherDateTime.invalid,\n \"created by diffing an invalid DateTime\"\n );\n }\n\n const durOpts = Object.assign(\n { locale: this.locale, numberingSystem: this.numberingSystem },\n opts\n );\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.local(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @example DateTime.local().hasSame(otherDT, 'day'); //~> true if both the same calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit) {\n if (!this.isValid) return false;\n if (unit === \"millisecond\") {\n return this.valueOf() === otherDateTime.valueOf();\n } else {\n const inputMs = otherDateTime.valueOf();\n return this.startOf(unit) <= inputMs && inputMs <= this.endOf(unit);\n }\n }\n\n /**\n * Equality check\n * Two DateTimes are equal iff they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds down by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.local()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {boolean} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.local().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.local().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.local().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.local().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.local().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.local().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({ zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n return diffRelative(\n base,\n this.plus(padding),\n Object.assign(options, {\n numeric: \"always\",\n units: [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"]\n })\n );\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.local()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.local().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.local().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.local().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.local().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(\n options.base || DateTime.fromObject({ zone: this.zone }),\n this,\n Object.assign(options, {\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true\n })\n );\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, i => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, i => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n"],"names":["LuxonError","Error","InvalidDateTimeError","reason","toMessage","InvalidIntervalError","InvalidDurationError","ConflictingSpecificationError","InvalidUnitError","unit","InvalidArgumentError","ZoneIsAbstractError","n","s","l","DATE_SHORT","year","month","day","DATE_MED","DATE_FULL","DATE_HUGE","weekday","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hour12","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","isUndefined","o","isNumber","isInteger","isString","isDate","Object","prototype","toString","call","hasIntl","Intl","DateTimeFormat","e","hasFormatToParts","formatToParts","hasRelative","RelativeTimeFormat","maybeArray","thing","Array","isArray","bestBy","arr","by","compare","length","undefined","reduce","best","next","pair","pick","obj","keys","a","k","hasOwnProperty","prop","integerBetween","bottom","top","floorMod","x","Math","floor","padStart","input","repeat","slice","parseInteger","string","parseInt","parseMillis","fraction","f","parseFloat","roundTo","number","digits","towardZero","factor","rounder","trunc","round","isLeapYear","daysInYear","daysInMonth","modMonth","modYear","objToLocalTS","d","Date","UTC","millisecond","setUTCFullYear","getUTCFullYear","weeksInWeekYear","weekYear","p1","last","p2","untruncateYear","parseZoneInfo","ts","offsetFormat","locale","timeZone","date","intlOpts","modified","assign","intl","parsed","find","m","type","toLowerCase","value","without","format","included","diffed","substring","trimmed","replace","signedOffset","offHourStr","offMinuteStr","offHour","Number","isNaN","offMin","offMinSigned","is","asNumber","numericValue","normalizeObject","normalizer","nonUnitKeys","normalized","u","indexOf","v","formatOffset","offset","hours","minutes","abs","sign","base","RangeError","timeObject","ianaRegex","stringify","JSON","sort","monthsLong","monthsShort","monthsNarrow","months","weekdaysLong","weekdaysShort","weekdaysNarrow","weekdays","meridiems","erasLong","erasShort","erasNarrow","eras","meridiemForDateTime","dt","weekdayForDateTime","monthForDateTime","eraForDateTime","formatRelativeTime","count","numeric","narrow","units","years","quarters","weeks","days","seconds","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","formatString","knownFormat","filtered","key","dateTimeHuge","Formats","stringifyTokens","splits","tokenToString","token","literal","val","macroTokenToFormatOpts","D","DD","DDD","DDDD","t","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","Formatter","create","opts","parseFormat","fmt","current","currentFull","bracketed","i","c","charAt","push","formatOpts","loc","systemLoc","formatWithSystemDefault","redefaultToSystem","df","dtFormatter","formatDateTime","formatDateTimeParts","resolvedOptions","num","p","forceSimple","padTo","numberFormatter","formatDateTimeFromString","knownEnglish","listingMode","useDateTimeFormatter","outputCalendar","extract","isOffsetFixed","allowZ","isValid","zone","meridiem","English","standalone","maybeMacro","era","offsetName","zoneName","weekNumber","ordinal","quarter","formatDurationFromString","dur","tokenToField","lildur","mapped","get","tokens","realTokens","found","concat","collapsed","shiftTo","map","filter","Invalid","explanation","Zone","equals","otherZone","singleton","LocalZone","getTimezoneOffset","matchingRegex","RegExp","source","dtfCache","makeDTF","typeToPos","hackyOffset","dtf","formatted","exec","fMonth","fDay","fYear","fHour","fMinute","fSecond","partsOffset","filled","pos","ianaZoneCache","IANAZone","name","resetCache","isValidSpecifier","match","isValidZone","parseGMTOffset","specifier","valid","adjustedHour","asUTC","asTS","over","FixedOffsetZone","instance","utcInstance","parseSpecifier","r","fixed","InvalidZone","NaN","normalizeZone","defaultZone","lowered","now","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","throwOnInvalid","Settings","resetCaches","Locale","z","numberingSystem","intlDTCache","getCachedDTF","locString","intlNumCache","getCachedINF","inf","NumberFormat","intlRelCache","getCachedRTF","cacheKeyOpts","sysLocaleCache","systemLocale","computedSys","parseLocaleString","localeStr","uIndex","options","smaller","calendar","intlConfigString","mapMonths","ms","DateTime","utc","mapWeekdays","listStuff","defaultOK","englishFn","intlFn","mode","supportsFastNumbers","startsWith","PolyNumberFormatter","useGrouping","minimumIntegerDigits","PolyDateFormatter","universal","fromMillis","toJSDate","tokenFormat","PolyRelFormatter","isEnglish","style","rtf","fromOpts","defaultToEN","specifiedLocale","localeR","numberingSystemR","outputCalendarR","fromObject","numbering","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","weekdaysCache","monthsCache","meridiemCache","eraCache","fastNumbersCached","hasFTP","isActuallyEn","hasNoWeirdness","clone","alts","getOwnPropertyNames","redefaultToEN","formatStr","field","results","matching","fastNumbers","relFormatter","other","combineRegexes","regexes","full","combineExtractors","extractors","ex","mergedVals","mergedZone","cursor","parse","patterns","regex","extractor","simpleParse","ret","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","isoYmdRegex","isoWeekRegex","isoOrdinalRegex","extractISOWeekData","extractISOOrdinalData","sqlYmdRegex","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOYmd","item","extractISOTime","extractISOOffset","local","fullOffset","extractIANAZone","isoDuration","extractISODuration","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","hasNegativePrefix","maybeNegate","milliseconds","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","result","rfc2822","extractRFC2822","obsOffset","milOffset","preprocessRFC2822","trim","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDataAndTime","extractISOTimeAndOffset","parseISODate","parseRFC2822Date","parseHTTPDate","parseISODuration","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOYmdTimeOffsetAndIANAZone","extractISOTimeOffsetAndIANAZone","parseSQL","INVALID","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","reverse","clear","conf","values","conversionAccuracy","Duration","antiTrunc","ceil","convert","matrix","fromMap","fromUnit","toMap","toUnit","conv","raw","sameSign","added","normalizeValues","vals","previous","config","accurate","invalid","isLuxonDuration","normalizeUnit","fromISO","text","week","isDuration","toFormat","fmtOpts","toObject","includeConfig","toISO","toJSON","valueOf","as","plus","duration","friendlyDuration","minus","negate","mapUnits","fn","set","mixed","reconfigure","normalize","built","accumulated","lastUnit","own","ak","down","negated","durationish","validateStartEnd","start","end","Interval","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","after","before","split","isInterval","toDuration","startOf","diff","hasSame","isEmpty","isAfter","dateTime","isBefore","contains","splitAt","dateTimes","sorted","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","merge","intervals","b","sofar","final","xor","currentCount","ends","time","flattened","difference","toISODate","toISOTime","dateFormat","separator","invalidReason","mapEndpoints","mapFn","Info","hasDST","proto","setZone","isValidIANAZone","monthsFormat","weekdaysFormat","features","intlTokens","zones","relative","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","highOrderDiffs","differs","lowestOrder","highWater","differ","delta","remainingMillis","lowerOrderUnits","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","parseDigits","str","code","charCodeAt","search","min","max","digitRegex","append","MISSING_FTP","intUnit","post","deser","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","join","findIndex","groups","h","simple","escapeToken","unitForToken","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","partTypeStyleToTokenVal","short","long","dayperiod","dayPeriod","tokenForPart","part","buildRegex","re","handlers","matches","all","matchIndex","dateTimeFromMatches","toField","Z","q","M","G","y","S","dummyDateTimeCache","getDummyDateTime","maybeExpandMacroToken","formatter","parts","includes","expandMacroTokens","explainFromTokens","disqualifyingUnit","regexString","rawMatches","parseFromTokens","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","js","getUTCDay","computeOrdinal","uncomputeOrdinal","table","month0","gregorianToWeek","gregObj","weekToGregorian","weekData","weekdayOfJan4","yearInDays","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","hasInvalidWeekData","validYear","validWeek","validWeekday","hasInvalidOrdinalData","validOrdinal","hasInvalidGregorianData","validMonth","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","MAX_DATE","unsupportedZone","possiblyCachedWeekData","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","toTechTimeFormat","suppressSeconds","suppressMilliseconds","includeOffset","includeZone","spaceZone","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","quickDT","tsNow","offsetProvis","diffRelative","calendary","unchanged","ot","_zone","isLuxonDateTime","fromJSDate","zoneToUse","fromSeconds","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","useWeekData","defaultValues","objNow","foundFirst","higherOrderInvalid","gregorian","tsFinal","offsetFinal","fromRFC2822","fromHTTP","fromFormat","localeToUse","fromString","fromSQL","isDateTime","resolvedLocaleOpts","toLocal","keepCalendarTime","newTS","offsetGuess","asObj","setLocale","settingWeekStuff","normalizedUnit","endOf","toLocaleString","toLocaleParts","toISOWeekDate","toRFC2822","toHTTP","toSQLDate","toSQLTime","toSQL","toMillis","toSeconds","toBSON","otherDateTime","durOpts","otherIsLater","diffNow","until","inputMs","toRelative","padding","toRelativeCalendar","every","fromFormatExplain","fromStringExplain","dateTimeish"],"mappings":"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"} \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.min.js b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.min.js new file mode 100644 index 0000000000..03f3699b4c --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.min.js @@ -0,0 +1 @@ +var luxon=function(e){"use strict";function r(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[t++]}};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var n=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t}(t(Error)),l=function(t){function e(e){return t.call(this,"Invalid DateTime: "+e.toMessage())||this}return o(e,t),e}(n),f=function(t){function e(e){return t.call(this,"Invalid Interval: "+e.toMessage())||this}return o(e,t),e}(n),d=function(t){function e(e){return t.call(this,"Invalid Duration: "+e.toMessage())||this}return o(e,t),e}(n),L=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t}(n),h=function(t){function e(e){return t.call(this,"Invalid unit "+e)||this}return o(e,t),e}(n),m=function(e){function t(){return e.apply(this,arguments)||this}return o(t,e),t}(n),y=function(e){function t(){return e.call(this,"Zone is an abstract class")||this}return o(t,e),t}(n),v="numeric",g="short",p="long",w={year:v,month:v,day:v},k={year:v,month:g,day:v},b={year:v,month:p,day:v},O={year:v,month:p,day:v,weekday:p},S={hour:v,minute:v},T={hour:v,minute:v,second:v},M={hour:v,minute:v,second:v,timeZoneName:g},N={hour:v,minute:v,second:v,timeZoneName:p},D={hour:v,minute:v,hour12:!1},E={hour:v,minute:v,second:v,hour12:!1},x={hour:v,minute:v,second:v,hour12:!1,timeZoneName:g},F={hour:v,minute:v,second:v,hour12:!1,timeZoneName:p},Z={year:v,month:v,day:v,hour:v,minute:v},C={year:v,month:v,day:v,hour:v,minute:v,second:v},j={year:v,month:g,day:v,hour:v,minute:v},A={year:v,month:g,day:v,hour:v,minute:v,second:v},z={year:v,month:g,day:v,weekday:g,hour:v,minute:v},_={year:v,month:p,day:v,hour:v,minute:v,timeZoneName:g},q={year:v,month:p,day:v,hour:v,minute:v,second:v,timeZoneName:g},H={year:v,month:p,day:v,weekday:p,hour:v,minute:v,timeZoneName:p},U={year:v,month:p,day:v,weekday:p,hour:v,minute:v,second:v,timeZoneName:p};function R(e){return void 0===e}function W(e){return"number"==typeof e}function P(e){return"number"==typeof e&&e%1==0}function I(){try{return"undefined"!=typeof Intl&&Intl.DateTimeFormat}catch(e){return!1}}function J(){return!R(Intl.DateTimeFormat.prototype.formatToParts)}function Y(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(e){return!1}}function G(e,r,i){if(0!==e.length)return e.reduce(function(e,t){var n=[r(t),t];return e&&i(e[0],n[0])===e[0]?e:n},null)[1]}function $(n,e){return e.reduce(function(e,t){return e[t]=n[t],e},{})}function B(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Q(e,t,n){return P(e)&&t<=e&&e<=n}function K(e,t){return void 0===t&&(t=2),e.toString().lengthen.indexOf(c)&&rn(this.matrix,a,h,i,c)}else W(a[c])&&(o[c]=a[c])}for(var m in o)0!==o[m]&&(i[r]+=m===r?o[m]:o[m]/this.matrix[r][m]);return nn(this,{values:i},!0).normalize()},e.negate=function(){if(!this.isValid)return this;for(var e={},t=0,n=Object.keys(this.values);te},e.isBefore=function(e){return!!this.isValid&&this.e<=e},e.contains=function(e){return!!this.isValid&&(this.s<=e&&this.e>e)},e.set=function(e){var t=void 0===e?{}:e,n=t.start,r=t.end;return this.isValid?l.fromDateTimes(n||this.s,r||this.e):this},e.splitAt=function(){var t=this;if(!this.isValid)return[];for(var e=arguments.length,n=new Array(e),r=0;r+this.e?this.e:s;o.push(l.fromDateTimes(a,c)),a=c,u+=1}return o},e.splitBy=function(e){var t=un(e);if(!this.isValid||!t.isValid||0===t.as("milliseconds"))return[];for(var n,r,i=this.s,o=[];i+this.e?this.e:n,o.push(l.fromDateTimes(i,r)),i=r;return o},e.divideEqually=function(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]},e.overlaps=function(e){return this.e>e.s&&this.s=e.e)},e.equals=function(e){return!(!this.isValid||!e.isValid)&&(this.s.equals(e.s)&&this.e.equals(e.e))},e.intersection=function(e){if(!this.isValid)return this;var t=this.s>e.s?this.s:e.s,n=this.ee.e?this.e:e.e;return l.fromDateTimes(t,n)},l.merge=function(e){var t=e.sort(function(e,t){return e.s-t.s}).reduce(function(e,t){var n=e[0],r=e[1];return r?r.overlaps(t)||r.abutsStart(t)?[n,r.union(t)]:[n.concat([r]),t]:[n,t]},[[],null]),n=t[0],r=t[1];return r&&n.push(r),n},l.xor=function(e){for(var t,n,r=null,i=0,o=[],a=e.map(function(e){return[{time:e.s,type:"s"},{time:e.e,type:"e"}]}),u=V((t=Array.prototype).concat.apply(t,a).sort(function(e,t){return e.time-t.time}));!(n=u()).done;)var s=n.value,r=1===(i+="s"===s.type?1:-1)?s.time:(r&&+r!=+s.time&&o.push(l.fromDateTimes(r,s.time)),null);return l.merge(o)},e.difference=function(){for(var t=this,e=arguments.length,n=new Array(e),r=0;rae(n)?(t=n+1,u=1):t=n,Object.assign({weekYear:t,weekNumber:u,weekday:a},he(e))}function jn(e){var t,n=e.weekYear,r=e.weekNumber,i=e.weekday,o=xn(n,1,4),a=re(n),u=7*r+i-o-3;u<1?u+=re(t=n-1):athis.valueOf(),u=dn(a?this:e,a?e:this,o,i);return a?u.negate():u},e.diffNow=function(e,t){return void 0===e&&(e="milliseconds"),void 0===t&&(t={}),this.diff(I.local(),e,t)},e.until=function(e){return this.isValid?cn.fromDateTimes(this,e):this},e.hasSame=function(e,t){if(!this.isValid)return!1;if("millisecond"===t)return this.valueOf()===e.valueOf();var n=e.valueOf();return this.startOf(t)<=n&&n<=this.endOf(t)},e.equals=function(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)},e.toRelative=function(e){if(void 0===e&&(e={}),!this.isValid)return null;var t=e.base||I.fromObject({zone:this.zone}),n=e.padding?thisthis.set({month:1}).offset||this.offset>this.set({month:5}).offset)}},{key:"isInLeapYear",get:function(){return ne(this.year)}},{key:"daysInMonth",get:function(){return ie(this.year,this.month)}},{key:"daysInYear",get:function(){return this.isValid?re(this.year):NaN}},{key:"weeksInWeekYear",get:function(){return this.isValid?ae(this.weekYear):NaN}}],[{key:"DATE_SHORT",get:function(){return w}},{key:"DATE_MED",get:function(){return k}},{key:"DATE_FULL",get:function(){return b}},{key:"DATE_HUGE",get:function(){return O}},{key:"TIME_SIMPLE",get:function(){return S}},{key:"TIME_WITH_SECONDS",get:function(){return T}},{key:"TIME_WITH_SHORT_OFFSET",get:function(){return M}},{key:"TIME_WITH_LONG_OFFSET",get:function(){return N}},{key:"TIME_24_SIMPLE",get:function(){return D}},{key:"TIME_24_WITH_SECONDS",get:function(){return E}},{key:"TIME_24_WITH_SHORT_OFFSET",get:function(){return x}},{key:"TIME_24_WITH_LONG_OFFSET",get:function(){return F}},{key:"DATETIME_SHORT",get:function(){return Z}},{key:"DATETIME_SHORT_WITH_SECONDS",get:function(){return C}},{key:"DATETIME_MED",get:function(){return j}},{key:"DATETIME_MED_WITH_SECONDS",get:function(){return A}},{key:"DATETIME_MED_WITH_WEEKDAY",get:function(){return z}},{key:"DATETIME_FULL",get:function(){return _}},{key:"DATETIME_FULL_WITH_SECONDS",get:function(){return q}},{key:"DATETIME_HUGE",get:function(){return H}},{key:"DATETIME_HUGE_WITH_SECONDS",get:function(){return U}}]),I}();function sr(e){if(ur.isDateTime(e))return e;if(e&&e.valueOf&&W(e.valueOf()))return ur.fromJSDate(e);if(e&&"object"==typeof e)return ur.fromObject(e);throw new m("Unknown datetime argument: "+e+", of type "+typeof e)}return e.DateTime=ur,e.Duration=an,e.FixedOffsetZone=Ue,e.IANAZone=qe,e.Info=ln,e.Interval=cn,e.InvalidZone=Re,e.LocalZone=Ce,e.Settings=Qe,e.Zone=Fe,e}({}); \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.min.js.map b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.min.js.map new file mode 100644 index 0000000000..09ddafd1b2 --- /dev/null +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/wwwroot/libs/luxon/luxon.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"build/global/luxon.js","sources":["0"],"names":["luxon","exports","_defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","_createClass","Constructor","protoProps","staticProps","prototype","_inheritsLoose","subClass","superClass","create","constructor","__proto__","_getPrototypeOf","o","setPrototypeOf","getPrototypeOf","_setPrototypeOf","p","_construct","Parent","args","Class","Reflect","construct","sham","Proxy","Date","toString","call","e","_isNativeReflectConstruct","a","push","apply","instance","Function","bind","arguments","_wrapNativeSuper","_cache","Map","undefined","fn","indexOf","TypeError","has","get","set","Wrapper","this","value","_arrayLikeToArray","arr","len","arr2","Array","_createForOfIteratorHelperLoose","Symbol","iterator","next","isArray","minLen","n","slice","name","from","test","_unsupportedIterableToArray","done","LuxonError","_Error","Error","InvalidDateTimeError","_LuxonError","reason","toMessage","InvalidIntervalError","_LuxonError2","InvalidDurationError","_LuxonError3","ConflictingSpecificationError","_LuxonError4","InvalidUnitError","_LuxonError5","unit","InvalidArgumentError","_LuxonError6","ZoneIsAbstractError","_LuxonError7","s","l","DATE_SHORT","year","month","day","DATE_MED","DATE_FULL","DATE_HUGE","weekday","TIME_SIMPLE","hour","minute","TIME_WITH_SECONDS","second","TIME_WITH_SHORT_OFFSET","timeZoneName","TIME_WITH_LONG_OFFSET","TIME_24_SIMPLE","hour12","TIME_24_WITH_SECONDS","TIME_24_WITH_SHORT_OFFSET","TIME_24_WITH_LONG_OFFSET","DATETIME_SHORT","DATETIME_SHORT_WITH_SECONDS","DATETIME_MED","DATETIME_MED_WITH_SECONDS","DATETIME_MED_WITH_WEEKDAY","DATETIME_FULL","DATETIME_FULL_WITH_SECONDS","DATETIME_HUGE","DATETIME_HUGE_WITH_SECONDS","isUndefined","isNumber","isInteger","hasIntl","Intl","DateTimeFormat","hasFormatToParts","formatToParts","hasRelative","RelativeTimeFormat","bestBy","by","compare","reduce","best","pair","pick","obj","keys","k","hasOwnProperty","prop","integerBetween","thing","bottom","top","padStart","input","repeat","parseInteger","string","parseInt","parseMillis","fraction","f","parseFloat","Math","floor","roundTo","number","digits","towardZero","factor","pow","trunc","round","isLeapYear","daysInYear","daysInMonth","x","modMonth","objToLocalTS","d","UTC","millisecond","setUTCFullYear","getUTCFullYear","weeksInWeekYear","weekYear","p1","last","p2","untruncateYear","parseZoneInfo","ts","offsetFormat","locale","timeZone","date","intlOpts","modified","assign","intl","parsed","find","m","type","toLowerCase","without","format","substring","replace","signedOffset","offHourStr","offMinuteStr","offHour","Number","isNaN","offMin","is","asNumber","numericValue","normalizeObject","normalizer","nonUnitKeys","normalized","u","v","formatOffset","offset","hours","minutes","abs","sign","base","RangeError","timeObject","ianaRegex","stringify","JSON","sort","monthsLong","monthsShort","monthsNarrow","months","weekdaysLong","weekdaysShort","weekdaysNarrow","weekdays","meridiems","erasLong","erasShort","erasNarrow","eras","stringifyTokens","splits","tokenToString","_step","_iterator","token","literal","val","_macroTokenToFormatOpts","D","DD","DDD","DDDD","t","tt","ttt","tttt","T","TT","TTT","TTTT","ff","fff","ffff","F","FF","FFF","FFFF","Formatter","formatOpts","opts","loc","systemLoc","parseFormat","fmt","current","currentFull","bracketed","c","charAt","macroTokenToFormatOpts","_proto","formatWithSystemDefault","dt","redefaultToSystem","dtFormatter","formatDateTime","formatDateTimeParts","resolvedOptions","num","forceSimple","padTo","numberFormatter","formatDateTimeFromString","extract","_this","isOffsetFixed","allowZ","isValid","zone","meridiem","knownEnglish","standalone","era","listingMode","useDateTimeFormatter","outputCalendar","offsetName","zoneName","weekNumber","ordinal","quarter","formatDurationFromString","dur","tokenToField","lildur","_this2","tokens","realTokens","found","_ref","concat","collapsed","shiftTo","map","filter","mapped","Invalid","explanation","Zone","equals","singleton","LocalZone","_Zone","getTimezoneOffset","otherZone","matchingRegex","RegExp","source","dtfCache","typeToPos","ianaZoneCache","IANAZone","valid","isValidZone","resetCache","isValidSpecifier","match","parseGMTOffset","specifier","formatted","fMonth","fDay","dtf","_ref2","filled","_formatted$i","pos","partsOffset","exec","asTS","over","singleton$1","FixedOffsetZone","fixed","utcInstance","parseSpecifier","r","InvalidZone","NaN","normalizeZone","defaultZone","lowered","now","defaultLocale","defaultNumberingSystem","defaultOutputCalendar","throwOnInvalid","Settings","resetCaches","Locale","z","numberingSystem","intlDTCache","getCachedDTF","locString","intlNumCache","intlRelCache","getCachedRTF","cacheKeyOpts","excluded","sourceKeys","_objectWithoutPropertiesLoose","inf","sysLocaleCache","listStuff","defaultOK","englishFn","intlFn","mode","PolyNumberFormatter","useGrouping","minimumIntegerDigits","NumberFormat","getCachedINF","PolyDateFormatter","universal","DateTime","fromMillis","_proto2","toJSDate","tokenFormat","knownFormat","dateTimeHuge","formatString","PolyRelFormatter","isEnglish","style","rtf","_proto3","count","numeric","narrow","units","years","quarters","weeks","days","seconds","lastable","isDay","isInPast","fmtValue","singular","lilUnits","fmtUnit","formatRelativeTime","numbering","specifiedLocale","localeStr","_parseLocaleString","uIndex","options","smaller","calendar","parseLocaleString","parsedLocale","parsedNumberingSystem","parsedOutputCalendar","weekdaysCache","monthsCache","meridiemCache","eraCache","fastNumbersCached","fromOpts","defaultToEN","computedSys","systemLocale","fromObject","_temp","_proto4","hasFTP","isActuallyEn","hasNoWeirdness","clone","alts","getOwnPropertyNames","redefaultToEN","formatStr","ms","utc","mapMonths","mapWeekdays","_this3","_this4","field","matching","fastNumbers","relFormatter","startsWith","other","combineRegexes","_len","regexes","_key","full","combineExtractors","_len2","extractors","_key2","ex","mergedVals","mergedZone","cursor","_ex","parse","_len3","patterns","_key3","_i","_patterns","_patterns$_i","regex","extractor","simpleParse","_len4","_key4","ret","offsetRegex","isoTimeBaseRegex","isoTimeRegex","isoTimeExtensionRegex","extractISOWeekData","extractISOOrdinalData","sqlTimeRegex","sqlTimeExtensionRegex","int","fallback","extractISOYmd","extractISOTime","extractISOOffset","local","fullOffset","extractIANAZone","isoDuration","extractISODuration","maybeNegate","hasNegativePrefix","yearStr","monthStr","weekStr","dayStr","hourStr","minuteStr","secondStr","millisecondsStr","milliseconds","obsOffsets","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","fromStrings","weekdayStr","result","rfc2822","extractRFC2822","obsOffset","milOffset","rfc1123","rfc850","ascii","extractRFC1123Or850","extractASCII","isoYmdWithTimeExtensionRegex","isoWeekWithTimeExtensionRegex","isoOrdinalWithTimeExtensionRegex","isoTimeCombinedRegex","extractISOYmdTimeAndOffset","extractISOWeekTimeAndOffset","extractISOOrdinalDataAndTime","extractISOTimeAndOffset","sqlYmdWithTimeExtensionRegex","sqlTimeCombinedRegex","extractISOYmdTimeOffsetAndIANAZone","extractISOTimeOffsetAndIANAZone","lowOrderMatrix","casualMatrix","daysInYearAccurate","daysInMonthAccurate","accurateMatrix","orderedUnits","reverseUnits","reverse","clear","conf","values","conversionAccuracy","Duration","convert","matrix","fromMap","fromUnit","toMap","toUnit","conv","raw","added","ceil","normalizeValues","vals","previous","config","accurate","invalid","isLuxonDuration","normalizeUnit","fromISO","text","week","isDuration","toFormat","fmtOpts","toObject","includeConfig","toISO","toJSON","valueOf","as","plus","duration","friendlyDuration","minus","negate","mapUnits","_Object$keys","reconfigure","normalize","lastUnit","built","accumulated","_step2","_iterator2","own","ak","down","negated","_i2","_Object$keys2","_step3","_iterator3","durationish","INVALID$1","Interval","start","end","isLuxonInterval","fromDateTimes","builtStart","friendlyDateTime","builtEnd","validateError","after","before","_split","split","_dur","isInterval","toDuration","startOf","diff","hasSame","isEmpty","isAfter","dateTime","isBefore","contains","splitAt","dateTimes","sorted","results","splitBy","divideEqually","numberOfParts","overlaps","abutsStart","abutsEnd","engulfs","intersection","union","merge","intervals","_intervals$sort$reduc","b","item","sofar","final","xor","_Array$prototype","currentCount","ends","time","difference","toISODate","toISOTime","dateFormat","_temp2","_ref3$separator","separator","invalidReason","mapEndpoints","mapFn","Info","hasDST","proto","setZone","isValidIANAZone","_ref$locale","_ref$numberingSystem","_ref$outputCalendar","monthsFormat","_ref2$locale","_ref2$numberingSystem","_ref2$outputCalendar","_temp3","_ref3","_ref3$locale","_ref3$numberingSystem","weekdaysFormat","_temp4","_ref4","_ref4$locale","_ref4$numberingSystem","_temp5","_ref5$locale","_temp6","_ref6$locale","features","intlTokens","zones","relative","dayDiff","earlier","later","utcDayStart","toUTC","keepLocalTime","_diff","_cursor$plus3","_highOrderDiffs","_differs","_cursor$plus","lowestOrder","delta","_cursor$plus2","highWater","_differs$_i","differ","highOrderDiffs","remainingMillis","lowerOrderUnits","_Duration$fromMillis","numberingSystems","arab","arabext","bali","beng","deva","fullwide","gujr","hanidec","khmr","knda","laoo","limb","mlym","mong","mymr","orya","tamldec","telu","thai","tibt","latn","numberingSystemsUTF16","hanidecChars","digitRegex","append","MISSING_FTP","intUnit","post","deser","str","code","charCodeAt","search","_numberingSystemsUTF","min","max","parseDigits","fixListRegex","stripInsensitivities","oneOf","strings","startIndex","join","findIndex","groups","simple","unitForToken","_ref5","one","two","three","four","six","oneOrTwo","oneToThree","oneToSix","oneToNine","twoToFour","fourToSix","unitate","partTypeStyleToTokenVal","2-digit","short","long","dayperiod","dayPeriod","dummyDateTimeCache","maybeExpandMacroToken","part","tokenForPart","includes","explainFromTokens","disqualifyingUnit","matches","_buildRegex","handlers","_match","h","all","matchIndex","rawMatches","_ref6","Z","q","M","G","y","S","toField","nonLeapLadder","leapLadder","unitOutOfRange","dayOfWeek","js","getUTCDay","computeOrdinal","uncomputeOrdinal","table","month0","gregorianToWeek","gregObj","weekToGregorian","weekData","weekdayOfJan4","yearInDays","_uncomputeOrdinal","gregorianToOrdinal","gregData","ordinalToGregorian","ordinalData","_uncomputeOrdinal2","hasInvalidGregorianData","validYear","validMonth","validDay","hasInvalidTimeData","validHour","validMinute","validSecond","validMillisecond","INVALID$2","unsupportedZone","possiblyCachedWeekData","clone$1","inst","old","fixOffset","localTS","tz","utcGuess","o2","o3","tsToObj","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getUTCMilliseconds","objToTS","adjustTime","oPre","millisToAdd","_fixOffset","parseDataToDateTime","parsedZone","interpretationZone","toTechFormat","toTechTimeFormat","_ref$suppressSeconds","suppressSeconds","_ref$suppressMillisec","suppressMilliseconds","includeOffset","_ref$includeZone","includeZone","_ref$spaceZone","spaceZone","_ref$format","defaultUnitValues","defaultWeekUnitValues","defaultOrdinalUnitValues","orderedUnits$1","orderedWeekUnits","orderedOrdinalUnits","weeknumber","weeksnumber","weeknumbers","weekyear","weekyears","quickDT","tsNow","_objToTS","diffRelative","calendary","ot","_zone","isLuxonDateTime","fromJSDate","zoneToUse","fromSeconds","offsetProvis","containsOrdinal","containsGregorYear","containsGregorMD","containsGregor","definiteWeekDef","defaultValues","useWeekData","objNow","foundFirst","validOrdinal","validWeek","validWeekday","_objToTS2","_parseISODate","fromRFC2822","_parseRFC2822Date","trim","fromHTTP","_parseHTTPDate","fromFormat","_explainFromTokens","_opts$locale","_opts$numberingSystem","localeToUse","_parseFromTokens","fromString","fromSQL","_parseSQL","isDateTime","resolvedLocaleOpts","_Formatter$create$res","toLocal","_ref3$keepLocalTime","_ref3$keepCalendarTim","keepCalendarTime","offsetGuess","newTS","setLocale","mixed","_objToTS4","normalizedUnit","endOf","_this$plus","toLocaleString","toLocaleParts","_ref5$format","toISOWeekDate","_ref6$suppressMillise","_ref6$suppressSeconds","_ref6$includeOffset","_ref6$format","toRFC2822","toHTTP","toSQLDate","toSQLTime","_ref7","_ref7$includeOffset","_ref7$includeZone","toSQL","toMillis","toSeconds","toBSON","otherDateTime","durOpts","otherIsLater","diffed","diffNow","until","inputMs","toRelative","padding","toRelativeCalendar","every","fromFormatExplain","_options$locale","_options$numberingSys","fromStringExplain","dateTimeish"],"mappings":"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"} \ No newline at end of file From 1d3e894020fcf8d51bbc68d5d633d075ddbeee51 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 24 Sep 2020 09:05:03 +0300 Subject: [PATCH 036/143] docs: change title for feature libraries --- docs/en/UI/Angular/Environment.md | 2 +- docs/en/UI/Angular/Feature-Libraries.md | 2 +- docs/en/docs-nav.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/en/UI/Angular/Environment.md b/docs/en/UI/Angular/Environment.md index 0cd946079f..ab2a99c8d8 100644 --- a/docs/en/UI/Angular/Environment.md +++ b/docs/en/UI/Angular/Environment.md @@ -105,4 +105,4 @@ export interface RemoteEnv { ## What's Next? -* [Anatomy of a Feature Library](./Feature-Libraries.md) +- [About Feature Libraries](./Feature-Libraries.md) diff --git a/docs/en/UI/Angular/Feature-Libraries.md b/docs/en/UI/Angular/Feature-Libraries.md index 2ef681663a..b2e5c759ec 100644 --- a/docs/en/UI/Angular/Feature-Libraries.md +++ b/docs/en/UI/Angular/Feature-Libraries.md @@ -1,4 +1,4 @@ -# Anatomy of a Feature Library +# About Feature Libraries ABP has an ever-growing number of feature modules and [introducing a new one](../../Module-Development-Basics.md) is always possible. When the UI is Angular, these features have modular Angular libraries accompanying them. diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 68107b666a..9116fca5a0 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -443,7 +443,7 @@ "path": "UI/Angular/Environment.md" }, { - "text": "Anatomy of a Feature Library", + "text": "About Feature Libraries", "path": "UI/Angular/Feature-Libraries.md" }, { From 7291c49211da08116c33e522edd8ac89e8ce3d0b Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 24 Sep 2020 10:59:56 +0300 Subject: [PATCH 037/143] chore: update prettier configurations --- npm/ng-packs/.prettierrc | 3 ++- templates/app/angular/.prettierrc | 3 ++- templates/module/angular/.prettierrc | 5 +++++ 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 templates/module/angular/.prettierrc diff --git a/npm/ng-packs/.prettierrc b/npm/ng-packs/.prettierrc index 5e2863a11f..8aa45f90c0 100644 --- a/npm/ng-packs/.prettierrc +++ b/npm/ng-packs/.prettierrc @@ -1,5 +1,6 @@ { "printWidth": 100, "singleQuote": true, - "trailingComma": "all" + "trailingComma": "all", + "arrowParens": "avoid" } diff --git a/templates/app/angular/.prettierrc b/templates/app/angular/.prettierrc index 554f2a3baa..d0293174f3 100644 --- a/templates/app/angular/.prettierrc +++ b/templates/app/angular/.prettierrc @@ -1,4 +1,5 @@ { "singleQuote": true, - "printWidth": 100 + "printWidth": 100, + "arrowParens": "avoid" } diff --git a/templates/module/angular/.prettierrc b/templates/module/angular/.prettierrc new file mode 100644 index 0000000000..d0293174f3 --- /dev/null +++ b/templates/module/angular/.prettierrc @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "printWidth": 100, + "arrowParens": "avoid" +} From 4624f67bc8e2cd0202a5e534ea84dcf3c933eda4 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 24 Sep 2020 11:40:48 +0300 Subject: [PATCH 038/143] chore: update prettier version --- npm/ng-packs/package.json | 2 +- npm/ng-packs/yarn.lock | 247 +++++++++++++++++++------------------- 2 files changed, 127 insertions(+), 122 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 2be429f268..2b34ea2b2a 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -84,7 +84,7 @@ "ng-zorro-antd": "^9.3.0", "ngxs-reset-plugin": "^1.3.0", "ngxs-schematic": "^1.1.9", - "prettier": "^1.18.2", + "prettier": "^2.1.2", "protractor": "~7.0.0", "rxjs": "~6.5.4", "snq": "^1.0.3", diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index a5c9cd69b5..e66942e04f 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -119,23 +119,23 @@ jest-preset-angular "^8.2.1" lodash "^4.17.15" -"@angular-devkit/architect@0.1001.2", "@angular-devkit/architect@>=0.1000.0 < 0.1100.0": - version "0.1001.2" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1001.2.tgz#9f4d1f95e85a2b85d26bf8f5c06909552d703a02" - integrity sha512-05o12amjZ8NNIFehKm/lFYf12xvCclC7V5tGl/9+V7g/3pQqakwAjCysgb9T+ETffhmKhMnE8XdAJZqF7YrDcw== +"@angular-devkit/architect@0.1001.3", "@angular-devkit/architect@>=0.1000.0 < 0.1100.0": + version "0.1001.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.1001.3.tgz#168aa424be9d0dad90d1a03129c3999fbf76a1cc" + integrity sha512-WS5IAN6I73jKapiHKYz3U05Kka4eVRmwCk++GWM2uGChluiZsI87eK8vxMS3KWDIqTnAOuMpDt3XWxlASv1nlQ== dependencies: - "@angular-devkit/core" "10.1.2" + "@angular-devkit/core" "10.1.3" rxjs "6.6.2" "@angular-devkit/build-angular@~0.1001.2": - version "0.1001.2" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1001.2.tgz#3f7de9798ea7432563fac1894604f8812bbf96f5" - integrity sha512-G03ORkh5j0+1rFXcMlwiIbIkrx9LpUeubqCQM+9uHmfTOtS2mLpgiY/ChECyGz6NKhy8GhUmQ9BuVkO8Mh+NAQ== - dependencies: - "@angular-devkit/architect" "0.1001.2" - "@angular-devkit/build-optimizer" "0.1001.2" - "@angular-devkit/build-webpack" "0.1001.2" - "@angular-devkit/core" "10.1.2" + version "0.1001.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-angular/-/build-angular-0.1001.3.tgz#8085bcb26394c5dc47ecc4b9d9c7a47dfe9e1df4" + integrity sha512-TQhNNfBeWLLOcXitmBTl2l95/9/2OcVVGyI5bxbpcCn8f9ioRVa2DvIxQLR92aoGkTrp7Vgd12xu07DSuuQwvg== + dependencies: + "@angular-devkit/architect" "0.1001.3" + "@angular-devkit/build-optimizer" "0.1001.3" + "@angular-devkit/build-webpack" "0.1001.3" + "@angular-devkit/core" "10.1.3" "@babel/core" "7.11.1" "@babel/generator" "7.11.0" "@babel/plugin-transform-runtime" "7.11.0" @@ -143,7 +143,7 @@ "@babel/runtime" "7.11.2" "@babel/template" "7.10.4" "@jsdevtools/coverage-istanbul-loader" "3.0.5" - "@ngtools/webpack" "10.1.2" + "@ngtools/webpack" "10.1.3" autoprefixer "9.8.6" babel-loader "8.1.0" browserslist "^4.9.1" @@ -199,17 +199,17 @@ worker-plugin "5.0.0" "@angular-devkit/build-ng-packagr@~0.1001.2": - version "0.1001.2" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.1001.2.tgz#96ab007edc95487df6382a7161e10a324306dd09" - integrity sha512-tDGcrLA7z7/teuKlrhKL+1OgImLdY8wVv5OpFb219gG/t0mRy27xHzTd1YxulOjkaSfDUNIi859mnySv8knVsw== + version "0.1001.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.1001.3.tgz#7af1d9d940a802323807dcf548f7247f82bbe8c7" + integrity sha512-nw3UEhd2FNyyH110J7xgUIQ3l4jAg47XMBZV81fRfKtZudYy+bctblIPGF0erwPQ0kKY8n+h36j9+BKh0QbkvA== dependencies: - "@angular-devkit/architect" "0.1001.2" + "@angular-devkit/architect" "0.1001.3" rxjs "6.6.2" -"@angular-devkit/build-optimizer@0.1001.2": - version "0.1001.2" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1001.2.tgz#ba0f51f245b1df435fe714357a8ea261125da958" - integrity sha512-aykCI0cP6wEW/6GsV0Rs59doN0n5ztsM2+qFrZMSHyggaNzllVafYbQwVvA7t503QpOsmT5E+kve/S/4dMgmFg== +"@angular-devkit/build-optimizer@0.1001.3": + version "0.1001.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-optimizer/-/build-optimizer-0.1001.3.tgz#11e6ea59ab0d6f6c0724c9453c82a2f15653534d" + integrity sha512-tQy4ADOVDL0hJcykpZzqfInQV6ft499E3g+D0jcZL/imSsxH4EaaBA2HCc0JTeAFjmkI32OhD9T8G/swqqBcVw== dependencies: loader-utils "2.0.0" source-map "0.7.3" @@ -217,13 +217,13 @@ typescript "4.0.2" webpack-sources "1.4.3" -"@angular-devkit/build-webpack@0.1001.2": - version "0.1001.2" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1001.2.tgz#4d4c2add320ebd1b654ac499a335c3cedb4fd742" - integrity sha512-+rdxyZOnTou8yAVU8nU49D0PVuIXGQY+V08KukeZsoszJGlwvqfGq1CMJLFlsq3goszTIDCetgmMYvtbaYVrxw== +"@angular-devkit/build-webpack@0.1001.3": + version "0.1001.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-webpack/-/build-webpack-0.1001.3.tgz#889aaa2dde7daacb88969d9ede5ba2df94250df3" + integrity sha512-XpAEWRWIdh/bk2UHkP7iIjEiVwkQkAWoZPNYMJzg3iN/iAAdUDPiNBTXhFZEZjFEWT0RXl4iKW2hr5LFvpe6lw== dependencies: - "@angular-devkit/architect" "0.1001.2" - "@angular-devkit/core" "10.1.2" + "@angular-devkit/architect" "0.1001.3" + "@angular-devkit/core" "10.1.3" rxjs "6.6.2" "@angular-devkit/core@10.0.8", "@angular-devkit/core@~10.0.3": @@ -237,10 +237,10 @@ rxjs "6.5.5" source-map "0.7.3" -"@angular-devkit/core@10.1.2", "@angular-devkit/core@^10.0.0": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.1.2.tgz#3deb429596a6127c5b68bbc3bbd49cf00aeac966" - integrity sha512-LMxesiCuXRe3UzPdRouXsC1W73/q6rVtACVoD5GdzmmnZ7cRh7oiwonqT0lEXIKQikMsZUasUOXHD2HoKV6BoA== +"@angular-devkit/core@10.1.3", "@angular-devkit/core@^10.0.0": + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-10.1.3.tgz#48776a87253b40f6005b14413e089a1fee6b7227" + integrity sha512-Ub31/eqFtSuQy3V+B74Jt0jAUw8fs8sbd0ZL2UHYUJyrwm20iIRam+mOD3Sj8HFrDGLR8m56KsxJ12KvC1oxtQ== dependencies: ajv "6.12.4" fast-json-stable-stringify "2.1.0" @@ -260,13 +260,13 @@ source-map "0.7.3" "@angular-devkit/schematics-cli@^0.1001.1": - version "0.1001.2" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-0.1001.2.tgz#aeb54fe5f3edfd931c4a6d8c95d5e1bc08debf7a" - integrity sha512-hjFIYrz7a/qBZKHagR03wgX00ue82IrQewl+EefmZlFA7sNZ1PUYrVRdAgr89Wz1RsE9APxpHyUI162f8kHcwg== + version "0.1001.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics-cli/-/schematics-cli-0.1001.3.tgz#e94790f1e41b5d9f75d30cfe6a13ed9bad087493" + integrity sha512-Yk7wuz2fnAJ81HPAYLkYZ+Z7ljAfRsOv5QOQRYlqDN/1+EGP9Jim8aRfplhsGaBvgHvwdsTL6DNpS+Y8UqtFIw== dependencies: - "@angular-devkit/core" "10.1.2" - "@angular-devkit/schematics" "10.1.2" - "@schematics/schematics" "0.1001.2" + "@angular-devkit/core" "10.1.3" + "@angular-devkit/schematics" "10.1.3" + "@schematics/schematics" "0.1001.3" inquirer "7.3.3" minimist "1.2.5" rxjs "6.6.2" @@ -281,12 +281,12 @@ ora "4.0.4" rxjs "6.5.5" -"@angular-devkit/schematics@10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.1.2.tgz#4b0bff6248f5a58337877cf32e29325ae96f1eea" - integrity sha512-gS5yP8ntw3/v9zBK9kBsp5r4gYlp8cLvJ3oWLZmSvdzzbm/QznPnRKqNm72AptKrlxRFX0xyrJ7vjtLWcssqxA== +"@angular-devkit/schematics@10.1.3": + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-10.1.3.tgz#49ccf51a1a8e71625b5ec1a0d24adfc24c31c903" + integrity sha512-5+E2bBBsphuz1KfloC5yA+hXSEbxMokkp5UEp+X9VC7zUGTXV8sxuvcbBo+JVutaoNHezJGu2JUx/LqNrKd58w== dependencies: - "@angular-devkit/core" "10.1.2" + "@angular-devkit/core" "10.1.3" ora "5.0.0" rxjs "6.6.2" @@ -299,9 +299,9 @@ rxjs "6.4.0" "@angular/animations@~10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-10.1.2.tgz#2d66399cc06a9b3c804c67a3fbb71266a6190da9" - integrity sha512-39KSRY61pLaggbuikx4bltJQQ/l54RjPDffZrUJsuCXIpBKHd+ew8CJ3rud+zjhDfA3pETb7WE1jeCNKo6Zo1A== + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular/animations/-/animations-10.1.3.tgz#2047dae5fc1bf0f5173a410f0103fb003113d1b9" + integrity sha512-qIdxP28iF6qaoGBB3C6VvHt22nR3FMK5kh+no+jYmmy6z5cBVhwS/Vb6nkx+XRqivKBVHxWNZQ4ae6xmTg/k7A== dependencies: tslib "^2.0.0" @@ -313,15 +313,15 @@ parse5 "^5.0.0" "@angular/cli@~10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-10.1.2.tgz#12fa01a4f93fc92151e00c3f26c17656c022c5f1" - integrity sha512-dBcqFTuT71CCkH4BoV2cN5RP5k8ggzOBijNNtwkQv7N4gNcdcczhoPtEa2v4Oo8mPcTwxf/C3RXZ+NicdROJOw== - dependencies: - "@angular-devkit/architect" "0.1001.2" - "@angular-devkit/core" "10.1.2" - "@angular-devkit/schematics" "10.1.2" - "@schematics/angular" "10.1.2" - "@schematics/update" "0.1001.2" + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-10.1.3.tgz#188f99583814e97727787869065d228c1b1f4407" + integrity sha512-wj+ZcTLRzM94asLUZRO5U96CLEsnWosa3Iqub+1AH1/C8Wv2w/2njUKDM7ifQeebYzjPb5EcN4EIAGcHAGyeWw== + dependencies: + "@angular-devkit/architect" "0.1001.3" + "@angular-devkit/core" "10.1.3" + "@angular-devkit/schematics" "10.1.3" + "@schematics/angular" "10.1.3" + "@schematics/update" "0.1001.3" "@yarnpkg/lockfile" "1.1.0" ansi-colors "4.1.1" debug "4.1.1" @@ -339,9 +339,9 @@ uuid "8.3.0" "@angular/common@~10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular/common/-/common-10.1.2.tgz#c075f9f9a192c301f5bc483cc490d17c86d62b15" - integrity sha512-zsWZN30sUJVXcakKK+B7ANzDZNK5fqZRwawCp5IteUNveqxfl70CqSTft0twOnva0NGsiTgix9WH5XqnUJqYzg== + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-10.1.3.tgz#43b63609e3ef321d8b6835a5cd339587bf0aecbe" + integrity sha512-+9UsK+ZTCLO3MvTYlDTbjJGAZxtK9WftHWxbT3NTAJ8tisDfb+MwXB0xNw7qLOysMe3u04zShT0YXYZo5aJBrw== dependencies: tslib "^2.0.0" @@ -382,23 +382,23 @@ integrity sha512-6Pxgsrf0qF9iFFqmIcWmjJGkkCaCm6V5QNnxMy2KloO3SDq6QuMVRbN9RtC8Urmo25LP+eZ6ZgYqFYpdD8Hd9w== "@angular/core@~10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-10.1.2.tgz#53fc470383f7850aa6f025b89b12643109d2cf24" - integrity sha512-iBVkCgXMp3TofrbZVwpuSbLAiLHF/fbx9xHnFcjBQUXBUIoxiEB4NcrPHibmBVNX0J45hO6iLsG+ZtFZbMifNg== + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-10.1.3.tgz#7dbc38eb73a1d526d9c2aca3025c42e38c4acdc3" + integrity sha512-2rnNa8bSH1JoQRzUWXXvPGgxtNA6mSiIqDZs1tHdQZxJI15NbyAJhw6lglgBFahE/nOcUx+11ZhxaPJWSsbEOg== dependencies: tslib "^2.0.0" "@angular/forms@~10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-10.1.2.tgz#3f877468a25a8e54c02b8713906efd64c2823d7d" - integrity sha512-BzzhKabLdI7JZAGz6oa+7ITEpVGhR+Tu0nhRsgyjZijz02vWAMexr1xXILLgCNMiMG509WDFvIbTwsd6lIFsXA== + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular/forms/-/forms-10.1.3.tgz#c48a9c79bc50b21017685037ad628ff0bc8d5e61" + integrity sha512-ntLnIZnEo+9ziajnjQPYvVR5m0gRfQBbXx5dug4EuUI5SzE2WzcTEZTnltgw4cLqOy/fOt8cXMiW0YeRBHsjKA== dependencies: tslib "^2.0.0" "@angular/language-service@~10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-10.1.2.tgz#569584307e712226c4b0091e3265d0756951f2c1" - integrity sha512-NYAvbiqzj2cxIAFiqZQSEVqbKaRaJKEn/qRlzMbfELbJV3Vwzw6oDwV550LnX4ZXOdsfMvEV4zJLBjUMDbpevg== + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular/language-service/-/language-service-10.1.3.tgz#0903579293fc897cd3ae0d047ffd4bc5968337f4" + integrity sha512-BdRlbmVC9frtvqMZ9kaxMlgm3OIypTuB1z3cRwJVCnvBVsWz6+QishTdSCvYI7USFNU5EwGH6dCBWwl53spBLw== "@angular/localize@~10.0.10": version "10.0.14" @@ -410,32 +410,32 @@ yargs "15.3.0" "@angular/localize@~10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-10.1.2.tgz#945bac55663c075059be3325c9e841e5227d03e3" - integrity sha512-29vEx/4B5Eb8iZAvgnFdglba9jpKwqgDW4zlE6Bxswh2BZ8ZXpUG0HCImzaVTUe3PL2NGCbe5ZYbBCMq+kVIqg== + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular/localize/-/localize-10.1.3.tgz#791bf79f8d14872c87f88be6bce4de718cded1e9" + integrity sha512-OJTCUTd7qF3JoqCM7+lNTNUErzHpm5TvGObFthXvP2V+u1ipsFeqTffzqEv7SrZ5+PkabRUditUrPOVAkFIlyw== dependencies: "@babel/core" "7.8.3" glob "7.1.2" yargs "15.3.0" "@angular/platform-browser-dynamic@~10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.1.2.tgz#af5fe1cccc6869f6f4f7b60c11aeb873b91b0fd4" - integrity sha512-ePxQdVSh3pJLq4Zxc+27VW+ekyU5MGrGDT/gpLhzXWu1EEUe786Q9fM4T6yA7mDP/1XF7HngF3hlMqla2ayqeA== + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-10.1.3.tgz#e90f9329f2ccbfe817680f16a00686440653ee06" + integrity sha512-JGVz0XxiZuF1FGJ2zUk1/TogIlBFgFCUgNbSyULIfE/UXcuuvvLlzF+ls26tHK06lFHRAVHFjjDpyA270UzRTQ== dependencies: tslib "^2.0.0" "@angular/platform-browser@~10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-10.1.2.tgz#2f022dbaac5bad2f3d10a89207128b94b8d0c63e" - integrity sha512-zI6YUy2juR8y8jDfdGGYHxZ9kv3wDZzFj49CObx9GU6+ijQ9FsFCWnsB44LmlzC17xCoQ9wn+zYIHtpdf80zvA== + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-10.1.3.tgz#f6a5c5098e878b964cfddc296fb63eb147710211" + integrity sha512-Y5/M9NEmQceda96a9ntmxidfgJTf23DmEvGw0SJ1TAn2X9EjlM4s7H8KNH9R/tDPK9QcuvzX9FTZsxQ9b6kCFQ== dependencies: tslib "^2.0.0" "@angular/router@~10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@angular/router/-/router-10.1.2.tgz#bddfdd4acc88bf1eab359859dc3f832a448489e1" - integrity sha512-JufAdFyTsB9I9aMD/WNBaI4Fi81SuN6cJm9idSwsUHbEOfB96aQL4dfNEOarzfD9KtDi1vADzkrmVRc2tz2qNw== + version "10.1.3" + resolved "https://registry.yarnpkg.com/@angular/router/-/router-10.1.3.tgz#42b4c173bba8441a3e1eb6f1ca60e3b2a4eb3e86" + integrity sha512-CAd6u1y+NjB8edtuC2j2OpS6xFO+s90bg4kyu7zr9i0wIQX8xI+neFzkTeoYWJ0PNfi05cCGelyQnLZPZFsyvw== dependencies: tslib "^2.0.0" @@ -2404,12 +2404,12 @@ jquery "3.5.0" replace-in-file "^4.1.3" -"@ngtools/webpack@10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-10.1.2.tgz#8d2fb6ddefc4bbbaa9c8942c146161de6fa97a62" - integrity sha512-YBzMSzVHQsDGmdsKnmvAklrwQ5bjedQu40REvYczMNpdBthw2aiOI+YKSvRVfSKxMmnLWVL0aYYrqE5IhaMnRg== +"@ngtools/webpack@10.1.3": + version "10.1.3" + resolved "https://registry.yarnpkg.com/@ngtools/webpack/-/webpack-10.1.3.tgz#f65c591daab7ed0c3372a115c6a90eba701a2ca1" + integrity sha512-wEg3hY0u+HMAIypClOVnpjYaNwBp+yY0pEb1yNc3Id8bBlw76Y+wk+kGplESelkNQKlfwKDaMFk+7EjGkOrmng== dependencies: - "@angular-devkit/core" "10.1.2" + "@angular-devkit/core" "10.1.3" enhanced-resolve "4.3.0" webpack-sources "1.4.3" @@ -2638,13 +2638,13 @@ estree-walker "^1.0.1" picomatch "^2.2.2" -"@schematics/angular@10.1.2": - version "10.1.2" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-10.1.2.tgz#7d97c00ce709e703a89248283e4e6cdf056d4b2b" - integrity sha512-7BHgSdP4yC0IuoiPGWBGQrwE5ilBhIOGozjKSHx41Utac45YKyXpmjr1Jw+SvFilgsnPEjZwc7VKqgINmeLkqA== +"@schematics/angular@10.1.3": + version "10.1.3" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-10.1.3.tgz#8b39f2d934043c68b55495bc6e44705c6fa7ef8c" + integrity sha512-X3tNnpfF/jkl1KcyCC8PaOYogQlTZ9s7Yuz0va0DAVOptIqorpf8e6+lY0PPLKshaK9TSiFUcQ8SYYnjAVKcdA== dependencies: - "@angular-devkit/core" "10.1.2" - "@angular-devkit/schematics" "10.1.2" + "@angular-devkit/core" "10.1.3" + "@angular-devkit/schematics" "10.1.3" jsonc-parser "2.3.0" "@schematics/angular@~10.0.5": @@ -2655,21 +2655,21 @@ "@angular-devkit/core" "10.0.8" "@angular-devkit/schematics" "10.0.8" -"@schematics/schematics@0.1001.2": - version "0.1001.2" - resolved "https://registry.yarnpkg.com/@schematics/schematics/-/schematics-0.1001.2.tgz#43fce997819c6f166b5cccf3a29d284c87c617c2" - integrity sha512-W4KLGPOAmiWV2OhgNSwcnRnPt9iNPtkDV7V+LJVefgpWCje5nGsVf2qRmj1j5fxnDcdjH8L4RabpYFTNGj0exg== +"@schematics/schematics@0.1001.3": + version "0.1001.3" + resolved "https://registry.yarnpkg.com/@schematics/schematics/-/schematics-0.1001.3.tgz#71ad97fa5f06fe46cb99a5907e65b58d207ffe1f" + integrity sha512-mkI8At9SxdZpPL7MW6JtXlDMjfnPe0TLWNakUl/SuHpCFkGdrsqdPMRdTqW4iYdOq53/C9dbYwdPmtn5slAo7A== dependencies: - "@angular-devkit/core" "10.1.2" - "@angular-devkit/schematics" "10.1.2" + "@angular-devkit/core" "10.1.3" + "@angular-devkit/schematics" "10.1.3" -"@schematics/update@0.1001.2": - version "0.1001.2" - resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1001.2.tgz#6a506af18fc2edbbba69a6272abd39c68de097dd" - integrity sha512-Z/P08k4FlbKNmxV5pe34yfKPLI2327CjBg26isO5qpR4nB1FVZkC39YXwFwJod3nU7DE6UMkKcA749k30k2KSg== +"@schematics/update@0.1001.3": + version "0.1001.3" + resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.1001.3.tgz#7b8e2c166948c096cb46d9d7c712b3f9fac044e0" + integrity sha512-ah4YHjEXACmpX0i3cAn5OguH5S430HD+zbxlMu4AC93A8W52ll97vqvUVF8NLZ6RKcOV/8tXmzgzvJDe07i8yQ== dependencies: - "@angular-devkit/core" "10.1.2" - "@angular-devkit/schematics" "10.1.2" + "@angular-devkit/core" "10.1.3" + "@angular-devkit/schematics" "10.1.3" "@yarnpkg/lockfile" "1.1.0" ini "1.3.5" npm-package-arg "^8.0.0" @@ -2957,16 +2957,16 @@ integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^13.0.0": - version "13.0.10" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.10.tgz#e77bf3fc73c781d48c2eb541f87c453e321e5f4b" - integrity sha512-MU10TSgzNABgdzKvQVW1nuuT+sgBMWeXNc3XOs5YXV5SDAK+PPja2eUuBNB9iqElu03xyEDqlnGw0jgl4nbqGQ== + version "13.0.11" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-13.0.11.tgz#def2f0c93e4bdf2c61d7e34899b17e34be28d3b1" + integrity sha512-NRqD6T4gktUrDi1o1wLH3EKC1o2caCr7/wR87ODcbVITQF106OM3sFN92ysZ++wqelOd1CTzatnOBRDYYG6wGQ== dependencies: "@types/yargs-parser" "*" "@types/yargs@^15.0.0": - version "15.0.5" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.5.tgz#947e9a6561483bdee9adffc983e91a6902af8b79" - integrity sha512-Dk/IDOPtOgubt/IaevIUbTgV7doaKkoorvOyYM2CMwuDyP89bekI7H4xLIwunNYiK9jhCkmc6pUrJk3cj2AB9w== + version "15.0.7" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.7.tgz#dad50a7a234a35ef9460737a56024287a3de1d2b" + integrity sha512-Gf4u3EjaPNcC9cTu4/j2oN14nSVhr8PQ+BvBcBQHAhDZfl0bVIiLgvnRXv/dn58XhTm9UXvBpvJpDlwV65QxOA== dependencies: "@types/yargs-parser" "*" @@ -3931,11 +3931,11 @@ browserify-zlib@^0.2.0: pako "~1.0.5" browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.7.0, browserslist@^4.8.5, browserslist@^4.9.1: - version "4.14.3" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.3.tgz#381f9e7f13794b2eb17e1761b4f118e8ae665a53" - integrity sha512-GcZPC5+YqyPO4SFnz48/B0YaCwS47Q9iPChRGi6t7HhflKBcINzFrJvRfC+jp30sRMKxF+d4EHGs27Z0XP1NaQ== + version "4.14.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.4.tgz#66a18131439f9e16c3da7f352518dfa12f60b0e3" + integrity sha512-7FOuawafVdEwa5Jv4nzeik/PepAjVte6HmVGHsjt2bC237jeL9QlcTBDF3PnHEvcC6uHwLGYPwZHNZMB7wWAnw== dependencies: - caniuse-lite "^1.0.30001131" + caniuse-lite "^1.0.30001135" electron-to-chromium "^1.3.570" escalade "^3.1.0" node-releases "^1.1.61" @@ -4202,7 +4202,7 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001131: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001032, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001135: version "1.0.30001135" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001135.tgz#995b1eb94404a3c9a0d7600c113c9bb27f2cd8aa" integrity sha512-ziNcheTGTHlu9g34EVoHQdIu5g4foc8EsxMGC7Xkokmvw0dqNtX8BS8RgCgFBaAiSp2IdjvBxNdh0ssib28eVQ== @@ -5755,9 +5755,9 @@ ee-first@1.1.1: integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= electron-to-chromium@^1.3.570: - version "1.3.570" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.570.tgz#3f5141cc39b4e3892a276b4889980dabf1d29c7f" - integrity sha512-Y6OCoVQgFQBP5py6A/06+yWxUZHDlNr/gNDGatjH8AZqXl8X0tE4LfjLJsXGz/JmWJz8a6K7bR1k+QzZ+k//fg== + version "1.3.571" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.571.tgz#e57977f1569f8326ae2a7905e26f3943536ba28f" + integrity sha512-UYEQ2Gtc50kqmyOmOVtj6Oqi38lm5yRJY3pLuWt6UIot0No1L09uu6Ja6/1XKwmz/p0eJFZTUZi+khd1PV1hHA== elliptic@^6.5.3: version "6.5.3" @@ -9129,11 +9129,16 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.44.0, "mime-db@>= 1.43.0 < 2": +mime-db@1.44.0: version "1.44.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== +"mime-db@>= 1.43.0 < 2": + version "1.45.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.45.0.tgz#cceeda21ccd7c3a745eba2decd55d4b73e7879ea" + integrity sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w== + mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.19, mime-types@~2.1.24: version "2.1.27" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" @@ -10874,10 +10879,10 @@ prepend-http@^1.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -prettier@^1.18.2: - version "1.19.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" - integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== +prettier@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.1.2.tgz#3050700dae2e4c8b67c4c3f666cdb8af405e1ce5" + integrity sha512-16c7K+x4qVlJg9rEbXl7HEGmQyZlG4R9AgP+oHKRMsMsuk8s+ATStlf1NpDqyBI1HpVyfjLOeMhH2LvuNvV5Vg== pretty-format@26.x: version "26.4.2" From 3b65d8a8b97d4d49600fbaa22f3198c4985a8e1a Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 24 Sep 2020 11:50:06 +0300 Subject: [PATCH 039/143] docs: use setup instead of consumption --- docs/en/UI/Angular/Feature-Libraries.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Feature-Libraries.md b/docs/en/UI/Angular/Feature-Libraries.md index b2e5c759ec..937bae7245 100644 --- a/docs/en/UI/Angular/Feature-Libraries.md +++ b/docs/en/UI/Angular/Feature-Libraries.md @@ -13,7 +13,7 @@ Each library has at least two modules: -Manual consumption of a feature library has three steps: +The manual setup of a feature library has three steps: ### 1. Install the Library From 29f5662694cacc162f929eb5cd0cdeff90c187aa Mon Sep 17 00:00:00 2001 From: Ahmet Date: Thu, 24 Sep 2020 13:29:06 +0300 Subject: [PATCH 040/143] Added empty TenantManagement Blazor project --- .../Volo.Abp.TenantManagement.sln | 7 ++++ ...TenantManagementBlazorAutoMapperProfile.cs | 14 +++++++ .../AbpTenantManagementBlazorModule.cs | 37 +++++++++++++++++++ .../FodyWeavers.xml | 3 ++ .../FodyWeavers.xsd | 30 +++++++++++++++ .../Menus/MyProjectNameMenuContributor.cs | 23 ++++++++++++ .../Menus/MyProjectNameMenus.cs | 11 ++++++ .../TenantManagement/Tenants/Index.razor | 8 ++++ .../Volo.Abp.TenantManagement.Blazor.csproj | 20 ++++++++++ .../_Import.razor | 5 +++ 10 files changed, 158 insertions(+) create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorAutoMapperProfile.cs create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xsd create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenuContributor.cs create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenus.cs create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/Tenants/Index.razor create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Import.razor diff --git a/modules/tenant-management/Volo.Abp.TenantManagement.sln b/modules/tenant-management/Volo.Abp.TenantManagement.sln index 99ca26e1f0..1e14ca56a7 100644 --- a/modules/tenant-management/Volo.Abp.TenantManagement.sln +++ b/modules/tenant-management/Volo.Abp.TenantManagement.sln @@ -35,6 +35,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.T EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TenantManagement.Domain.Tests", "test\Volo.Abp.TenantManagement.Domain.Tests\Volo.Abp.TenantManagement.Domain.Tests.csproj", "{F7219BE2-4588-489C-9D31-647C59694C03}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TenantManagement.Blazor", "src\Volo.Abp.TenantManagement.Blazor\Volo.Abp.TenantManagement.Blazor.csproj", "{05040C16-B531-446A-B406-277E44D147C0}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -97,6 +99,10 @@ Global {F7219BE2-4588-489C-9D31-647C59694C03}.Debug|Any CPU.Build.0 = Debug|Any CPU {F7219BE2-4588-489C-9D31-647C59694C03}.Release|Any CPU.ActiveCfg = Release|Any CPU {F7219BE2-4588-489C-9D31-647C59694C03}.Release|Any CPU.Build.0 = Release|Any CPU + {05040C16-B531-446A-B406-277E44D147C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {05040C16-B531-446A-B406-277E44D147C0}.Debug|Any CPU.Build.0 = Debug|Any CPU + {05040C16-B531-446A-B406-277E44D147C0}.Release|Any CPU.ActiveCfg = Release|Any CPU + {05040C16-B531-446A-B406-277E44D147C0}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -116,6 +122,7 @@ Global {F75B4C54-A5F1-4101-99F5-A5B868A5146B} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} {C3BAD6E8-00CD-4283-9416-64287BB5B265} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} {F7219BE2-4588-489C-9D31-647C59694C03} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} + {05040C16-B531-446A-B406-277E44D147C0} = {799CA525-4748-421A-9892-05C68BB2FA13} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7C258726-2CE0-44D3-A2D7-71812E8F505C} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorAutoMapperProfile.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorAutoMapperProfile.cs new file mode 100644 index 0000000000..12564ad7de --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorAutoMapperProfile.cs @@ -0,0 +1,14 @@ +using AutoMapper; + +namespace Volo.Abp.TenantManagement.Blazor +{ + public class AbpTenantManagementBlazorAutoMapperProfile : Profile + { + public AbpTenantManagementBlazorAutoMapperProfile() + { + /* You can configure your AutoMapper mapping configuration here. + * Alternatively, you can split your mapping configurations + * into multiple profile classes for a better organization. */ + } + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs new file mode 100644 index 0000000000..1429cf9d4a --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs @@ -0,0 +1,37 @@ +using Microsoft.Extensions.DependencyInjection; +using MyCompanyName.MyProjectName.Blazor; +using MyCompanyName.MyProjectName.Blazor.Menus; +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Routing; +using Volo.Abp.AutoMapper; +using Volo.Abp.Modularity; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.TenantManagement.Blazor +{ + [DependsOn( + typeof(AbpAutoMapperModule), + typeof(AbpTenantManagementHttpApiClientModule) + )] + public class AbpTenantManagementBlazorModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAutoMapperObjectMapper(); + + Configure(options => + { + options.AddProfile(validate: true); + }); + + Configure(options => + { + options.MenuContributors.Add(new MyProjectNameMenuContributor()); + }); + + Configure(options => + { + options.AdditionalAssemblies.Add(typeof(AbpTenantManagementBlazorModule).Assembly); + }); + } + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml new file mode 100644 index 0000000000..00e1d9a1c1 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xsd b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenuContributor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenuContributor.cs new file mode 100644 index 0000000000..11062a5e2a --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenuContributor.cs @@ -0,0 +1,23 @@ +using System.Threading.Tasks; +using Volo.Abp.UI.Navigation; + +namespace MyCompanyName.MyProjectName.Blazor.Menus +{ + public class MyProjectNameMenuContributor : IMenuContributor + { + public async Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name == StandardMenus.Main) + { + await ConfigureMainMenu(context); + } + } + + private Task ConfigureMainMenu(MenuConfigurationContext context) + { + //Add main menu items. + + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenus.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenus.cs new file mode 100644 index 0000000000..18d64be308 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenus.cs @@ -0,0 +1,11 @@ +namespace MyCompanyName.MyProjectName.Blazor.Menus +{ + public class MyProjectNameMenus + { + private const string Prefix = "MyProjectName"; + + //Add your menu items here... + //public const string Home = Prefix + ".MyNewMenuItem"; + + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/Tenants/Index.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/Tenants/Index.razor new file mode 100644 index 0000000000..fccf9239d6 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/Tenants/Index.razor @@ -0,0 +1,8 @@ +@page "/TenantManagement/Tenants" +@using Microsoft.Extensions.Localization +@using Volo.Abp.TenantManagement.Localization +@inject IStringLocalizer L +@{ +} +

    MyProjectName

    +

    @L["SamplePageMessage"]

    \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj new file mode 100644 index 0000000000..1bcaeccb0b --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj @@ -0,0 +1,20 @@ + + + + + + + netstandard2.1 + 3.0 + Volo.Abp.TenantManagement.Blazor + + + + + + + + + + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Import.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Import.razor new file mode 100644 index 0000000000..4685ac9893 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Import.razor @@ -0,0 +1,5 @@ +@using Microsoft.AspNetCore.Components.Web +@using Volo.Abp.AspNetCore.Components.WebAssembly +@using Volo.Abp.BlazoriseUI +@using Blazorise +@using Blazorise.DataGrid \ No newline at end of file From 0c215ddea3630e28bc94b06960dfdbbed13dab1c Mon Sep 17 00:00:00 2001 From: Ahmet Date: Thu, 24 Sep 2020 13:30:29 +0300 Subject: [PATCH 041/143] rename menu contributor class name --- .../AbpTenantManagementBlazorModule.cs | 4 ++-- ...ontributor.cs => TenantManagementBlazorMenuContributor.cs} | 4 ++-- .../{MyProjectNameMenus.cs => TenantManagementBlazorMenus.cs} | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) rename modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/{MyProjectNameMenuContributor.cs => TenantManagementBlazorMenuContributor.cs} (79%) rename modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/{MyProjectNameMenus.cs => TenantManagementBlazorMenus.cs} (63%) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs index 1429cf9d4a..793e83f818 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.DependencyInjection; using MyCompanyName.MyProjectName.Blazor; -using MyCompanyName.MyProjectName.Blazor.Menus; using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Routing; using Volo.Abp.AutoMapper; using Volo.Abp.Modularity; +using Volo.Abp.TenantManagement.Blazor.Menus; using Volo.Abp.UI.Navigation; namespace Volo.Abp.TenantManagement.Blazor @@ -25,7 +25,7 @@ namespace Volo.Abp.TenantManagement.Blazor Configure(options => { - options.MenuContributors.Add(new MyProjectNameMenuContributor()); + options.MenuContributors.Add(new TenantManagementBlazorMenuContributor()); }); Configure(options => diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenuContributor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenuContributor.cs similarity index 79% rename from modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenuContributor.cs rename to modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenuContributor.cs index 11062a5e2a..f21b480a88 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenuContributor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenuContributor.cs @@ -1,9 +1,9 @@ using System.Threading.Tasks; using Volo.Abp.UI.Navigation; -namespace MyCompanyName.MyProjectName.Blazor.Menus +namespace Volo.Abp.TenantManagement.Blazor.Menus { - public class MyProjectNameMenuContributor : IMenuContributor + public class TenantManagementBlazorMenuContributor : IMenuContributor { public async Task ConfigureMenuAsync(MenuConfigurationContext context) { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenus.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenus.cs similarity index 63% rename from modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenus.cs rename to modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenus.cs index 18d64be308..002fe04d88 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/MyProjectNameMenus.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenus.cs @@ -1,6 +1,6 @@ -namespace MyCompanyName.MyProjectName.Blazor.Menus +namespace Volo.Abp.TenantManagement.Blazor.Menus { - public class MyProjectNameMenus + public class TenantManagementBlazorMenus { private const string Prefix = "MyProjectName"; From 15d448d36aa85a7d6731b1967d6a2ce4a24568e9 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Thu, 24 Sep 2020 13:33:28 +0300 Subject: [PATCH 042/143] Update AbpTenantManagementBlazorModule.cs --- .../AbpTenantManagementBlazorModule.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs index 793e83f818..148f959b40 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs @@ -1,5 +1,4 @@ using Microsoft.Extensions.DependencyInjection; -using MyCompanyName.MyProjectName.Blazor; using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Routing; using Volo.Abp.AutoMapper; using Volo.Abp.Modularity; From 0bad93c17db9e8aade957d03f67498f0a7e57260 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Thu, 24 Sep 2020 15:13:52 +0300 Subject: [PATCH 043/143] Update MyCompanyName.MyProjectName.Blazor.csproj --- .../MyCompanyName.MyProjectName.Blazor.csproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index 340e386e3a..ed64f401db 100644 --- a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -1,4 +1,4 @@ - + From 45e7d6d22feacc49fbbd5852642dd107d57e011f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 24 Sep 2020 15:17:02 +0300 Subject: [PATCH 044/143] Updated the multi-tenancy doc in the rel-3.1 branch. --- docs/en/Multi-Tenancy.md | 491 +++++++++++++++++++++------------------ 1 file changed, 263 insertions(+), 228 deletions(-) diff --git a/docs/en/Multi-Tenancy.md b/docs/en/Multi-Tenancy.md index 5138c9de04..03b3420ada 100644 --- a/docs/en/Multi-Tenancy.md +++ b/docs/en/Multi-Tenancy.md @@ -1,53 +1,67 @@ -## Multi-Tenancy +# Multi-Tenancy -ABP Multi-tenancy module provides base functionality to create multi tenant applications. +Multi-Tenancy is a widely used architecture to create **SaaS applications** where the hardware and software **resources are shared by the customers** (tenants). ABP Framework provides all the base functionalities to create **multi tenant applications**. -Wikipedia [defines](https://en.wikipedia.org/wiki/Multitenancy) multi-tenancy as like that: +Wikipedia [defines](https://en.wikipedia.org/wiki/Multitenancy) the multi-tenancy as like that: > Software **Multi-tenancy** refers to a software **architecture** in which a **single instance** of software runs on a server and serves **multiple tenants**. A tenant is a group of users who share a common access with specific privileges to the software instance. With a multitenant architecture, a software application is designed to provide every tenant a **dedicated share of the instance including its data**, configuration, user management, tenant individual functionality and non-functional properties. Multi-tenancy contrasts with multi-instance architectures, where separate software instances operate on behalf of different tenants. -### Volo.Abp.MultiTenancy Package +## Terminology: Host vs Tenant -Volo.Abp.MultiTenancy package defines fundamental interfaces to make your code "multi-tenancy ready". So, install it to your project using the package manager console (PMC): +There are two main side of a typical SaaS / Multi-tenant application: -```` -Install-Package Volo.Abp.MultiTenancy -```` +* A **Tenant** is a customer of the SaaS application that pays money to use the service. +* **Host** is the company that owns the SaaS application and manages the system. -> This package is already installed by default with the startup template. So, most of the time, you don't need to install it manually. +The Host and the Tenant terms will be used for that purpose in the rest of the document. -Then you can add **AbpMultiTenancyModule** dependency to your module: +## Configuration -````C# -using Volo.Abp.Modularity; -using Volo.Abp.MultiTenancy; +### AbpMultiTenancyOptions: Enable/Disable Multi-Tenancy + +`AbpMultiTenancyOptions` is the main options class to **enable/disable the multi-tenancy** for your application. + +**Example: Enable multi-tenancy** -namespace MyCompany.MyProject +```csharp +Configure(options => { - [DependsOn(typeof(AbpMultiTenancyModule))] - public class MyModule : AbpModule - { - //... - } -} -```` + options.IsEnabled = true; +}); +``` + +> Multi-Tenancy is disabled in the ABP Framework by default. However, it is **enabled by default** when you create a new solution using the [startup template](Startup-Templates/Application.md). `MultiTenancyConsts` class in the solution has a constant to control it in a single place. + +### Database Architecture + +ABP Framework supports all the following approaches to store the tenant data in the database; + +* **Single Database**: All tenants are stored in a single database. +* **Database per Tenant**: Every tenant has a separate, dedicated database to store the data related to that tenant. +* **Hybrid**: Some tenants share a single databases while some tenants may have their own databases. -> With the "Multi-tenancy ready" concept, we intent to develop our code to be compatible with multi-tenancy approach. Then it can be used in a multi-tenant application or not, depending on the requirements of the final application. +[Tenant management module](Modules/Tenant-Management.md) (which comes pre-installed with the startup projects) allows you to set a connection string for any tenant (as optional), so you can achieve any of the approaches. -#### Define Entities +## Usage -You can implement **IMultiTenant** interface for your entities to make them multi-tenancy ready. Example: +Multi-tenancy system is designed to **work seamlessly** and make your application code **multi-tenancy unaware** as much as possible. -````C# +### IMultiTenant + +You should implement the `IMultiTenant` interface for your [entities](Entities.md) to make them **multi-tenancy ready**. + +**Example: A multi-tenant *Product* entity** + +````csharp using System; using Volo.Abp.Domain.Entities; using Volo.Abp.MultiTenancy; -namespace MyCompany.MyProject +namespace MultiTenancyDemo.Products { - public class Product : AggregateRoot, IMultiTenant + public class Product : AggregateRoot, IMultiTenant { - public Guid? TenantId { get; set; } //IMultiTenant defines TenantId property + public Guid? TenantId { get; set; } //Defined by the IMultiTenant interface public string Name { get; set; } @@ -56,319 +70,340 @@ namespace MyCompany.MyProject } ```` -IMultiTenant requires to define a **TenantId** property in the implementing entity (See [entity documentation](Entities.md) for more about entities). +* `IMultiTenant` interface just defines a `TenantId` property. + +When you implement this interface, ABP Framework **automatically** [filters](Data-Filtering.md) entities for the current tenant when you query from database. So, you don't need to manually add `TenantId` condition while performing queries. A tenant can not access to data of another tenant by default. -#### Obtain Current Tenant's Id +#### Why the TenantId Property is Nullable? -Your code may require to get current tenant's id (regardless of how it's retrieved actually). You can [inject](Dependency-Injection.md) and use **ICurrentTenant** interface for such cases. Example: +`IMultiTenant.TenantId` is **nullable**. When it is null that means the entity is owned by the **Host** side and not owned by a tenant. It is useful when you create a functionality in your system that is both used by the tenant and the host sides. -````C# -using Volo.Abp.DependencyInjection; +For example, `IdentityUser` is an entity defined by the [Identity Module](Modules/Identity.md). The host and all the tenants have their own users. So, for the host side, users will have a `null` `TenantId` while tenant users will have their related `TenantId`. + +> **Tip**: If your entity is tenant-specific and has no meaning in the host side, you can force to not set `null` for the `TenantId` in the constructor of your entity. + +#### When to set the TenantId? + +ABP Framework doesn't set the `TenantId` for you (because of the cross tenant operations, ABP can not know the proper `TenantId` in some cases). So, you need to set it yourself **when you create a new multi-tenant entity**. + +##### Best Practice + +We suggest to set the `TenantId` in the constructor and never allow to change it again. So, the `Product` class can be re-written as below: + +````csharp +using System; +using Volo.Abp.Domain.Entities; using Volo.Abp.MultiTenancy; -namespace MyCompany.MyProject +namespace MultiTenancyDemo.Products { - public class MyService : ITransientDependency + public class Product : AggregateRoot, IMultiTenant { - private readonly ICurrentTenant _currentTenant; + //Private setter prevents changing it later + public Guid? TenantId { get; private set; } - public MyService(ICurrentTenant currentTenant) + public string Name { get; set; } + + public float Price { get; set; } + + protected Product() { - _currentTenant = currentTenant; + //This parameterless constructor is needed for ORMs } - - public void DoIt() + + public Product(string name, float price, Guid? tenantId) { - var tenantId = _currentTenant.Id; - //use tenantId in your code... + Name = name; + Price = price; + TenantId = tenantId; //Set in the constructor } } } ```` -#### Change Current Tenant - -TODO: ... - -#### Determining Current Tenant - -The first thing for a multi-tenant application is to determine the current tenant on the runtime. Volo.Abp.MultiTenancy package only provides abstractions (named as tenant resolver) for determining the current tenant, however it does not have any implementation out of the box. - -**Volo.Abp.AspNetCore.MultiTenancy** package has implementation to determine the current tenant from current web request (from subdomain, header, cookie, route... etc.). See Volo.Abp.AspNetCore.MultiTenancy Package section later in this document. +> You can see the [entities document](Entities.md) for a more about entities and aggregate roots. -##### Custom Tenant Resolvers +You typically use the `ICurrentTenant` to set the `TenantId` while creating a new `Product`. -You can add your custom tenant resolver to **AbpTenantResolveOptions** in your module's ConfigureServices method as like below: +**Example: Creating a new product in a [Domain Service](Domain-Services.md)** -````C# -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Modularity; -using Volo.Abp.MultiTenancy; +````csharp +using System; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Domain.Services; -namespace MyCompany.MyProject +namespace MultiTenancyDemo.Products { - [DependsOn(typeof(AbpMultiTenancyModule))] - public class MyModule : AbpModule + public class ProductManager : DomainService { - public override void ConfigureServices(ServiceConfigurationContext context) + private readonly IRepository _productRepository; + + public ProductManager(IRepository productRepository) { - Configure(options => - { - options.TenantResolvers.Add(new MyCustomTenantResolveContributor()); - }); + _productRepository = productRepository; + } - //... + public async Task CreateAsync(string name, float price) + { + var product = new Product(name, price, CurrentTenant.Id); + return await _productRepository.InsertAsync(product); } } } ```` -`MyCustomTenantResolveContributor` must implement **ITenantResolveContributor** as shown below: +* `DomainService` base class (and some common base classes in the ABP Framework) provides the `CurrentTenant`, so you directly use it. Otherwise, you need to [inject](Dependency-Injection.md) the `ICurrentTenant` service. -````C# -using Volo.Abp.MultiTenancy; +### ICurrentTenant -namespace MyCompany.MyProject -{ - public class MyCustomTenantResolveContributor : ITenantResolveContributor - { - public void Resolve(ITenantResolveContext context) - { - context.TenantIdOrName = ... //find tenant id or tenant name from somewhere... - } - } -} -```` +`ICurrentTenant` is the main service to interact with the multi-tenancy infrastructure. + +`ApplicationService`, `DomainService`, `AbpController` and some other base classes already has pre-injected `CurrentTenant` properties. For other type of classes, you can inject the `ICurrentTenant` into your service. -A tenant resolver can set **TenantIdOrName** if it can determine it. If not, just leave it as is to allow next resolver to determine it. +#### Tenant Properties -#### Tenant Store +`ICurrentTenant` defines the following properties; -Volo.Abp.MultiTenancy package defines **ITenantStore** to abstract data source from the framework. You can implement ITenantStore to work with any data source (like a relational database) that stores information of your tenants. +* `Id` (`Guid`): Id of the current tenant. Can be `null` if the current user is a host user or the tenant could not be determined from the request. +* `Name` (`string`): Name of the current tenant. Can be `null` if the current user is a host user or the tenant could not be determined from the request. +* `IsAvailable` (`bool`): Returns `true` if the `Id` is not `null`. -... +#### Change the Current Tenant -##### Configuration Data Store +ABP Framework automatically filters the resources (database, cache...) based on the `ICurrentTenant.Id`. However, in some cases you may want to perform an operation on behalf of a specific tenant, generally when you are in the host context. -There is a built in (and default) tenant store, named ConfigurationTenantStore, that can be used to store tenants using standard [configuration system](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/) (with [Microsoft.Extensions.Configuration](https://www.nuget.org/packages/Microsoft.Extensions.Configuration) package). Thus, you can define tenants as hard coded or get from your appsettings.json file. +`ICurrentTenant.Change` method changes the current tenant for a limited scope, so you can safely perform operations for the tenant. -###### Example: Define tenants as hard-coded +**Example: Get product count of a specific tenant** -````C# +````csharp using System; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Data; -using Volo.Abp.Modularity; -using Volo.Abp.MultiTenancy; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Domain.Services; -namespace MyCompany.MyProject +namespace MultiTenancyDemo.Products { - [DependsOn(typeof(AbpMultiTenancyModule))] - public class MyModule : AbpModule + public class ProductManager : DomainService { - public override void ConfigureServices(ServiceConfigurationContext context) + private readonly IRepository _productRepository; + + public ProductManager(IRepository productRepository) { - Configure(options => + _productRepository = productRepository; + } + + public async Task GetProductCountAsync(Guid? tenantId) + { + using (CurrentTenant.Change(tenantId)) { - options.Tenants = new[] - { - new TenantConfiguration( - Guid.Parse("446a5211-3d72-4339-9adc-845151f8ada0"), //Id - "tenant1" //Name - ), - new TenantConfiguration( - Guid.Parse("25388015-ef1c-4355-9c18-f6b6ddbaf89d"), //Id - "tenant2" //Name - ) - { - //tenant2 has a seperated database - ConnectionStrings = - { - {ConnectionStrings.DefaultConnectionStringName, "..."} - } - } - }; - }); + return await _productRepository.GetCountAsync(); + } } } } ```` -###### Example: Define tenants in appsettings.json +* `Change` method can be used in a **nested way**. It restores the `CurrentTenant.Id` to the previous value after the `using` statement. +* When you use `CurrentTenant.Id` inside the `Change` scope, you get the `tenantId` provided to the `Change` method. So, the repository also get this `tenantId` and can filter the database query accordingly. +* Use `CurrentTenant.Change(null)` to change scope to the host context. + +> Always use the `Change` method with a `using` statement like done in this example. -First create your configuration from your appsettings.json file as you always do. +### Data Filtering: Disable the Multi-Tenancy Filter -````C# -using System.IO; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Modularity; +As mentioned before, ABP Framework handles data isolation between tenants using the [Data Filtering](Data-Filtering.md) system. In some cases, you may want to disable it and perform a query on all the data, without filtering for the current tenant. + +**Example: Get count of products in the database, including all the products of all the tenants.** + +````csharp +using System; +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Domain.Services; using Volo.Abp.MultiTenancy; -namespace MyCompany.MyProject +namespace MultiTenancyDemo.Products { - [DependsOn(typeof(AbpMultiTenancyModule))] - public class MyModule : AbpModule + public class ProductManager : DomainService { - public override void ConfigureServices(ServiceConfigurationContext context) - { - var configuration = BuildConfiguration(); + private readonly IRepository _productRepository; + private readonly IDataFilter _dataFilter; - Configure(configuration); + public ProductManager( + IRepository productRepository, + IDataFilter dataFilter) + { + _productRepository = productRepository; + _dataFilter = dataFilter; } - private static IConfigurationRoot BuildConfiguration() + public async Task GetProductCountAsync() { - return new ConfigurationBuilder() - .SetBasePath(Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) - .Build(); + using (_dataFilter.Disable()) + { + return await _productRepository.GetCountAsync(); + } } } } + ```` -Then add a "**Tenants**" section to your appsettings.json: +See the [Data Filtering document](Data-Filtering.md) for more. -````json -"Tenants": [ - { - "Id": "446a5211-3d72-4339-9adc-845151f8ada0", - "Name": "tenant1" - }, - { - "Id": "25388015-ef1c-4355-9c18-f6b6ddbaf89d", - "Name": "tenant2", - "ConnectionStrings": { - "Default": "...write tenant2's db connection string here..." - } - } - ] -```` +> Note that this approach won't work if your tenants have **separate databases** since there is no built-in way to query from multiple database in a single database query. You should handle it yourself if you need it. -##### Volo.Abp... Package (TODO) +## Infrastructure -TODO: This package implements ITenantStore using a real database... +### Determining the Current Tenant -#### Tenant Information +The first thing for a multi-tenant application is to determine the current tenant on the runtime. -ITenantStore works with **TenantConfiguration** class that has several properties for a tenant: +ABP Framework provides an extensible **Tenant Resolving** system for that purpose. Tenant Resolving system then used in the **Multi-Tenancy Middleware** to determine the current tenant for the current HTTP request. -* **Id**: Unique Id of the tenant. -* **Name**: Unique name of the tenant. -* **ConnectionStrings**: If this tenant has dedicated database(s) to store it's data, then connection strings can provide database connection strings (it may have a default connection string and connection strings per modules - TODO: Add link to Abp.Data package document). +#### Tenant Resolvers -A multi-tenant application may require additional tenant properties, but these are the minimal requirements for the framework to work with multiple tenants. +##### Default Tenant Resolvers -#### Change Tenant By Code +The following resolvers are provided and configured by default; -TODO... +* `CurrentUserTenantResolveContributor`: Gets the tenant id from claims of the current user, if the current user has logged in. **This should always be the first contributor for the security**. +* `QueryStringTenantResolveContributor`: Tries to find current tenant id from query string parameters. The parameter name is `__tenant` by default. +* `FormTenantResolveContributor`:Tries to find current tenant id from form parameters. The parameter name is `__tenant` by default. +* `RouteTenantResolveContributor`: Tries to find current tenant id from route (URL path). The variable name is `__tenant` by default. If you defined a route with this variable, then it can determine the current tenant from the route. +* `HeaderTenantResolveContributor`: Tries to find current tenant id from HTTP headers. The header name is `__tenant` by default. +* `CookieTenantResolveContributor`: Tries to find current tenant id from cookie values. The cookie name is `__tenant` by default. -### Volo.Abp.AspNetCore.MultiTenancy Package +###### Problems with the NGINX -Volo.Abp.AspNetCore.MultiTenancy package integrate multi-tenancy to ASP.NET Core applications. To install it to your project, run the following command on PMC: +You may have problems with the `__tenant` in the HTTP Headers if you're using the [nginx](https://www.nginx.com/) as the reverse proxy server. Because it doesn't allow to use underscore and some other special characters in the HTTP headers and you may need to manually configure it. See the following documents please: +http://nginx.org/en/docs/http/ngx_http_core_module.html#ignore_invalid_headers +http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers -```` -Install-Package Volo.Abp.AspNetCore.MultiTenancy -```` +###### AbpAspNetCoreMultiTenancyOptions -Then you can add **AbpAspNetCoreMultiTenancyModule** dependency to your module: +`__tenant` parameter name can be changed using `AbpAspNetCoreMultiTenancyOptions`. -````C# -using Volo.Abp.Modularity; -using Volo.Abp.AspNetCore.MultiTenancy; +**Example:** -namespace MyCompany.MyProject +````csharp +services.Configure(options => { - [DependsOn(typeof(AbpAspNetCoreMultiTenancyModule))] - public class MyModule : AbpModule - { - //... - } -} + options.TenantKey = "MyTenantKey"; +}); ```` -#### Multi-Tenancy Middleware +> However, we don't suggest to change this value since some clients may assume the the `__tenant` as the parameter name and they might need to manually configure then. -Volo.Abp.AspNetCore.MultiTenancy package includes the multi-tenancy middleware... +##### Domain/Subdomain Tenant Resolver -````C# -app.UseMultiTenancy(); -```` +In a real application, most of times you will want to determine current tenant either by subdomain (like mytenant1.mydomain.com) or by the whole domain (like mytenant.com). If so, you can configure the `AbpTenantResolveOptions` to add the domain tenant resolver. -TODO:... +**Example: Add a subdomain resolver** -#### Determining Current Tenant From Web Request - -Volo.Abp.AspNetCore.MultiTenancy package adds following tenant resolvers to determine current tenant from current web request (ordered by priority). These resolvers are added and work out of the box: - -* **CurrentUserTenantResolveContributor**: Gets the tenant id from claims of the current user, if the current user has logged in. **This should always be the first contributor for security**. -* **QueryStringTenantResolveContributor**: Tries to find current tenant id from query string parameter. Parameter name is "__tenant" by default. -* **RouteTenantResolveContributor**: Tries to find current tenant id from route (URL path). Variable name is "__tenant" by default. So, if you defined a route with this variable, then it can determine the current tenant from the route. -* **HeaderTenantResolveContributor**: Tries to find current tenant id from HTTP header. Header name is "__tenant" by default. -* **CookieTenantResolveContributor**: Tries to find current tenant id from cookie values. Cookie name is "__tenant" by default. +````csharp +Configure(options => +{ + options.AddDomainTenantResolver("{0}.mydomain.com"); +}); +```` -> If you use nginx as a reverse proxy server, please note that if `TenantKey` contains an underscore or other special characters, there may be a problem, please refer to: -http://nginx.org/en/docs/http/ngx_http_core_module.html#ignore_invalid_headers -http://nginx.org/en/docs/http/ngx_http_core_module.html#underscores_in_headers +* `{0}` is the placeholder to determine current tenant's unique name. +* Add this code to the `ConfigureServices` method of your [module](Module-Development-Basics.md). +* This should be done in the *Web/API Layer* since the URL is a web related stuff. +##### Custom Tenant Resolvers -"__tenant" parameter name can be changed using AbpAspNetCoreMultiTenancyOptions. Example: +You can add implement your custom tenant resolver and configure the `AbpTenantResolveOptions` in your module's `ConfigureServices` method as like below: -````C# -services.Configure(options => +````csharp +Configure(options => { - options.TenantKey = "MyTenantKey"; + options.TenantResolvers.Add(new MyCustomTenantResolveContributor()); }); ```` -##### Domain Tenant Resolver - -In a real application, most of times you will want to determine current tenant either by subdomain (like mytenant1.mydomain.com) or by the whole domain (like mytenant.com). If so, you can configure AbpTenantResolveOptions to add a domain tenant resolver. - -###### Example: Add a subdomain resolver +`MyCustomTenantResolveContributor` must inherit from the `TenantResolveContributorBase` (or implement the `ITenantResolveContributor`) as shown below: -````C# -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.AspNetCore.MultiTenancy; -using Volo.Abp.Modularity; +````csharp using Volo.Abp.MultiTenancy; -namespace MyCompany.MyProject +namespace MultiTenancyDemo.Web { - [DependsOn(typeof(AbpAspNetCoreMultiTenancyModule))] - public class MyModule : AbpModule + public class MyCustomTenantResolveContributor : TenantResolveContributorBase { - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - //Subdomain format: {0}.mydomain.com - //Adding as the second highest priority resolver after 'CurrentUserTenantResolveContributor' to - //ensure the user cannot impersonate a different tenant. - options.TenantResolvers.Insert(1, new DomainTenantResolveContributor("{0}.mydomain.com")); - }); + public override string Name => "Custom"; - //... + public override void Resolve(ITenantResolveContext context) + { + //TODO... } } } ```` -{0} is the placeholder to determine current tenant's unique name. +* A tenant resolver should set `context.TenantIdOrName` if it can determine it. If not, just leave it as is to allow the next resolver to determine it. +* `context.ServiceProvider` can be used if you need to additional services to resolve from the [dependency injection](Dependency-Injection.md) system. + +#### Multi-Tenancy Middleware -Instead of ``options.TenantResolvers.Insert(1, new DomainTenantResolveContributor("{0}.mydomain.com"));`` you can use this shortcut: +Multi-Tenancy middleware is an ASP.NET Core request pipeline [middleware](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/middleware) that determines the current tenant from the HTTP request and sets the `ICurrentTenant` properties. -````C# -options.AddDomainTenantResolver("{0}.mydomain.com"); +Multi-Tenancy middleware is typically placed just under the [authentication](https://docs.microsoft.com/en-us/aspnet/core/security/authentication) middleware (`app.UseAuthentication()`): + +````csharp +app.UseMultiTenancy(); ```` -###### Example: Add a domain resolver +> This middleware is already configured in the startup templates, so you normally don't need to manually add it. + +### Tenant Store + +`ITenantStore` is used to get the tenant configuration from a data source. -````C# -options.AddDomainTenantResolver("{0}.com"); +#### Tenant Management Module + +The [tenant management module](Modules/Tenant-Management) is **included in the startup templates** and implements the `ITenantStore` interface to get the tenants and their configuration from a database. It also provides the necessary functionality and UI to manage the tenants and their connection strings. + +#### Configuration Data Store + +**If you don't want to use the tenant management module**, the `DefaultTenantStore` is used as the `ITenantStore` implementation. It gets the tenant configurations from the [configuration system](Configuration.md) (`IConfiguration`). You can either configure the `AbpDefaultTenantStoreOptions` [options](Options.md) or set it in your `appsettings.json` file: + +**Example: Define tenants in appsettings.json** + +````json +"Tenants": [ + { + "Id": "446a5211-3d72-4339-9adc-845151f8ada0", + "Name": "tenant1" + }, + { + "Id": "25388015-ef1c-4355-9c18-f6b6ddbaf89d", + "Name": "tenant2", + "ConnectionStrings": { + "Default": "...tenant2's db connection string here..." + } + } + ] ```` +> It is recommended to **use the Tenant Management module**, which is already pre-configured when you create a new application with the ABP startup templates. + +### Other Multi-Tenancy Infrastructure + +ABP Framework was designed to respect to the multi-tenancy in every aspect and most of the times everything will work as expected. + +BLOB Storing, Caching, Data Filtering, Data Seeding, Authorization and all the other services are designed to properly work in a multi-tenant system. + +## The Tenant Management Module + +ABP Framework provides all the the infrastructure to create a multi-tenant application, but doesn't make any assumption about how you manage (create, delete...) your tenants. + +The [Tenant Management module](Modules/Tenant-Management.md) provides a basic UI to manage your tenants and set their connection strings. It is pre-configured for the [application startup template](Startup-Templates/Application.md). + ## See Also * [Features](Features.md) \ No newline at end of file From 84df6a79527b3a860267e09fa8bfe352e3544354 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 24 Sep 2020 15:30:42 +0300 Subject: [PATCH 045/143] docs: improve react native getting started doc #4615 --- docs/en/Getting-Started-React-Native.md | 79 ++++++++++++++----- docs/en/images/react-native-introduction.gif | Bin 0 -> 970645 bytes 2 files changed, 60 insertions(+), 19 deletions(-) create mode 100644 docs/en/images/react-native-introduction.gif diff --git a/docs/en/Getting-Started-React-Native.md b/docs/en/Getting-Started-React-Native.md index ec27d09463..28f56e4b69 100644 --- a/docs/en/Getting-Started-React-Native.md +++ b/docs/en/Getting-Started-React-Native.md @@ -1,10 +1,57 @@ # Getting Started with the React Native +````json +//[doc-params] +{ + "Tiered": ["No", "Yes"] +} +```` + ABP platform provide basic [React Native](https://reactnative.dev/) startup template to develop mobile applications **integrated to your ABP based backends**. -When you **create a new application** as described in the [getting started document](Getting-Started.md), you have to add `-m react-native` option to include `react-native` project in your solution. +![React Native gif](./images/react-native-introduction.gif) + +## How to Prepare Development Environment + +Please follow the steps below to prepare your development environment for React Native. + +1. **Install Node.js:** Please visit [Node.js downloads page](https://nodejs.org/en/download/) and download proper Node.js v12 or v14 installer for your OS. An alternative is to install [NVM](https://github.com/nvm-sh/nvm) and use it to have multiple versions of Node.js in your operating system. +2. **[Optional] Install Yarn:** You may install Yarn v1 (not v2) following the instructions on [the installation page](https://classic.yarnpkg.com/en/docs/install). Yarn v1 delivers an arguably better developer experience compared to npm v6 and below. You may skip this step and work with npm, which is built-in in Node.js, instead. +3. **[Optional] Install VS Code:** [VS Code](https://code.visualstudio.com/) is a free, open-source IDE which works seamlessly with TypeScript. Although you can use any IDE including Visual Studio or Rider, VS Code will most likely deliver the best developer experience when it comes to React Native projects. +4. **Install an Emulator:** React Native applications need an Android emulator or an iOS simulator to run on your OS. See the [Android Studio Emulator](https://docs.expo.io/workflow/android-simulator/) or [iOS Simulator](https://docs.expo.io/workflow/ios-simulator/) on expo.io documentation to learn how to set up an emulator. + + +## How to Start a New React Native Project + +You have multiple options to initiate a new React Native project that works with ABP: + +### 1. Using ABP CLI + +ABP CLI is probably the most convenient and flexible way to initiate an ABP solution with a React Native application. Simply [install the ABP CLI](../../CLI.md) and run the following command in your terminal: + +```shell +abp new MyCompanyName.MyProjectName -csf -u -m react-native +``` + +> To see further options in the CLI, please visit the [CLI manual](../../CLI.md). + +This command will prepare a solution with an **Angular** or an **MVC** (depends on your choice), a **.NET Core**, and a **React Native** project in it. + +### 2. Direct Download + +You may [download a solution scaffold directly on ABP.io](https://abp.io/get-started) if you are more comfortable with GUI or simply want to try ABP without installing the CLI. -## Configure Your Local IP Address +Please do the following: + +1. Click on the "DIRECT DOWNLOAD" tab. +2. Fill out the short form about your project. +3. Click on the "Create now" button. + +...and a customized download will start in a few seconds. + +## How to Configure & Run the Backend + +> React Native application does not trust the auto-generated .NET HTTPS certificate. You should use **HTTP** during the development. A React Native application running on an Android emulator or a physical phone **can not connect to the backend** on `localhost`. To fix this problem, it is necessary to run the backend application on your **local IP address**. @@ -25,19 +72,14 @@ A React Native application running on an Android emulator or a physical phone ** {{ end }} -## Run the Server Application - Run the backend application as described in the [getting started document](Getting-Started.md). -> React Native application does not trust the auto-generated .NET HTTPS certificate. You should use **HTTP** during the development. -Go to the `react-native` folder, open a command line terminal, type the `yarn` command (we suggest to the [yarn](https://yarnpkg.com/) package manager while `npm install` will also work): +## How to Configure & Run the React Native Application -```bash -yarn -``` - -* Open the `Environment.js` in the `react-native` folder and replace the `localhost` address on the `apiUrl` and `issuer` properties with your local IP address as shown below: +1. Make sure the [database migration is complete](./Getting-Started?UI=NG&DB=EF&Tiered=No#create-the-database) and the [API is up and running](./Getting-Started?UI=NG&DB=EF&Tiered=No#run-the-application). +2. Open `react-native` folder and run `yarn` or `npm install` if you have not already. +3. Open the `Environment.js` in the `react-native` folder and replace the `localhost` address on the `apiUrl` and `issuer` properties with your local IP address as shown below: ![react native environment local IP](images/rn-environment-local-ip.png) @@ -51,22 +93,21 @@ yarn {{ end }} -Once all node modules are loaded, execute `yarn start` (or `npm start`) command: - -```bash -yarn start -``` +4. Run `yarn start` or `npm start`. Wait Expo CLI to start. Expo CLI opens the management interface on the `http://localhost:19002/` address. -Wait Expo CLI to start. Expo CLI opens the management interface on the `http://localhost:19002/` address. +> The React Native application was generated with [Expo](https://expo.io/). Expo is a set of tools built around React Native to help you quickly start an app and, while it has many features. ![expo-interface](images/rn-expo-interface.png) In the above management interface, you can start the application with an Android emulator, an iOS simulator or a physical phone by the scan the QR code with the [Expo Client](https://expo.io/tools#client). -> See the [Android Studio Emulator](https://docs.expo.io/workflow/android-simulator/), [iOS Simulator](https://docs.expo.io/workflow/ios-simulator/) documents on expo.io. - ![React Native login screen on iPhone 11](images/rn-login-iphone.png) Enter **admin** as the username and **1q2w3E*** as the password to login to the application. The application is up and running. You can continue to develop your application based on this startup template. + + +## See Also + +* [React Native application structure](./Startup-Templates/Application.md#react-native) \ No newline at end of file diff --git a/docs/en/images/react-native-introduction.gif b/docs/en/images/react-native-introduction.gif new file mode 100644 index 0000000000000000000000000000000000000000..15963556aa3fecc1b85ca3b215f8106ce7581336 GIT binary patch literal 970645 zcmeF21y>Z@7w)I%0fw%jyHP@#p&LOI0Ricd8W5FIhwko_29*}+7`jtLKw{{Ik&u+R z?|22MCL6P$;OnU0B>k&T&&k(r5!nTeU1iIW-5!u+3D z;LIGtEKGDP?A)wyE;c+aHabZ*Iu&*<0d_7y4t6dMPGPRR7H(dCZeC#?YG2+*!n~S1 zyuOe40HOi_F#!gYAmD)@eVCx2un?`k5Pj(Xu9%dNTZ1s*p)f#P7$6}`nYAVX=?g|>b zOPcc9np&EA|7k?dP>9*c$oMH0%~P@GPe1BBGkN+f*1%My%hdFRx%`%;rIn?V-Ah|* z2YY*G=U1-eJg%8mZmw?bZtfng9v+_Ap6eA}&-cBMUS4m#y`8kZoxQxhyXDXub^Ng$a;FgYnXgGVAeGdnLQ?^7aoVNzjX z%2aW2N$K=@c~oI};=eDSKUbM))l}Bi*3^Cf*4UWS*4*6Emgmsk-qqRNkM8d6?(XU7 z=Fetsh)5V79-W?^`ALlU^?UWVwDRxY%b1Ow^|j57&E1X7y^XECot>TCo!#Bt z{k?;Y{XVY!)rI}N_5Fj5gM*{PBka-1>G28n@L!!@9G_pD zonM@v|2?`mySO+%zPLF0&;I_syz+Wlth=GCs;lO?k!6O3z0qpm}s@@JZJ`VP5?_7MG*&O_xTpUI0 zJl)yey4X8-viW$jX=-b**?D@rb@29a@CFF|52pWd74g5v|EKEzQ}zEURfIS|sTq@2 zZ9#Vk_$z;2pFeMu2x-9e+<1KM?)F1crbxYH5#s6UoxD+XZ*!txW05WL(Fa@ zSNoe|cNm1u5j^;F{$z^6T@& z*`A9t&Bn@wZ_YoySdKOd|Mr=yCVeV^WKMU&O?Xj9E<7Ya;LmVLRc{0i^S+(G%{ zmz{xkY?lFJHT7GgNe`SFmma^~n#fa#VXIkWZSg-`05ayZQBC ziQ^+iWtX?*!m*AS*(&Wf^apZnxo#UfQ#qm^C*)gw-e2V!zZ+d@=^D82Tf?Q5jeUP; z*B?1tJ>XS%dx_l`{q(r2^WW{&*}>{$R~HTkz~{rDAhgbyAi^6bQm<(VPD9IaHL7um zIX$X1@o9L*xMJ+JIJ@Hb5S5k0LRDJaJA3uw$MRRXktQ;msoVxpONHNaBkxN#$d%Tf zrRaWHk0+F_BK-tHTbtupX!(;T8_)Bu1QcjYO{OM@to@`jyyQi z^&7eBjS*Xg+u4MU>8XxMj$vn@;`gz|dg9GjDNxacLz%dTzqFcp#VOY*Ngqs${TO>E zsgfNh7JHLoDGlaNSrJXZaOgegmoLunC`o^{|GA>{xX%XMSR5 zGBz7{rkB`%2l|o-=Qi6~bZa{L`x`kZe7SU`PW|cY0_MijC*TEc=hEkcYty@T_G>>Z zN*05fmZT$}{m}Dw668!Y@pUw6s_xQHgmRAAdY}J=TX==L-lExmowFzSq9ftXdc};th6bcs|HQo#8e~}G z)0FvA4Br_lW?AkYRNStMe>1zma;r6@!g!h(sb|mehfqtI>`78$YzY_lwI*VHIw@tW zgy)g=kd72(N-ngNk7#%ZA$tlh*5l??aM4lza++3XUkX3dB6~U#q8FONZsxm5eq0At z=aaRVJ5`QH2CBjjU=h;sMDboi#&C@9_Jf4$F{fa=?5VyoiEqRDZnm%Cn9Zn%#rzZb zp`7p$y>jUZKZ7@|XL$$qGgqIT_O(BCLwqP{8kt%wG#)kZ!fXx>bI_Dsa~T** z4XWN=;%5nv(^nV(lD(a`V;HT~R6tY2yIlo8#|&vmmp$n8)B?lz`S-<FJf;~EV@n9YbH9+Vi7r+6X7ndxp&rh+YI@D-D)O}%x>oU1-QgSzPFW9zhSSN&q~b+Jx*8;o7X zEbU_b5>J9i{Bp%zt?Wo;I@uFGAR|?;DjY)YC^R?&cA09K2vXwY(;c6hsipnV^y^S2 zx8YJ{OfNu6?}olKcgv*xc10~#(jDW3Rl%{Y-t-Gav&TM_0QUq^4hS6zCR}AN47S(e zC*3oV$c2IF>YVYVskdyzNmLnD5#@2b`g=MrZe}tk8poMhLHgggSwp>XfkTz~@@=>E=J}-z+^oY~&6HEKNRonXFfSvqpVsVq%W!=wF zqXd8XV)~ip8<`(QgRe*I934;m=O$&I7`APEap4YdB{e_scl>#Bc_*iUr}VgI^au7( zEwJn8vu_|c|4&eY{3b8%YJ}YCG+k7FTlBHtgws7X=a>AdD*4Ss%>7vu@B4lIm;SS& zAFx`(^aj0a@#qWp$fg>03)jemykM$X(f50jH4J30$yTrA`4t~`cAK*DzPuVc(Jl#E zG#{w{7N{B3Y1BCR?>GQ=iy`mAT@60IKh442?LO|h`89d}w@r!fpoB;Il~V6b4j$`O zBEhfA8r=QuN8I(`$Gcx2Eu7u}v`~b*A5AVl67r!)u23-gAd`%br-&e!RuFA7ik?1* z$v22B^5ylE(lDLM0Q@FTt;or+*(tCNp`;<_c@`bOBy+FPbX*!rjjHcJN1M`-+w z2*`{;X+qCyCxQurc+d?V9Mqf#@Y;v%D>hoTCaqw?va zisz#WO`|g^qAKVk{f5GlE24{rqRUNV8hm3uMaGm>#C*Mqs%|DvFe0}Si|sRw9q^4E z%8VVUh_%GvjbFu1(8or_LAv?nrY z+ARR6b=vbRfXU}HC_2rmCCz#v&E`7Ib|LL~RI+JQ8X^k-MFAX#)1`*fym1jtlqSEN_hz|yF1bTQxg#yPV+*+x*SS*+c{4J3V+_f&etGj*d5bN1OAC1` z*Lj$h+&LUW{-#;}wqO2kR{nlV{=7{7;dMTi;nS(ir*pGU6MOl8vp(Ile7alsbWfBo zc>M_^TL3XH!1phZ*G?g9Er8zS0v8Klt@-59DO9qBN`A@ojD_-h=@Hu5Ze{=|pa>6J z$i-O1EnCEsUBuT~#JgA|uwNu}Q}mFrSc14%O1Aisd9ieBu^?lSynitftVD&egfJ1H z?q8yjU82=mqO(|{cT-}(SZXL+`oz5Sseh?SHUO`-)MByJ@=GbFIY3>Y%v`q2(Y(xA zr|gw~*(=5}kNwgY*<~KtWp+1Z76NGu=7s!O<&t|T4Cbk{t)C>tVqGwJVXrD8{VO6{ zD@Jh@6``+U<3}nI%wvo2}K7Q`N^e)mX-w zQ`wqx^P0c@HCNd+H?1{y=HLTa@cm*n3koD+Sc~sk3%sq`-v^4IK_Ug!5*UyawiZtp z3?-?i6RZjs_XM^}*FqQyBnkjV zqoB=+U@inm20=1{A%uy6DNqDG0H`YfC^7|P6Kr9>1*HeHWahMFx3%Q{ZppuGDPU?X zl4~vb-IDCuB7y=jqk*boVDUsSLn2VM7GJ~=*!UYrg9bLow9$w)Ga$e+Xpn>~*)KjhHcIbF;s5Zn;# zZ{8%uPykD8@^ww7SSqIBQo|8;=*G&oSp@KHCTl8?c^>F0&c*dmAVnDDd z{BM+GWr;wjHSs1E`V&C_O$2+LlJ+D5*$+T0=vp^HsD%|Z&i!0iSD;J#FMGTe}fpXkSDN{Ctyhg z`&tjWxD7Z44)_TTI341>5gTx}7ziE%v0;GBi9^x2_MzCNq4>L@MEG#B{BWwpaC+cy zihN%tbU1qqO&-`-V9_nu-b2>j?JhXtlv7>=@2*@L;bcgL0Y=GT$<&C^MtD<`#b|T; zXe+#%Q)aY1ceEz3yB9h-;Fesg*F6$D!tVlvS`hriLRVoVZVV)tDd-%EKyC@z69k34 zs8xketjkYqT1;#QPVDAR?6*%GE=?TYO>9^Itq=sSYX@A>pkA#ZO}4?;n1Nu6Nh=fq zkaP-VF)1ZR;A1`D9XrrxI`C#{QpkEh6GdRDN6>dQg&>(^?3jixPqX}+X0x1F2xzK0 z9D&Cc4#G!=^t!pnN4n&bxfMo>pg&+ZYam_wSRZ_puWCjtn@$ZNH`yXFp ze`vj*rKwDo#De$|iS0J<7}zFzu+YyKAO`>#Cic)5(2{fa)0%nCR$!hJULE1N2@gn3&0UUx9wrVTnFlms12%AQFW+||YjAJofII205a9t$HgLD= zJPm5dfq5ZWVIkFWA=Lu>hyhqzIm?+ftMP9^+I>v6;|I0;7}WZQaNgpVj>XF5#p-{H zU*djzC7p#?x4@7P(WxqyL?8@H6*qZXtV7Ha>kVDlD*EPwp5 zT>blg^=f&B-w*gE5zOfdWILE8KLGLu)Pb4$paHenxhv2W4D&LOfN71=qxN^zvgXqA zQ`cp@oHe+}^5XciVh%=85JY`kOZ8!$FMnO2b6sd<9do!Y#@8&P~1iE%WNF z>XZg}U$_xyv1_+(~7X#9sAf04d)g~L9p z!?>}Xq5Q*<&cm^lLyh$Zyf8>;R)icGD_V5otCqeCIrW&_bGm3qiu)6F44F7No zL*2H1x^3^e?OeS@<8FIc@7h;K8Xw<84Sn@OOlBsn#DnTkPv3%PS5d> z2riZ&6HDlWCBQ=v_`nFWu>?XWg2n(yHk!x^0Zu>>y+MN#3W$6W1lbrusi{8$D>%S( zVF&>^n1qr#({K&VK+3EbN^i8T7EL2;)t70sp%Ke05C|bE1osic5cz5g-FT$&!j_$t zkzf!WAqAT~Dv@euB3D5e3t1H3naoiSVWG*U21VvD0IM(><&nnAr zAHFA^so>-DMf?4+4$+AJF3wij{S2WDByW}=lIsZ`u<8^cyvI8X29_)N5q&!C;V0nL z%%*=TeK9yHB%f=VOIgBCKw|Lb9w~qZVV!46^*?FknM-yjvnaL>8M0qMJHO-HR|oQ5 zTzaf@yvO0Q+%+8}@Nl9^#=SL$h!ga)q5NVk$o-#Hs{;=%Bkx1^zkl(qeA40Z z4`cby|L@UqR|MH;U zU5GX+i~(m$$itbS_E4Lf{gkkDU4V^9mRDDHm@6&y#lulfhhXcF!Uo$(#cOm?joyVK z3auyELG@by(JE9tr0(jhr;EY60zht!q!`E`KDV`rfWz1NlnKc>^l@SayJ#wM3zpB; z>6-gkl@y?9WLOwbep8J~k20qltk2@rPl8Vvjn#Peys9pka~FkAiK0}oD%st z3ZJ)35&JkaUqjCQ`!C0~qwhc};PVCr=SGjVoHxp*0!aZCIyOeMe@EI5%9Q!?$!mz6 z`skdNUJwpcrEnJtm;7|@$bbK6MRiAGmy3Z$V2JA%oAnVMIRd@MIY;c>_U6~i2urq> zA7uf^-<}_%!rPx2EHo!;?B|ROhCgO-SO=DSvz2*0PsSH{^D5WNt+>4N28(#8lm(d^p#WRhugemOV8BEpD%HC4lm~ZSwCqm zG(AE75Vr==X;M?OfrXWs7^_gzlA=R8YM&#YUz_wQUcZ^bg|PO~{DVlVENyw}2r`+i zCgM?U%D99HxelFbRZxHg5}l-P0nZd`RayQ{MaVZ4UU)}Rktga3rv!w8Op$aiuZrmP z&+(Y&pXC?^O+`QN<8UcEdnodDI;PVld054fa>EY+dBwk=nVa%Zim@h+r+9|8>#9Ff zk~>nWca8j_SyS=vbi#*CGuFaWX@WVjD4L<5AhJyoQB)irg*Hu+?IUd+lbPgrcv>L^|O)X}eYDYBJvVr(mMCE`dz=P)kW*` zru)>IkKex^*Qc!_z3W%#OSmeZGABs|)w@ge*zNbbSIqU|M9W!L<_!ujC5X@91NE zXh@)p=?44ItFgCRufZ`kqSSL@ED+@gXk`%D$17DfAvj@p3x+(n0!$ds7KMlw88koq?~QkAY2|aEU5%1%Q4qm?0nu_* zDJTqv&l_Eb|8fjOe^O7v9Nk@OJCDW#_Ny^RdqvwqRH(}N)E=N7bfWHiNcu6MVxS-r zgQ+6eFLm#DnyT>*!^8}qr=pa=m(5asBR65E(rlNkgOOZLJRpJx?I9OIBG3O3A0X_3qT85KaJ(2M$<)O z`{B-BPUeI~NflN;jhgejHLVRZws;2#s|O{VzcPNv!zC+zba?QR(1OGb2cEuce5G#@ z5AI?M1=townGu5NT&2VKxk5;A%JN2;otR&YD5D^yibyJOK|iM&lGaJ}H(if)HzVYa zD?!KH1}nj}Ynxwg;^(M?62C!d%NK9Yq-G@tWjup2fv{Qj!tn!i zx>+ryJVh{l9UFcYxDW-M;uuE{0eKcJLSBxkQ2A!QetO!{myhb{jBYWmy zhAoXhJ4eoMgge(A(IuKPCSED09UQQoxXHZL+||F^?+Na#z8+G;cCWNZSX$cwPYE=A z3qd~8!KB``_|&5U1kwc|K|6+ilX`DRjY~u5uoDp~wWVZIS9cWDex zK$ZlrA$$EJ&C`61T>x%k%W?dD%Xr(S0Rc#KSrtWL7 z!b)ajrfLt@VWy#1;r@+KLTyL#twM%)zP4P|x){$~cF)h~Ha+8>{pK3-f) z|E3F2=~_zrUflKXE_-0QrC+bkS2^@>gG5ocE|>_=t}Lh0Brc>%2~Z<|bCjbHZ7rm| z#U5RF#sp2xA_Fn6~j-SNpDS`<7T=w;l zugX4x;y(R80cgpkKFIGf0+$#9mrAHlWn*n+V>8t-g@$D%!oohrxMG|OVr3Li>6sj>~+baVXOqWeQ3jQq5^+<;b;dMs^@9j1X?Kh?VPVirj3S`yK z<`+uJIM4;cD}a<0K?hHW!c5725vJ{rc97l2=)!(_1lgDXioEr@;vKvX&`kX_<)cbHTKY66xvX${ck3#D0u0t=zU ze=;N^@np5a%(TLezl50Widb)iN@~R_AzKlqVDo}7-650`Ot=279>E70t^~`X!|HM& z!}kBhgn+QZL_KSOd?enYR+ti@zIj22_jM09guzpwC9^d?e2De;ZJDsVy4>b44lt&& zde<@cuxf!iUJR~^u+S_{t(S;Zb^3#n8j>`-2FqhqzY@#V)B(fgKuwWhP8C4)O#J2{ z$jhq`1wqJj-%z4;JUvXPQ*Ds0Z}_C3$Nq+rVGHg=_Rq14py=bHx>g} zSmP5$PAb8|l?p=GcTtGi@Sa3`O+(0wwoo;CU0YP6l3=rvA;dN_S57=^iZi@?J&aQt z&jOa@1ZY-)0c~OU6oe3$02q8=WCSlG|M_VF_KfxfwP!%i+K7=v=gzHA);cT2kIGyngupnzg z6rnXhl?sJGhUv0}>q>_aT;Qnz@CVx=R>&YTOqdzcNY*!8+YmMB(+ba&vNDC*AR*?M zFr^Av{Y)S}A;d-uPoFJZ+ZtfahEIrugsMKa7HiW&hXD-%HdqkQI<}_w`%7msI=-Z* zFn~T5ue>)zITFtT4VGuaHv~LWmd1N29d;6^tr0@H@~7{$dGR_u(X+!czIKHrl74~I zHhKsc(np~kv)jS4(Y_6NP{CdNPj96fsm8W!qa36SJ?=G z0Pqi=hL;_tg6c>Nh9HQqQqPXYY{kNC`J`k`6E!Hqar4ySGKPk-Z1}QFp-+(zN6aHs z4|w1lq|C-=jgd8w4zr}e*XA>{5*y{@3zq@#siQ-T4S)1ofUCZO%~2@bOuY925aq;h zCB*E@$S@TxJPXuUf3`g zcyT16&KRl5Av-;_3Z|gETPE3)gwahsxtD~gzfu6@zr25DJJ9T4@7n|h!ig;EjSfSS7qe11LYlY(_4EdJ!pbTu+1Qn@HZP)v7B2)49cQYYoI3pD zYu|*`B)Pf^yn-ar23RvPmHZ7q2|G@W^|z;KyRT{IQwIEUH{TSki;}THUTm%(p`Hl! zPoH*lDAOw1M@1dhb@12oQv)|2BznZzdlUaMzEhG4*EaaZ@6*4gcrUt5r7Wlrtbz{t z{0B5Sv|^sxC#AM6r2OQ5gPGcm(0Gou`IhOIFH}5xB^qn~1y4ubQBWcL3CrvjKX|o# zDCi-}Dkps?CpP$?FGOb7x)Te)7c28icgm423n<$OOy7AwxAS3p=i}cU6#i}y?QSs7 zZiv)wU^ps0YYlT{@-W!07DR;mrSe(x^-3wqHW$pw~-iP@7?Y&Pcdj)@83i0;~rS^+7UKN?_ z=ccbEz1=kkx4{H(+A%~f#+uMfbgZXZ#UJk`(ii zazecMH|%l|!>@!|8xPv@h1%2Q+g4m#k6njv4!k=L&^(9TQf{4!Ze0d$Xe+mF4Y&66 z1NEF<&Z-89W7f^ja(XFtaTObFG2M!X+YKIQzGtq?_jdf@gz}O4@r{H-Z{3GwLG$TH z3uQ-(+ske7?rjt9tt;-h-^WM4=iHZQk1;$RD=Z!xBF96DHCxw_8@@J`;m0oD_jl84 z3Y>k$9e1oCtPF#1S5o zGZ9|w@K=eqyY0{;%FSxVU8+f*#dAwg=j^`5ORDc2FWv#-fnSdNH+R%v0U4r7{8xr# z0$`byuz&<4FaaZ30cN6uaS?dj^PF;jI^u~q<<0QsE&uZ`-=+SonlBCT^@!Vn2Fp%| zv+e=wecAy1#|_-oe%DN^w@?k~H;w1C1Y#u;YU#A`;kyR}t3hnfkxY})x)_MAZ>T!G zIYT0VwH(9g8#L7BdH+4F4{>^HQo?yvuVf0=lujhnr~rS&F3p`Atol4AxOhx=VfYS7 zOCK!hbQWJ0B&^Bn@>8Y0z9XfrgN|&gYFxjj>`kr51y1+PGV=8sJuhjT;4Z|Iq5RL? z-(XDyEZnZ6y&yy-5kP$#A`T06{N<_gV$w`HSew3ra|)9AKGYEg!Q&&c;*@Si;%O>B zR;~>Ny$>DVgs{|j0hO@wgJ%X!m;Qs7@4GHP>>NQwS3FwXK5Zf=7u+)We6?@gj?}$; zw(M+h!nkuq`IS;nrpc2@HmOl-YgyA!^;(FoHRL%OPgfclcKglvCq!BL*%O&y;@4qt ztxe6WoIA@z9`9r13x-VpA1CdmA(~gd&#!#V(G%^N z7FoiftX^SiC^O#$vEplR8+R;cEhMKYkvPQoWi3SV7W%FX%Se}M7ZK=}5E%36Zng8$ z+fg-WaF<;4YA|udNX<8DZd*?A&y>cmZ)CSC-hZ|?GUZ$X4Vuy<38@KB&L;2lbg!C{ zA2H(6^xvs~!)2X~tgxW`=Nx!g7;OjSIiK99{Ur!thKIxpN`7zjD1bxrMqu#%;MWIk zoEM|!h1F$Tv&>9$jMW1tnV+`8hyP8jvAYbAy$uLXs>UXTXJnQ@MCRpQoY(vIdoK_{ zB&STg7W#}Jfi2X>UMsPVGlGsu3S0RHSu&BtDTH;FuMbz(jI)yRpKjhB8j2Nqi?on| zZR%u-;&qPw@g^Y2Vf5OMT}as(&sBCkhPeFTi7U~`c<8==&Ocl6r2L_SQ6UIi`TV=% z(U&)_b2T=-(H%N(1!Ee7DxT!k(SRT|4mK_W~G@oa-PhRG1D@fN|fxKm6@3^`AWf~ zN2K!HUn`)kOn+5HE28GYG;lN`zzNTr`PtvdZs z&d7Z%Bhdg>?QtndA*D3XTnlF<%b?QNptyv2Q6A44zwRsbrHaw0qqmHe;J#!FmDz7z zeFsCnVM(<2t;N)o6%<1{H*7HQ8#W!?Ly5?D|r2kyffhZ#XsChfw%V?Qx z2UfQQws@GM3{y_GeiLKP*KX~cTxOlwLi6v_3_BiPI(<&L-|-fC3qu;soIgb{5<3;R zZzH)&lA^bP@6*h`&;%Tox@^73m>ER9&(V>675WkQmo>|-6QJ^?s?|T!+UfLS7RoZe zA6(TKjRC6dZ)FQsHt^p;1si@i=2U$j_5SVd z*{T>&RrM`9K%`awJ3&dRl8zZm;^A6awXuhSc7FNVgW7!3^BcJX=nLY3{jY?bhGIRR zi5+>Y&2C<}es59fbL(S9PAL;KSLi3JRV$Z-Jw z;~}cDyZG;_p$H5RB63Af2N6PA%hi1(QIh}D&-D0mbJ%X!%-m?s;n&&Z$2V;OMd2Qv zc#k!39*G=>UsF#@OeVN@Qnf7=Z({uNf!Retlgy(nZ>?La;_r-5CpeMX0`x)kDy9|m zmPQJTDI{Yk0E62L&`Om-KnYkVowsINq)}}!Z95yjxT$b#SWU=+S9b`X1HbR|jy6l} zN-|qUGx5{Okfbkg#~He;XT!DOwV>`SZwxiv7$DRwYIT_>{2@LUh`i;16nB#mW5K2j ze3t_R^K?fUW0a|)weVO%*9a{t*=aK|MKuz90}qnxVsp(H8J*NW{}$dt-t=UYV}1sS z&p`tgMj43qegG-X1>;<(=dIl;GDC=-B$C)=_GYewMB(36%M?DDiS)&8D2rR8AXV*yMaLzFr@$S6VyyH4qf>4!a8i!_4=Q3V?=|DpUc z6?Q)k7747_9T3;#aeoq)e`>VB;gByMk4)eTtoUF(U+PX7S+e)ykR(PqH3(&| zjgZcsE`6Q6{~1lel2mWmag2{s1qnca0)$h_FuW}_MjjimIs`zSs^^8XcY|F^6FuAmnnCnBwEQ0&2{cefj;U_;jZm(zh`f@badi$A4 z`)RNE@R*&Qu>`WzNMT>JDx2a%V{PK3lvKtnkUiUic)JFul_DpF!!QWyTLAE>2nEnj z0r3+XL6twaUl|JySIwm%^MDC~JpLMw%+H^Y{o@OiGXGuGQ2Skm(&eQQq8DQ&Vgj`_ ze_~qj*tza0aLxWJ2ZOFQ35$mUe!=X0CyhvA9U5OgHS1Nc;L0oglx$~+eraGI*9kgZ zt4$#$!QOnOeZH=%ncV#J1$_wH=MuPY0k@F#X3+3L*6x$3GDa?w010Wd zPkd9)mpso8?k3#dkB{S-rG%M(g*7)MUuojrw9rAWBC7|}n){DsW1__?UzX!NsaZV# zZ^ykQOMkim&8a;Khy001awE>OFfOM%9%yQJNBZgx2&5Lf$zR_zB1_tx@iqn5mx~B0 zE5l$JgH-9UCJZX*BiC)D{P(W1s7&8TE$unPL@u?Nr{>$*yL7ki&IP}o7e53FN`;&& zKeUX!-5N_fxte1w%+wi^%Z=f5x2-Dhjc;a-dy!*iqJ0Z}Dj+5CK~`L`)8lO5)mxez zRaMM;mQA*YL&>DHa?01!HLeZ4Kk+#V7E-n6Olz`V`!C(zjuEo{-e9%= zwWEH*p}0`xs_SozqdPAYO-h9g@J7Pqr`Uy!m77Am{E1*t!;c(T{)v~50QPU#-nB82 zfP)$6bZ9VypV{0^f-SM7tnkfm-rYTNl`hVXrM(o7;PAuT!&J0B+1llvR-m8lW1*IE!>gJfa@ z-%aXci(YD(?jSuemids*KoeY{<K@*>60S0^5=9Y zEzCzBI( zn1HZ{AJW7B6b-2C79vD5=Bfxm(MArzY|=e5%BDCCIT@qYo#8wa?_z+XsOw6 zIkLZiac*YOCd~jQDkM0JS-}_psR3Ym6i^MV(GU(;o;dO;ew3VE#f6A| zW2aDO_bCncNns{#n}OZgXQdPi_5Angb}F6NXvr7C?*E3E^PYqANseMPK4p6L_S21w zlErwem3|i45!}qvKDvE2rD1nQA)ISZqU4R*Q_-@tHoYj$hb6bZ1SR^6Iz?#@o-s;! zWZu)*N(`s%Uyx|yrvtKyB#Dzh|F?^5XfJgfS2I0H|K47t@VD@~&Et6d42ORI67?IR z67nx;=3B+P-SmjRo2s@cl$6}T671u8Hkjpgw9J;VIlV+aiMYcu)1P$nP1`q>F#&OT znG8j~Tz2>DB@a$leV3yB`3r+Gkp%}EDfMza=0SDi zGR*TAQ#gQ0w59m*>Vv;F4}+Iu#vOG0w;cBSZK53vd3YQemP@^?PTV(qq70Y4{`-7_ z#*?0w-DX(jV}O|atcv9FUe{ODD0KpqsmyTeZWFk7|AdW1Bw&WfJAXZ+ws{)vzfAx=reOekCDH}vtW^{}b=*!Pu&a3DK} zK+$~Zw#GB=!YBQ%A9m8Cc?ri@?22OS7Du4efX%36f=UEQ?XEn!B73oy9g0Bv1~D>H z^Fn$ka)Xszdic3OG~6JPDHZl9<&$}vf}*(slP^zl$Dhqo_5CcJ35=N2cec8RUI`VS z3)$-Um(@x2ml8X;IexjZC{DAAkh-z*;DPa)hE-MU$~RPGdxO7{A;_pvJodQNi#4Fg zoia0ZupkP=JFCog7sTU>W|a>XG_~^P*zsoBbMn>nC5$1g{fQBJ^&Ylax4>Iq?pc87X3Yi1eEE`1{Br@*%^(Y6;>qVhy;RN%mUd@l zqy-g_9r)6?Ha<*Pm@*SxgZ`u7G_#+5xw6S29# zq-xKk|Fy}^Goec6Ws?5nsZQsSy;p*9mPha2eqCn_Hxj8Nft!$BO&u@uv=~(9`Nh3I zq-a3s4%}tcyx&01ZFF;#EB|%RdKU3(YIR zf?{6eEk{yvH6&;HaN^iWZ>Pk;^ZnA`%k>fi0ed!sqeFAyk88)klVhi$Ws3P|I*7{X z)99)u{@Si|v;$yh!qtUw(LIhpy#XyY6|)^wVHE`%QMcbN#QD zRD-@>v7Gav_IvexoQS=CaOuZDH=xJ^y8@&Wp&L!YvjpaDwm^twi{}_KkQu}%*00P8 zSAkce$uMYQ3%z-3b>Jo$IJBNb3=MGZVdO&ajgo`W#d0Pn=_eyZRy~0E5rCZd}7T*H{XU|eeqGAS#o#SH;HTBt`HFq`e!=sSC+A1*w8(}aA6HVBF5Z*i& zmjFLPs=|d(+zP=IdF;%D0NyDTW^3GE&L!7%zqn~qG`~HXEtefIs|+VbFk65WYk)jc z;=;9s%3}h5@L$c(dulK-egh&kZ`m|L7%4T+ECof>7p>Uo)r9?(nGvJKLyUVEGdw~S zc0K?BW`tM*C0j23NKEx1vX@03Kq`jfAq0_(fr!XdgzkXC807~-Z)nV(Oy_~XQz~Q@ z!520ctbILf%_=x(%Z{IG{h&~K zO_b4KTVn21v84MO!PefuQC#zXC_3xEroT20uQwQs!RT^ycZV{%yVKDvAt3e!qdTSK zJ4!-OKtMpmQHnH(h=Mv0Bm^WC72U)07kqyBoO53HxzF{!?)`qbI$ompHAabx0Ii52 zrN~5I<2X*I;R}mOm-KNA`33rKh-U9}i7gJMnb$!6dO}My9QPxjK2Hob9*33IyCQgc zA9$3ISayvSv)W-!x@Oi%AMh%#QYqs&G6J;|eCq9>R6w?JTf~76YrBipD_5opdMF5G z3g0mfOb%BZ)v#HcqhdKb+?Q#-Y3-+|=@ThKPp0-p zj%3>p06tz|&VR$a-8c4CIo0AakE9G5KCo{?6@lCJN0rO&ot*=l<64=%)T2{RQ8#4xMGb z6!@2OTGhAP^O_bWf^Il{zh>^^&_=+;PnP{z4I@gfBbWOMgNt6O`4wf%6uWo3v-x`N zXZCfZ^xV@fIdV3rzNL1X((isWJ`_=WQi*ptzkcvduk4 zpFi-68OZoGcTJ1_yRo{pGn8Qf%{$xTM}VjU_)I9^pk(;+Qg}vG|G~yWO084u^LNg! zH%A?dBRtaX8wV!HefR?h_E+u}9}C>)eXU1()Urm&S{g&9;vi@MkQV^7pg@iZ;26qt zTQg#SA;_lAbsGC5@LAj5518EI7ZFS z|2A_jZ9V>Xrk!B-@#yvHlL1u!MYCTk5nij;rdNL+#KnnTGrBW}r0sLuy~F#WHC0lq zcH@RN0JuoptXC2`CIShM`Yv7I%T&Qd>Is`LgW37eq7L1;-ufv_0!D?1*&&7u4uydE z?mS=PoC~_itQz@#ChUTe^5_Aw9+X*GdN8asKft_5)^&|_AOSX!uS0}=EFlIZGa1_o zJN6a^+t*uH8Cm{LAUQmAZVPzZdqUfUS6{eA|9o>$f2duf&tabm0wFDp=WkGF2slrz zYh3RKYH%dD+&%Rcjdfyi3Q$8#)Tyte&4#6cLc73jo##yjw;{^V2YMz1Z|l$|KnRq1%ISw~ zK#N({8wAY_zh*vY&l*VK_}*F_e6%rZeW~>7aR7&m!2B_`Y-4wM>mbo!_hcxHW_=m3 z@&ZV=ObF;l+`K%4f9Bx-zzE7C3IbFfDqXi=1GVhjCwMTV7#=Z}K_wm|Fmh-3UTP^QC-8`6l z_mRtEKkuW!F{2BWctWdNv6HWROaFnywa{b%jRH$Jz`hSTRjIs4>RjTQ-d*&4x$wbe zEzeZ;{aS&omFs$u>y`KG_q^HPBTI8iuIrZvPW61fAG=q&@!xF}_hwa+Y}sbb?ME7L zMEdIEm1fW_w~)q5CuX|oNd}J2aNBjx7CtR1A(39a;ce2RDD9i>cCYn#-aVcC`p(U4 z>(SEQv)LzATLJaO+vEMf!0i*(A0eyxg<}!x_^qt93fWUMLHZa3_6Y{F{J*)CU$zMUv}w!|Kg<0 zZzbpQzh7IAFPjE1&3|l6I{B~6tw!?YBd&N#Bt34Hd4Hy|jqot)vad&zIyO;BnF(QB zLN>?2i9*sXATI)iTRlo0x`u}_%oy-tae9o*a8OKxK1d$YFXTc7%c>6+aCU1RH2Yt9 zvSh(@JBS-=WG0LZd57jQ&|Bnc4lddLFSK$~=V7UY4@cF|g?&Pb&J2-2HvvTU5#UV6 ze#Aaq^Ox8ZG%L`XF|gG@d@2%xO(iF*kO2JZ%t$#0V@%A90d|{`WOZZK+gC?g z#S?%o%`}u)G9}G5Xb{<*IwBE5R^ZF7kJUXJeUIZZv(3>W#c>uq`!nOrMM8uL8Oz zn}C^OuDIO4X<^K+JWemY8EbKtZd=_@*Z_Uv-DjVh7!XO)S;TwZ#S>S~nR7-F8@<~ACC89FoN!Zq-Dbx4?=DVkfqA&uShn0*@ zT14?R2@xDTR#~AYBfPwwEk9)Djr85_F&C5!!)!CFjgH>}p4X`+Un#6n=gvnaZvc7x z!WrdRhE0(xNncD;fnJ;jple(@pZ^BAUS4sRrx{r!Gd@aJjd{RWvSo2zP2G%bNHn1( z7U^es+FJ)nqnN)^Ck>l{2+be>VoWiSo~nm-@kqpaFsE9m>!B+~0htfn5HcavfS2V~ zW-DoQx1t3xSL?uJRSkaUseG6Fe^8K5Uuwd*UkOsK=SaUweefWT3|LKcd|{=QckC=*cylBp(U*T2r1dP=OZ{+azSz)3AcFS^TW-3;QX|7j)4Z zZ^DcVjnF(36Gah3!cC=JW{zAoqjZYCyN4@Kw>AMKQBf}aJd$4QOrfm1Ho6!cxBkx0 zb=;oBY2kI9gj;-5={dQ|ewC%5wrm#3><5M%a*44m^*n0 zT)xWU#J{z}9H0Qu1$<#$En2%^Ma&R7O~B+t4hsh4A*}Ef7|-Vh?xPLm5j|wUowE>N zbZfGYg(j){6fE02xtW&OtPTwrkY1SiX6!3W`6;|9%|E-MU?vGKb8&K3X`suv?8D;m zZumm$WFFwB68Ia#?s9P)$p;|_ysZ554uQ){V&TwF%G>^2h~}g4f;3O*2fBw~)O8 zp^FuVN#F#GYUm;niyyR-o%>oe@p^9Y0@m-26y9-~rf}AYn?$_EIqOoW64O|CN$QRH z1GHsX92uq1J0VhicGIudA6-Go{gK!6^bD%@G3ElsdgcBEq&=lVd{Dp8*ULynBEq*y zC}&12fmU_zp-uXsxh_=q-6;VhN%>FKoAK5Fl3(DtIuP`a!uES~m|yqZKWv+y)e}y@ z^L;8ajDk#G`SwT%qfUg%6H%u=G*F#1t-4WWegY&QL)pinaX8N#h*w@rOeipGv8+&2 z_9yxkrm-xcAPQ^_Dw>}AM3TY`s{-^9FfNR9Q!*-JkMEMk&lKyrTaEtCkHGe`q5US` zYZ*?%46f(D`h4X(1LpgSJEV)MYZ=jljPHk#>oyRoJlx>xXf`B#acF}45UdVi#N_OY z3!4-}ndrSqq*}0S)sPhtbM~5fa7MQniIE*(W*K1VMtr)lj*y=~21>r%58Rudq}T8t z#}3s`WI{)`E>c>33eDW-!UU#_p3KxG4@03*3LbicP}z+e+`}#<%%n!`9$L7k{Kq}Qxtno;!3OlFzD z)kL68W}c1oaB^K6Kw)HlUpJ=l>TtU)H}uj(w9C|-Wp<-;YD3Y^hD?D$N4juNa<0j? z5OPKFEG*9TPvVQWmE#BIS-#NI)? z866~-NsY;`Gn->YMiE=paY|;h_YD(6gz3;t-G*kej^1c8FC}Aj>Tb4tM#oLk5_w1eC|O zSv&?b=S*3s5}59(4G$o5WR=vPZ&Ej_pU`{v$!@XQdG~D>T-sIAIk>9x9rJ2gNe-xt zgU;Wno*An|jHhDcF{E+PFY@np*qo_s6#|-$ReBezG!0XLk-!nRJtlr#whJq)05aot zNWfegj0U5!u4O#5T2Z#Yn$n&n`HLiS3IUx8i})29U1c>6FBF+-RwF8#FpKb&kIKcu zbulrjAbaV<1D_uX3K$;+DZFOY0NMe_y@zG;5VT6JA7WWyr58Z=qm0zO0l+WZ=2uw$ zk=GVqvu#pYP}N+Q3k3yP?giO+_RXXoDyRL3(Or|T_OLU7#@d)Bn%sSD5)oLEf2aNz|c^eLJ;n@pf!t?muxM+cS7i6~WJVn-r$8_&o}Zm!O`DD_Pz z$xoS=go1ZCg`YUVkC!`0a*r8oIbv0c9mIJH8+r9yUSgTrW6TBW0s9RUn+c=vj%Hf7 zj1=Fx_2`61z_H_3R&6IGaZr)XfQrY#(7jq4^}DgS%s008l#Dg8Py;el@vWXX2}&Ox zyjmz8oCW<*t>-tQ`D()PGMh6r4o}yG7n5X7D&U)DQ?Z3*ZN@OC9>!9+;An*+E+x+`qGbpDAl+S zW6|4ek*uA5?n0jC5uR6vHI*RvJa%V%k;%*~{{A_1=VUVcShTSRNhE-{oY)$2x z9I&xQ?XQtv$*3Oy7Az3ugcmb0ErtaVrbNMudivNOVV4dSBn1V+<$|yJ1^ddr>@w=m zRZ)c*d7UKETEF@i=p^)BGHKJ|xt|GZe@Qb&jG5c#V)HV**ieuU% zBS+)ZlKqQ0gNqjj!NLRJfB1ONisWqmb=QXE0Ne1;g>X4RA-M$E2=GKC8Rh|iOY1?- zMBp<&UwFKNhENz&@Gt`$NLm*Z{Z4S=DJNw|t&>ZMko; zd+aWR)CZ`Ct4Up|6Q@K}ODdZDQ;h-rbdbcO{^3#DWau`TV~+r)8BoK_f+#*!=xoA6 z9Ey39zy%?4SgoiGP0}d|ut8Ri=!xv|-U1pw!~647U;cy=%ox)Y##{is#it0T5vCLZ z6tV)71i%-Qkk%j>FB~WrhZZJ4ySssu9qXD*?$1i1J7|4GJR%#f%P^^{jYst1Yh}Gr z@jd}_Bgxr#7)l;4c^V7kGWBsbS0sd-Yy=8%N^y6Fx6zsKpL`du^`C?zzXDi#38+;Z znwubDo~k8e3BTmP`%zPrdyFw2DW|Q*QA< z;E{xk2r5hzTM~f-rS<@G3CyHlu)-dYAOS)%q5w;{=rVu7ego)AdP*Y5ck;+gnXY9K zWVj#Bvtu%z*PD@bg=N@8t9ep$I0)fxk6|5%bckWxBo}%5Y29h9JW|g6TWa>eNu5tU z@3nB~^QU580jgPJ$>5@ERmuV$0Lb7b3jGsx4v;9mg2J%O^tym%p*r+d1#%nkcayat zk*W0y`~Zi6P!Xw-KAraj)yKiB1OrY1RGh}pu`{T!r!27)(E1C8AeV^X;0ZlI3Kv~6 zclp3CSnd0A5nP!Fz9g-*gpY!}j7QD8GCSC6VX3Trct@zf8~Jmm#cM-tDgbDSX7^^% zrm~X9!ScFUU*d>Eoy5r^GOg1mB4e<7)THdo^OBn4>G%xKTMGUUi=NV zNdY9gHQX&Ld5!}KqRAXfHPe*>D|n^6`%?Lz&ljL;8AhALtmRZMEtYX?p`!+p3taXwMb zBVsr7y0+c{X(i<)Y0nz3Yn3ongJ8I_x?jUv*b?ho<$UDE*=xFrcnWtgv+N4E*S$`BGy2E}$^N)6$!a z{qc812+{HGsH$%n1L{qAdVNi3aQcnhB#T-FbE;YlS*bE0L zgc|L|7SoPy8RH#044#JHgG>;{81H3V>=$2p#ff^g2=l}DY=V1o@a4T{BUFvW{BO3D zpBc*^KRo&S;i}*#Vo3FsP&9;yu4sJwi%$Ra>n4=z5g&zt6Il!qqB#@9MGqJ!KSX5i<&@{q4HOM-uyY%x^8Imx_icx1~#W zPy6$injK#33C#ZNG#2Z`_gI?RlJNK@yp$mAn3YtD_QI44PlVUP0?4p)MZslkOgr7= zf6t}dolSqU4|})AMuAP*|2e0&iu}2~6V*4iTpoA(lH^w{HN+?C=cCO(<)3fd6Hvqf zv6Ma9fpALuPk{xWq3NVAvHgnt!uwn$8waYpRXz!c{L*Rs^Dk20`C4oZh*V2xqC!?s zAp)p9ENJiT6j5EknW1&RZ#%Sf$C7ru5}m6HSXf6L{8zoeQFkD>aWG`d$mAaRrxMCZ zX5XtiM{(IbteQ~#Xh*^%!rQ*`$Amz=?PVJ9ePEt)N zDCJukzhg;n%7FF!bS&tMY=VKG#^3ine>#u1<{!Gh$iCl;Ok93;lZLv~cY3fkUapgK z>G|)I9r!tWQQCehUGD4Bi)oj&b&}|Adx_8}^MALyj08ZRpnUFZkWTh6X#60}L55`^ z8h)VpdtDD#{(%T0C!oxNs_w4u*O(aF{TPI2TuQ&7 zFFZ>C2k*^dL1u8<#zx%-rccX@pBV-g!Ws6l0lchsr-V>`9F^z*j$DO;!H7d+AbrC+ zJzuaQ&LM6PWggaM`0Kq_`cK-l3WKcwJD7JvwTyfS?En4pq`vCkKV&2Y^i4(ICp`o?hs+h2*f%Z~ zIVRTa-2Uwr@~|`DK7#uh`M|pVdb1NWByS8e^0G2hacs$OJbGOA1;f>eId+E2`i$2c zK2K_1E)>4|i68dJ8kzlPq3u<6Z^WFL*vIb_D;>tz`IOl{bgoteY4@$0&iqwVHP~)J zgL^;VV_PHfdCZ59XKy>^ue@Moa{BSnD%^pahI@ z!w~)R)@0)f5R+gHm`}A9fq?iVOK;i;l)(+UIxKG(NLMpMmDC=(&cv`!u)|*bU~enh z5tqgRgu9~PuvRQs0D!sRW+Si3s)zAAj|y0wCyZ(FK#ovxf}r9W!Xr49{qFt<_afpU zJGAY(zIOEm8o~rIw~NONyJMKU)c!d%U8G*UM@`jJh2GDzBt%O%ua?k)N4grAWye@E8lPr^#Bn{t=zSkFng>VS!?kXJQ=9t}| z?q4r9{yiLoWwl4{MZ)>#K`h{gfq&`)X>4Artfi6Ja`d_xtk6N`mjfdgJn{szhZEFe zXR6nJjP_lEMOPk^cuty~N0XS}xGiUtv~x>b%G7uS7IY!d{YM~vux)^<2XP=H*(wYW zf?$6-5=WSPiXnB2IR=ko$iXILKN6t92YTyF9~V%(nqumt{ol(ybR4}Mf=qlUW${gY zl)YwV55?$0+>QSLT2r9j1s-1D-E;j>ylJx+ zCPm_n;6>)rD|tQ{vhzf?RO%f;n}>T|xGp54iHuUDE>w}+hn$@TA4EI%HPgH3gvYj$ z*j!lXBqnB)Vr|o;UkiSGqBwBn)lEon?KhZnTfXj`*vlop5j&+Oh{lw!m`qD-^!vH_ zrnt_H>%sDm;R_?5UX_S6HX{4>Q*;)Gp`mCq%g2QlPh>GF_hnoIuQ|_MgT?je4}^IC zhxFv(k~SHfuMf+ZxBkA4d+J3)7@!ug2sz#XXkkm}`e1$8fo+Po*170z`Sr6eM(`Fk zbIZ7N_seg5Wb2xDAK#_jM29^85yRH^$VIpHDMS7if*AkyLiRpfceECzraJ>m`le9X z0YI^=4k51JBhrtm#Kk4yDsR{kwFgI_T%3~4EDjHv6z^T0ZE4GjIu?2?o7W4glu0Ox zxi>Sj!em8HBJg{x^hz@g=|>INiz_qmci^t0U52LP;I;Ta_xAB zXs$v*)%6a>9577rRp5}>$89!9Djxalo}5TP*q^?Zyarh@CF~Zj_7I4Np+VF%ATIK< z+Vc65L3O-OF8tD|qkFo_8nj{%?aks^)|Gm&R))s6WUrb!hZR^!A7M~ETQ08rk=Ye7AVLq*HcG_OE2OE(2(q&^3`rn1c^y{; zditkOttm9dlZKm9ohj0h!|VF?&*G`?|7&D1-;cyTLqwQ!%8mu1$xTbOat-$0I6-w? zUarck==zekq5%R%+L3}Fb&4S>c^~eE#WG7x03|sT))>O?VFVTou*0dy#y%=F)bw;v zjSVAd(al@~Ds`l}h6{WK1feQ;evDAFNrHiJMfo_Cyw|xLu3Mb__rGd2M^=4lj z2FqFj>DdW&Ea8z5evmEPZKfLc;;x<~-VR|%RTXucH3$+FNHz2;hk#Nvdr4 zn+y?0R*3>ZDc2gLg%B1ZCU^%EuHRMY#(OOM`=W;_EYk9RCPsAln&W9; z_PW}HDnF00a;Uf*mJE1-$js1JWn+K&go!)Lq&2f!A zzwO}dM}UZ9UZn!*)|HM+Ec==}jNpn$w^?4jhFnrjGq354Ai4bhL6Gx}wd1W3z6 z-1!w$Z1={owLxV;ynqFGW2yT_Xq2{ABdaBIwrw6Ew$?0$icE;4_a6Y&N7DWKf%xwj zu@pmBCQnySrt2mn>hWTM3UrUChzc|!&l$)AGLFwR9tXSlUoWoGkY9UhFuz#LmUkzo zlfO6B6{X0t+RZrcXSpw$r(pxn0026w>CQwETJ?Y@1lG(guJp!$G8@2RA$>N^C^i>Z zfrA&w0~lHbjB!TNgPD@9DYA|CW#|gD;>!3BikpYB_=Z7DECQ<~JRn=ZonZePY5s1frrZ95VR>tjkk@D)Hm7! z-lYQ5aZ({LOh|(Jx#LXzTpBhQBS|N@lvZo<;l6@nRr#s!2l2|NQu{p?;55Y2dCdNj zEuhy9XaGp0;F080d&~N5TLZJ3gG1cfGapB;e>oG#Jc#@k>x{e zMT4&0Hao8nh;s%YG!O7B78Cp795L%`Jj9N?;nV69oNZPdAJQ1~D}DW4ZP9tVUM=@c zlxwcC+sh-+ZoW6*l#uVMVUdz-Bq{yAlvdluop1wTKR8^^#$BnZQW-_`h;^%HywNyN zCS==f@UOcOtq{d!mdk6LDdPi_GfH_^>iQ_eyjAkyJNnoTP5j&VX6>WePD3Y+*Ehab z131y}n8=2}^C-)2LD1SmIZ*SUBTNax-{&m)N zeQ3kvJtXO-HygJzp`*2D;F9IEb|e<$?<3Z>uU~;iCQv|)IO75vcv7zWnkqO!9+_(j zZ=>j)Gh1m?s5U&VLmv521=&HUezf|Kqr5F~oP$|1$y$o}^_a=HBr9PEBZ%*0B)1p* z30EQnSJ(i@Q_LzN>FxnAp1%5L}P-Vbk(WFz^0;lOwpN{yCEQ7x#;aWDa|t2Hw*4 zn==5$NO+V@kM9Z%xo7}?1Yq}~(r;wM=h&2HT`$af&s#AA6AdwXUr2X%zw2Bwi044c zjrUKi_wSnzmbJGf`IY_r-S$~m8=MCQH3nral@SYUBp$XiwqD|}1Kh*jrbFllw}EQ{ zg8A`5F|C9$EZw3OAY_3MNVbG@n*0jM1bN06PE%S*jlr2;-+uCK|40HxfF%=}yBQ&-vr& zN#Aeeh)j$o=W%KlTOa>Hr<!$a%ShV(zq4NM(DV9ZxJ^v`ZIpG#?)oJIeP)HjQ3g z7@gh`x&eD_^=#bMog*Qrz+&)a1kvd`%iv_6vJk^$;?2QZUE@+`jpV@~A9Xe?);Hj4 z`oS&jqfG7RAEXk-~VdzGD2XvV}~8r9O5Q9H>_mI2M-v@B!Kp8qZ8;1x3_=;lJh@n&cEz3U9Cj&_NU#YOh?T!yqp0Yu>L60=LrDk~my8U5 z1yIHo-;A9uDVYAV^QPj>bg#!GqAN_L`o$IR8GbBKEpm>93{cs}1e3MpqHgs52#64* zv6VOx>)}#|YDmX`5w^eV99gr6ZjX~XW)&r7h*9(52OtRw$ow{#1q;qFV+&w?rgbm6 zPoDUQV0l!7c>j*>c{KaoG`cuN@Tl~{LzjiDERJ;s_kVqjn|)=9+U?oLAYLq3^fovU z3q;F*qHHgr5SOI`tzxYGoY-z?v zQg-+!i|X038&heJIf32R6PkRoWI)B_{Dcg6FM(AmMyev0E(VKW!`@Ahr}?RNz}6o4 z_dTsfN75}cE{VT+^PF+zTsU-Fe0lgUNBAVW?Ee4XL`Eo7+G|mOmFpj|= zxUbbYJQIwR{iA~>IJ+5q3cLDAP4>kP$=5%mIw2o#>OJzM($kUh)5=f$_=;{+rVQ?IU?F z>+6E|6IBc8*WtzscCuwZl_&GU*LVI}PmF3k(f*paml<$nQz7x|b>Gn*^JEVdN;Tpz0=Fb?s zxctKWTf)KQ)4i=;ev{rGMqgrC-iNsaT25+JZml%!##Vk?mK7&)n)Pl7M}yx(MBiJQ zZI=>7*4FuY?(h7)B+b;n)B7+qfed)<3gmc)({1^3to7~SVQ7Ud{3_1wdfx8Vqx5f6 zdxU8Bkt#&(Pt`5Y=G*@QKdgr+D8S{1?^No#y6t_JiI4_fc&LxVNDuRjpp@vRYxVEr zyGHP#FF_!|#Hy;7k^`=XVaLWf$EJ^u&8LqozaJk|92~6yk((+PMO5v;Pi4^1 z?P+0oxzogHzPW$XC6^>rPVjE*iO6nGVSoMez`wZdk;cJbU)9gr0WGI!iBbi&g1bMe zbgW<8>Hc={um~CtX^#=NB?-q?^XCRZfOlKJ58_t1nhplFP!Gto|1w+C8|a0@4QBUwldh*!p4c0hFKJ}sVXJ3}2{NPx7po*(A2 zmUP(F!K@k0{yVRfy1_}rbV*;ALh608*B^uPqA;e9h+S{ul(I7iraFl2Thdd4h>z9W6Op# zJqbWn>PTx-532KbK0XV$T03St1D4kYsYeZ}7!zBCLT|N^znBjYT#{ga4o_a)6ET*3 zxw^jm{wQ#!$}mUN^TToQe52#zfR7(eLKoZ2bN-f9g}!a+iM58dE&Yt3I^`@pn0-e^ z%H0iPZ5kicsMIuG{Sd#kil`Ujk5->|=;5rif5Ojvgrn7$fV4;WXQPS`&iD1E=a9b( z^!;tlew}>Z`23l67XXe4Zg`9vB|oLI#B4)ZSY!5eANBqYdGag_Uxm`$wxL|wa5>e_ z?G@k2gjx1s8?YO)1BPg5w)#4&rrRx2l92LBEn0UI?Z?Q@d*H)tCA(#=Dwv^sXd+zT z5N#@2ewNww_)6mb0LO!l!?6e1hxF24P(Hv%UtLDMv-$4VOx5iUYmdSZtPKPhvm^lr z*^rFP2Evw)alj2$G|(Echl#Y&L#iCx7+^+na7)>G=<&}D2{CpEk%}3mjr>1fn7a3K z2Q=mkq(ik5yS_k>;y)||5EsAxbxrKI~sEB85r`vrNUO##FSsH5IJSAOw zkSbK+tKyV+CH9AFP)$*sn@4B?%VLXHJgfVaHts8fvaZ|v{Yq>qKRsgJI9~IN3mmIb z1wY+&l7ww^IyWuJ*2P`E^XKH}Wx~DMfe)VF>)zo>Paxjo4C%<3ZhHaQPONiAV#$1} zQdhTUw$_hR-(2q-PjR&@cgCCxnAy9$ef-D0VH{qf8ObQk(JBy=Bpv|bj+`2RB1RAK zfshs*QUbzhb<5U((*vfSRQjCQW{bACvqCEQ zl}b0vp_?9Mz^SV&kzAmYEa%$YEqU&{vYsbIsPYBKZSU79=u!t2&kgSvSg9F1)IqkS?&)>jQyc=6 z8QMEnvC#zSzYZr>ti zj38>RKcYgi2m?aewe@H;f`j%WGu}X0G*9G%md)#44poN35dXD;EZ2WzI;Nmx*adIA z!aqWWiaY^Iy9zZmGS0ByPq@@^1m*V_0P*$eq5Jkz;n`H=`6oH*Poeyhxcdm0U2bB< zTS)j96{M4VdZD2ExKBZ1FWZ{zXuD9m=30`IN($^2Ing8kONB}*72$<*YInhcc<}i~ zK?eW?-7hnjm-!~8L--B$Us5wF&8e5#fZI;13FtV4qY@R}7%3{6)8Oa9r)eU!9zD@6 zZd>-IHei$*OLn{Sy*QJVoh?mSxX)zHJD+u2T_O&hcHcfgsl3$e{NX(QrF~^>mB^`V zx20KduJ{|wjI28?y6GxPT=}hVkS=3cgSbXhar$t55qEG`A1;PWcAeLjxnY}m=Ru{l zUy#1kh9ziY)nmU67u07|~jeChCDf8woxR+*yvjbpQ(<3LkK#S}{s zWUyi>G0v+Dyj_xB!jrM6uJFLB7L}$KR{_jT(0e{dA&2ssy-dNdBeRo_wx&;-w4e#2_7q3wIt3gOkg@ZSE8FVNztS^q&iMeJoOt8H~otX4??-&|g@CqDJJlo#t5TT_+7R4=gR?rrES; z;`dx82e_$9aHdptrm0_OzI+v>V&S-`pHaG^`{x=|0W@bSfnTiBo8JoYg{2rfA>{R{ zyMQ{&F>z{V>_P?M#Rcz>N{6nc0;>%p7m@eWm9InAJzZXDrg=FwT$g&(b1uM4bQGZet{h`34!WW2CcosM{n>{R2sl+t=8ce&%qFdo5 z6I$|0+mG6!V*ING+aC227JG`$iHU*fVu5s7=-*s!|G0K7Ivs{9h%V98<5e4D8_z)( zL|!_$bQaraD}z#aCM>S7;=bd{ROGCp^{E_QKce&|o8k%p@m6?mnsfta^K$biQxT6? z!`TDzW^oj_7e2r^%H>TZS>yX56So^Uhm=k7bQxmN=NPWHk+?b$=ymj$crV`m)+tqe zTk5Q0Ac_4knhPtysy98dog@oprV`T2>u>LdTNg|vo`goio?kihG}xFq@0l}e&bsG7 za9Dwz*-W}d@nWl#wiw^p`hVxr;lJ4;^GDvXSHHKk|9F<`0f|S`NEb+ZDISZ@50U?c zco`NZqR#b!rZ?^1l)&z0JL71E4{0ANi+*?A5-C*dwbk>Wf<4Gk zd~3&t9$Dwy_TVG29i+Yj1KMq=|Kl^=&*1y>+t22%qPScVl}y;36i~P~z4Tn7RP5~tIQW7tp&tyJLGFDFl(Ok%`Xo%r{5{66PV#0tXuK#hU z(aJ!-;q)S3M~S9J-TA((bOl?g7tmw*|1m=@ixaeZN%m+4tCA!hQ+98Y?90>(m%B-> zXn-4n7mrUS#%oww82K;Ll_}|0Y+teoqxb$rXlG`$yVa;fSAV!EAfu`0WAmSi4H@$r z96*HxAYPsSGIntoKM?j_ugb?H$%hQ~qJYh6nz<&7Z#V0fXBaiNvLfXl&f?X1%1K_m zOZfsDWal)=xJ5V zp<>t@08&fmGoCcK_Yqp&!1GyTfj0{LY0IXS!*o{5YI%M1v*3)sxRDG6HfPGNm;$bl;j09UK1Pz;c z>jFobxW+pyMn1e~?6H{InJ6nQn>?PF^3a$Qww%?roVS>q^O&5mupAGwe5XBms%beF zL$sEfT%54{xNP~3WclgL@}saN`zQfLvHaj6{TX7l?lJXcUgxj7#s>%Kg*6NOjfqw} z^JWMitGMJsrn**i>RhJWfk)2)O?m3A^z@#zWwQ9x2gu~9ne}O=_2Dr9-5^w6IQ?U1 zYI@oFY(ntYkToI~Q_%?c!C*bpTzb$q0bZY&WS9g`R)aoHuNK;D-kO$^O3K<-=W)y;to zi*bvEzvZVTb_qK1bC|5R@{HifRDI-!Hr0CWHVm!^lYO z*QNKe<{OAMH9+TLOKUPSWJf)L-J5(`JFjBG<5%R^6<#J(0x@(+U85TyQh2u8ow;4z z7yKB?C*ME)Wp@~6ryVIbMqN-7nWm$E9MH+pH9uPmFd5T!p7Tikotlx<;ATBbQgI=n z=OHkJ+Ji>7^GdhD0^9Y=-}j%#)+Jfi-8)oPQE6 z2v*AwZobk)4U=LPTf&GvV2-Q8AwPR(pU^gvh+AA>r-P(T)O4Fn*LxE*HwC7XtUGCu zkgnB24HptGo?z?(fsF!#%rnj{#+Eh!%}B_4OQNHYF*SYLGb`oHPMJ& z9FjSyN~oJkySO|jjIUzUg|#Z_%(~1b)Jpj;brsng+5nDQFKd@1>ft|Wn`LWjCT)6t ztdQ{GVNd1d_d=v1q5BE;l1|MH~4sTe^^p z33hmJlg3OgNCP~r>UXgboPsfI&L!&P1^Fy36zW7bP z{V?`XqZLBrDO+a)@-~7M)0X)4n0kSJy5bPLCq&Z)^2?I{7tfdJWd8dI$J;4#V&xv$cj)5kTasViLUynUG!A%O&cN!Cdh|KLP@$o_CFvGuvk`oicU{#S4vmB@O>m zgqn~}i^2;j%#8urhAv=OK7r|r2d`?0Yc--gaK_6JV!+ZPV64ODqQ?$TkdjOrwV`~j|?q9L^ z#Ebm@BkZidqKq1LJu}qMGxX3ycQ-2CjY><2bR#V~Lw9$BG)Q+jAR^sTDj`SMY1YR^|D8Gz5{ zn5w0R8<28AW3Bc=hjfLabA#e3=Ff%?+6aUusVB6$rI1k%7f(hKIQF(5C$~|tCeam; zVENG+06L<9R$KmmlP|qF3%X6PX-_G_mV6BfT&&EoTpWXgdyQ~Rv_~rTIrZhr^=`*%2N&e+IJ4>0BvbHz!~<{v5b8?(p_M8RN%)%Z#v8^a@krlpo(-6C6s!{FPC=jX5IE zv|DSu?4*L5%Lu>8ynw*M=FC;3pD5hYlN{!2RCE~y75kD4?y7v#--#s z?ppf(J}zgg%_8josNZG$Z>cC`rQu&o79mpgc2aGAH0th#?Q4ASUC%qD0{6 zy7Y0i?_WrmRR~6xPs$6eIlzlWo;k9lLP96#IgyS0G)zR7;G#aI@QIgXBKJi= zHZuFOGHnI>9F2Bv1ejLTVgvE$)1P=Gr(QG04;d_evQ}!k%={Z9MNC(3O5p%q;kDlx zw^H(Wg4J@dxmXfBd3@Do)jwOQX8Air)_3+@%S+?Lw~sH^tCwzH@xQxrjwyQ@H>GF# z+L`YD-&RNNyJ_iN3%g%%uw^JA&oXlusSJ%x;EtF7kHFu7e=O`U|EP1K7;QPM-iTXY zZW7vrAhKTYHb)N<9k^iO|J47+o0--G;g!&${3Lq zr;1YdzfRTfd4lwD)OG?O@8j2gRn@gv^0-tdr{>mHcb95b;mH7RYa0j1Wb2wxnZB+~ zP7G$0P4fE`f11Jxe#XDh{R>e-)L)Z5n1cpN>XC%+D?0F+4UCssDN_&8q)qhx1+k-|fnV z-qXVd(%##1)+Fh>ts>cO^yo*X``ec{x~d-d%s{7b>fIlDA@kWa8VjiKPz%-14PwV>fW6`_2199xwl(V$=u z{&zU(iT@xINH|*N2o7yyAKKka3RSVNy))Wt+nY^RS&wC*9Q`G+XOI})oLan=xc6C5 z_r%ARo)uP$rz)5^8&CJ|StQG9Ec+$kF{)+0bC%VOZ7&$MKmL+dH0QGghj53}QVxX!AVHJ6Nbxd|pAD!1KJ;`D?AMxW&^+9^;;auMI}xmDUWrrsK|w zd6pM-&M$b)ztMg!?-sB3F5rD(-ukusr+7n9#^H;rgQbrkiCSA?J{v+8ld_6Gjj=EI zUOLDu4=YMEr)H3EzvOgT8Mig^&zR(MkUcc*!Nvx_Z?JJl0YCsB0DuQD0eJ!eU6w&alYooc>9NM9iCfb1zH{TKY9Yr4}OeyG^~F_U=cEEcQ$T*iYDi^ zoak)Y`jX75RjA$7{A)a0)Mag=t7Uh(SSgNCr@M83zUpbMhw2}jVPiZr1$UNU$s{B_iqD3Z|;D5MTjBj^}5>we_R}jhdZ+IrspHun#mPdUb);AzyMmFs?to&gX+A})#{p}ii3lihIS0WVI3K=MxVCO zz`2&X^Nhf$0d>z)*D!=z>+)RcAPQ0v!P7CD0Ave>w$3#xV-YgE)<+UbG(OZG80Are zoy-XNK|&Bek0L-Ix{=FSJbDJ%vw|yxHit#l(4yYowU_3`#n<@IqWx2**gR%4Ca0b1k>f0jVV zN#A9=B)9fuEMHqc>Y5m$|d6VkekYyX;5 z#EHBB5sRhw&VbmizKc#Uuta-4@SD7d-!Y~AoymBvX|KHi;YoJaU)VV*21cTIYOhKl zkI*tW4N4H?TJQSt?a0TEkLC}f+>fq)Mm~B%%5K(*9)0|6*+&hF-gWARkO3Ru740&i z5ViMYl=|-X>~KZTvB*yS6D424p61hNy4bzp3#P>Te_i9*!uR`ENpD*Z&aD6^cyym& zjR^3ghn4^ro&75T()56QI_H^CS=X0zZ8TwcB0@mfyMZ^)nwKYl+gw+et7hk zL3x{_h>N%sA{(wx@z3MoJ}z-@AnIJC3n*OoMkFc5*t(1sWsSS+BEQ4PocumSJsgN& zQ7Fq+%vvVl4+$nHA-Hb!Q<%UJC`J-@imO5%9mVTh%v`ogLZICnHixmLpP2nrJ)T2Z zMfYgJA)L9i!ot86Iyz!U2tt7>l{qY&2Cg6$7K}fX5=}9}%&8Fu<2!SX5Zh*8no~#O zJ4bwgTJ5u~sE4L|Ggp2u<59B3qJMMd8*MhZuirIhHfQJCL|9$|a2mH9vr86sCO&!6 z)m-1Vk*ZWuDwqNq?aDt(^W9=_4x%1^2R~04pRiXu7BBjd(I7tL@_wjQLpNyyp#N1{ zhbqoNLOb)kfNsU+X2%}+;GrzUX{vm3GK!h*x*>lR4%>nt@-hXKT~_e`H-9T*OOLe zn>YCEyISjiSFif7CmY^gjj!J?N{WY@vA&p-Wxe`o#Ekf(-Sx!U8n?5UW>vPqV|oy< zVRo792e(5S^DcjAOA`(A^}s#I70}TQ;BO+9k6m%31`#TERpIDFdwr9{Q=)0P96O2` zokJ~ymvRpJ+;DC0av%-<5+`RUAOHMJ%DgLqoCq(cS9~VFoEN$cTE_sOWU$)iPck41 zhd<{|_#fD$MQ{h5F85RbB6N)z!7}~!{Gr%y3uc3$AS0=xd=SoQRcxs#w50TRd+Db) zlZSl{M)p8%8+mO=Js2R!2nCRxN!!ssJ?&-tPDNa4+NOLt5pR0?T$lA1X{a^pP{03v z#4~_IgKBj3SI`3SlITK#@R_$>cLr>`7)#8vRMWQ(x^aIk;GWU!KPA`;RvdP`mArI&mzsgb~wM~lK-qgGVubU6=h$~j4yyCF-aX9 zW&eZrYu-TRh-$1>87LexQAj9*0;+W*u%P>HD(W3)Nd4e#&RE}^>OSfuk8hJd+IL;q z71i^VhM+k6$^h+IpfWuVaT7vGIhhe5^N_lMZj=Bt|Dp-7L#eS81n5zW01Xrsh*G|1 zb$;rS>hmHFRi#GVF3I6?BWl}4!9VXL;p7`hA6yL(!vO*92;s@^OBJ^&hbxfTuz`*y zz=#3{csz==j3$%|Tc8((-|WIw-MAAt{k8XqtUgY{o|9M3uDg=d z>QD}`5Sb`HJ`kXuzy6QWWtoXJH0Tg#x-QYFA)e)d#X;;)Cpsz<}Z>;#DNRe z|9bfT7^yiwRg;8Q!{I!`(W_GS(E~Pfc!>+faTj2+reAU72C*bIub)MGmS=^!OPHv# zL%ceYsW%T7 zA$iidwZ=}RT{-49;${1k1_22aB|fi)6Vh#x&$*(ncZ@Zipj)X}e975-6^~J-xwO&{ ztIin9=n#B^{Hcswlhe?b2I;Ju*{KRSSzeS(#z|W#^KKr5$QBRSh6;4sH0kZbQMh) z_A{uwIQ53!vzzy5spzj)5NS>OFg6SGXYYwiGM@yLgl%d@hZba(6r_|xDqs8G*k)n- z+d~4g_|MCOy##}NfRvEp&{6ww^^lB6?a2!~HZd=9wMuSGWf@A{*hdXHt0+S^N@MyA z*!kHSL{PT5m+d28N!TRC4z)^Bz|tcycoO8n&67k_0sx}%qVQ`flnbzOXe$olOl0hy zkEZnuL&(nY>Nsk_z#>|kVx&!t^OuT@%?jfk$oeOcWwGyIQ2xwpa(Z-JQqTvoKek~R z@u9Sd^RdvZXK5()w4JdsVy8MplWvfIX?IR(^%DOkExE68jZ|q}x^VPGS^fEebJuk` zfG&er+C4Cvrk=vDs;1T~Hr-;?)0qa^y4pbBWP4|3)DmV+(bZ_(Wt~)>ToaY=xC$ZV zfjovdcx9B0gBT`CV^g|lTIL@tmeqL!ZaAwDBg|E`#HOIEN}YspL&|Ckyqadtu5^AW zjVuppa1c%?T#UC(4Gp1*w@O9!I{iRl_oB*OZf_vs$v` zXycdNHcIV>_}f-?X^u0X4AD&DuYGWkQ|so{fO8_g<5L*gxrJ+$rQQ=8w~ zzUZmt3d*qI?cm*vdY)H=M79^kr7{pwvT7MkrrXMmXH0?8YC5}Iyc*sf);CL49jQ{x zW$;&M87-Bz%Ba|ay6>zl>VF>Hxp&+0>*5y#Iwo$`sck3yTrXa7$Y^&Gs z8>PsB)=En=tF-vUS^8VA2FO<%CPe>cUUCv!yHpeL)E1caTXi&;G7{y}| z$W<{k$yQ(FAob(&OXD8uG2X0qvc*$}{vADJq8o);v~((+gMWi#H-75+dNrinc7?A{ z;99%S5eT0f>#AsoYb<9tS5u#Si=osQ1kiL#41o9nWb2>st1qR|*usq3iNAOn*|Mnb zZ~K6JU2nyE#D)7Fwr46GeSBVd{pr!P(}J>~!uZZmXgXRKUW%sA%1tVriZq2}e|z@# zDTB4BS%wC*c|(B}pF?;DLHV%fn8>DcLW=dSM33|@yD^1M-?d`cdX@JE^-Mmnaes=j zby2Nr%7C?vjFWwI$$F8KD3udUNA*Q6Yl!l2m@^+LoRcv8kU>mz)XUltW{$k?%_Gt3 z5rYq#YPb!k40+OzrGBfU+5`?h8Yiu$|Ke&KU@+8)Tc+S2MV{iUc{wpd1YI`w9Kjt^ zlxj_neu6HC428WyPY>S>~a?pJrzf_d#JO(Uk!)6{O{q1t)82BWI8T{%HR z`2-Dch9^-9(>#w`&T5DFF_UlhcrrrT$LMWlg_}MDv}ZDHW(F+g9}GZi8ZxGz=LJi8 z>L+S1lozz#AnAi*AMsC(fM);1PsUq35kp{UG7QgYO{lEK@!O!DA?GNZrkIJp3Y83M z_5>0Bpc3LA!wCs;(IKDQo6&MoM{buCSWH^P<(&qnG~a%momiB}vW;}3PlDv6C?f3DqritZH%Cog%;cv0~P8`lh_4dg|ZnJHL5@i<8b;^ysq_@zYcujnpt?;QI zqPRfoW3v4&f$M+!%wG77YpR7rifxls;!YKwBbe6g|KcX zLN{u^vH<=a+7BQ;`G-svLWkGdfNu^vex!9Bk=gz}VmK9$3MMxXJ`xv*9!a1mWb|1R zIDE3H+0wGzs5MA-w=H!lz}a{#IsjUq^bn#PJN#E)Y(BE~Flwu7qA9Uhukk&Dh;jI7aQN?#TTw~9{pgg)1ssK3k`aG_$p z7@p963%g>Fjo=*phtlL<0x1X*g`WsGD=fK=RVeN%|07`_ z$cWl~geod3xxhhUS5AlJZUAMhAOwvm;pV>}D)}E2u8$sfwYZbhSaba-gh_7z2{6_G z+EXFshUY}ZzL{TkrblVpi)cFaoU^Rvu%X8v>S4mk*_BKHvc|`S4}rE^9ahN+04l#B zAByEhL1Z0>pN8*Hg2GC=J|Ak3elNSQT*lyeM!X=XAg^s;Hp zDdG}B7~5TMQa=-tNQK;E)3*K`j0QT+1av}v%ES2V)G4@F0EDE3K3t#w4sIyW=@T|v zKNJfVLM-b-qhZ~^2XP`42L)O+NLcwbLCI}e&wALFrWYMg7x+7K)pOT0Asa2T<~qz zA=cg(gPWM@eel(79ak-}z5YjXHQla#vc=!m2VXxtRpw8YK0N#(J#1gN)b4-wYqCh~ zqgSVM3Y!k29+RBkM2@(}@RuSh%-bJ9YQwJypWOGFAJ_L*(OJvmP}@N|e%m^uWwISX z+=yJ3At5DVNxmwn4k_(=RF5H6lQOv;+lfM|{(_t0j)0x8D$K$4!ysnu{cPKfdg-Xd zta~l{2*4R>hoJRV78yN!TSkZ?%@EU8?o}W9kO?@pb`;|3*q#$#h~{dMyzH4n!E61m@;?)e zk~s3Y%Lw^<+#(=gXPZcUUlqRzP5i#5DLd)GmI|W6Pi_%ZRKXJ8_}!k*>br@0&(>Sz zy#4_E(68b@{_0P!@ce7upXnSt)CtT88|HzH7a;~^1J5`Meq@zAhhG{2n4gZ3GxB^PgL5ZkmQwZk0}?smyJ?bar7CD^0S}k{ z4i)8C5@Uo6Bcp_kAPU^sQL1{|T3&Uqita~WKj4xj5^bnMYf5u5j4v=-UM!h z27cmito`zY^p|_o&R6YtagH80Lp8?LZKod6HUT-36zMsb7I~mO$V`!@@7vh;f^-C6A8vTM26YN2iG^Aq*J3#zZQLh!5!w#(v zqtzprRK`9^zUHNaS0BV!Uk1ldh4GXHp{84X_4-Pd=X13;=ir; z`q7_B^U>3kQ`N-A|r}W{Enip(&CO_XO7e0L*ieWAd0CE~4W5l0rgY(gG zSoo>2_+#~A zU@*3ItTZ$*Ky1%}rK`vFvw7eG!ft!cLb>lZbo)!kB1j=E)udQSIPrsLc52BdF>pC& zdy2bo{I^S@GV1=~BW0V`t(gNgQ8vGWc%-sjWPMcMc!qWorL8RsdrXnSYJL2~KJ*($ zm&OHR-!bZTnO=NU!_ZGnP;_96l1aL}Z@DqOp-h*(@40#$Y$T&`sQfk6N}UugkzQbq zxj;k=y=f`&yPt#O{83#K-vZ7;hs8$co_yAJmUzl6gt;>oyb>2ea<$~Hvk}9Ta)y-r zaPxP?5-58vM|O(m3-;4#)`aj`<@)Cf9RgYBl4*1p2OL#V!RhjVAU(r!?*jXYG@k>F zLOH2OoRqp~DngKY=peW3ea!9?sOI$D1`r;ORtNBE*3{XgX9X%d%2Lz57oSiRV$FEw zm;JoQbnPTNXJSCJ!3SFf{F0f+6<@_>wY-k|G)H4=_XS$y^Z6rNX5GmleFdXuxuu#J z;5L29zQ6)$^<=nGx-;s+)-ad$sRW(dtDp+%Mc_V#^pXo1y+N#ob$7-G=5Yl)i$=MP z3G1v^8M}|>gO-{Ct%>u|2*Nk#Mufk}(_zodFmjUW%eAm}NW=(I-(xF_+h+dpiVvI7 zzLW7-KW~F?qXLl4i?aVGE*_+633mv8r6n`1wOq&8o^B-cDR>Y|`(J{U008+V0$V<* z04_^vr~AEMo6k}zf|URY+qmCp`}6_j%49Fvy}Z-@73S#E=Yx%l9ZJ5CF-2raha{9T z%KQ5>U7aJ2sgFXDIp4GTd`OF-u?{Laub_j&EYy6}uch2N>+HXm432%+d;44Pi8~W- z_TPO)cgUoc8=vDxuSFw^A7xV}%4QIJMmRvt8p%olhg6bmlU71rM5w%a+)K0MiKDwD z7<0%#s%sbPiypkeCX*KgJRcUG6f%{@Xq#*A#B_Z{a=oX}2jax5=rqeb$l8MK1ZJ1} zX6&>$K0HOjw^6k)FC^jApU{CS=_d0X@5KIX?l5Q44{yHLxHB$^giC2MGXNekyD!61 z=3)<}k9vCE%nlcl_8CJJoxWx|(WEG#d&j)A1 zb$MT7Zqt29_^;4MUm|geLqOF^RVMl_e_SoBKH<(!R7`HaAq@9O29?@S9D4g;eP8}v zNL<0`Esyhv4X-?H9HM(?S9qu?Jk)+Q(GmPK@Nqti=4q9M2@OD7?1lOGV3`-HS1jb6 ziU2jPwP^FPuO0t*%P_uwd*}WhAmBCMI}=&6UH}nJfS3%ceQ>k&lX-T%AD^^{%2HUtjpXByP5bgg z!ykVkG5LkxV900hhgXHNQZRXc{6M#U^0G}`R@kJ(31bJ`pJDy_9C%{Pu~zN>Zp~(; z4v0AKSzB^9;+ZSHS)WV(VaNG%_^EK#^m*^KRo4w27DMU*ll=rxYaBgdDJiWad$-Qk z{FO+q%U}0VxRzAp3_M}}qvUL(?l+F#pE?(-5Mn5>4hm~lR$kIT{@P5e?S|NU6x(_x z-1ZvFwy_rgs3y20r%S7y@{y_#C9e33gA@|RB0xaJ6lA+l{x_|-uEaX12!>*C(oY;D zAQCy#Kzl^C=~8y|jf;Ve2nU_E2ah&IML>xZEx-u)c7z-{f`KQRT1=6xYk>Zx{CXZ? zX`?h1DlDBBENBhH2u2Tx-lg2#4ie>*3MpsdS9dK!67~s8W30*SS-~Y;ebV&FGDMx7 z!I_TSJ%iRnYmV_^WYKwOLTNT-it11C-E2`|Lxb|N9IzqH_>^0)EQYT0xvk=-Y)Sn` z6dX-TcJuwcQY{WH?3qtLvvG5j5hVQ*AsXBGY(|lx@|XI`CD9~5?h9Pi3On8WJLmL! z`A$!6y9J6HI();6^5>x{^I%2C_;dxQwwsn#Qr1tcG|Y*62-k&S8Uxil5mxNrC-VWr z@ymlg>CnS8X=e*mdiOBH1lU4IB=Av+VBq7p;1s91uIf(y&os+q;EuGhKoOk^Cd|i4iECG049j#`M|)15!{@Xv$V={rIEPg$kaD9wzW;GO=?8( z6~$Ocz1JGaNR6-8b!=k2fo7vml)-W%qgizc1{b4A^y;yYgol}AfP5&x5j!ar;loWt zErcq42FX4e34W@Wa{kGcmmm~?UG+$~5j7e!BBLk^TIL2X0U18H))K{OZ-mjIv(Mo2)wPt|eq&^nr><*ji|&49VF zkz#bs%l*kCHjZv(4YRRNr*|P{mfa1>D|Kg+X3r8y^#Qn~7o-gnxD>fo3{Hz@Gzq2s=^EwUM@zmYMkz&OdU+Xf z(V%U*H(I+CC%4X*7sMXd$_}Uf#vZd8Wg% z!?pAQm2>kkp5a&rU*=4(e?v6WlPO`$be)f+=S`w@9*6GpfcGZ&M4!iz7a)n$<+X<- z+n|P_fHEL4qr}m(Bu}8?ZBZ!Td1!H%T=LU7G}rFvvkYqlL1Qzyc`eceTLxVPlzPSm zA9f}NNQo2cPa*|E5*Q-B8WF0-iLyH77=+I(rjHmPQCNaAB1lhcDoAr^b{MNkxEv(c zmH|9D*6rH|rZNfdeTvT~3&I}(BZv_?43r$i2s?42r4pvw!&3cW656)m6S()oxHdkO5{--HIX*lfEqHY)6Hj>3+*qxtLVWn} zzR7yAqiq(#5Xb76EgEbT?)d%VV^vp`=qJ$C1Syg+_P7@bgdcyw*PcE*9WaCzizIDY zFa@<_dcl(LDUA!rO%qnBM-jA*nnuqTM&Pqw6bzoUfmJs}F${C?5(3Iu6?1jrVYPk4 zRjkT<1Z9KB55xhJoDz~G04Psr$w*L&VxD93{RXi9fnUG9Mgvpar}lKegK==q*G_F9sEXM3f7+3QAo^L9+X=mWel1WtR=SQ zu_Nj6j*E0d)*`a4vhc036X{tP<_?HUo2)lbQZ1MWdTM4lN_Z}ynsBHk8s-S&B*+yb zkFS|Y6?-3x@Gc$l+=NvjX|IW>0SN=wo9Y*F!zK@Q$NnjB!jmo=IVg}Gy_w}bUR-U_ z;70NBk2&nVL@WOia6He2QXO=(@!V8c+m1lnh!hfNki2YE z7k!5NimrWqcZPrhpli`oQ>$5>I}=9$0KR;k&k?rcI0g8!Ik*B5qDL@rkpTESL#e8O zd;y_VD?0!hU{y6z00ly#LS6eaSrv9^9f7ZhkyM?C-s>F!eHp$^EVuqlDt#GFFo1q9 zlokabMu`J!5n!5HN1yz#NW>;fyW=NuOcX~uu-4H;#W8AXFQITRzJ4zz^0`UdUh=(T z>TuiUV0|=)M10|1Qom!CkyEtpUQYcUK;O|~TqyC1^udeHWE`Xr;u&4d7wc@Z<0MNDLIz#2waeUOp_$PYZC6u9KV0oyKQ9_BGE~` zNZC^SmU87or2gUV@bT`{@$rs3(i#9ZImC+w;1(nB0$d4-0evPOe<~1Y_Y*+C$&K#e zpG6^CLXT6blf3}I`S1~RwckIM7ZXzxtI6I<})j}aPI58b+W0$BIJk~?l+ zJONF65)`3hpP+HATu9eFiFZ9omQL`f(G(4yU4>|H)CaVY=h@p+m@yi{goZAm@#Q=j zvOEboyl63AU@K1=y;D-bGc36?MnN>Q+!?u?_dfKLA!`4S^)N}>o-iksed&y>2>mDW zl!V&jFUh%(dDGG3A?{m(0P9k{Dk9Q7@Iwv~umcH`7ed`15@R7!Q z&9>x2CwUI1zEC2)5H9kOa=3W>#b-IyC&K;pBWh2zq6=lU3y9u@&a{tI)@v0`FRi6h zDZFz=j2CyqYkfUmRlz^P9Vbu6cqsa5Desfa2oAyej*{>GXhwPB1|Y1GPQjH3OD4Z_ zj!Wxz7wARbmz-yU)LyWUUavknK|MUxqxM|{J#qZ^E#xj`IX$;e&pp3fdPO-o;axZv z`FR`rJ2_n1`d?YT^V;Sy#+|G|rp!t7~kz zn@qhxm)+~sb-x^pW9C(W@5h^5%ymJ>W#aD5JG|G$S%Ggl0!ujk)765qNN=+60&}eb z%cFwcX9c--+>|-oq;>?Q6$Pe81=d6bW%vg+WbL`Pj`K_xw+pf5baLpOrdNOT`xA*U z_P_1&cj{`m_38-j_P_023NG0Vw!OXWr@kBDyc_&-iIThVI>b|7PDgj(Y@8MFAH5LuNZ1C)ECVzPep$ zNLY;uSzWrr{Mh}sw)Dn?L160Y-zMk%508HfCn;am?te1fFP^;Fjk;e-x}Ryd8@o#1 z#yqH>L*{qi?p(cHPrBdTz1vLvhnB=_&V?MWzg=IypU1q}-wnxrG}aU;JL3Pj2QYTx z5&U@$E<%j?#vPB%`>YUCwrt)R{&yM!b9dsay3U5Zxn~vj|ylEoOYtEd;s@O~H0Z3b} z#X7SN@81U**d}C_UsCzw{%}2Dr%TOlwUlnlonA@ZA6%{k*1A>X)ZGr2oUBlK{}}o2 zfY>vbp;&5B_oINy&C++APwVqv4<}FLU=eK|b&2jxmnx+(7Q7tUU#K#!b)Wp(_Q0?> zjMwYjw*UU#>3?`UdE0Tafr=s&)O~Xaq0{0Q^;l~~Z|%)hK7Dt$DD=E~wOaMqU5ec* z?O`35&*T0sFzsNr#pC4u@!j>=?tFs>=E>U|tmjmW`9I_W))gpM-Wf7*JoClp>0}PG z47_3vhpI-J00K<|;E^!rPIweU&^6qgELMso+*~+-C6-%4wb+Nh`cs#-Ntq`a5qN(po_C8S0`?veh#x#H%s(KN27 zHUB49%%K(`;dAhPwB>)e;^QHhwGF^iF^%WNf4E}aWAf-$i-rHi74r^NgFeFkX#R&Q z4yCXC4_6#SNnKp<{eQS(msI}$aK)}@x*uNQ|6i`y=>tB9PaTC&cu2mjTKql)wI3mg zumvF5=HebdK8E1!^#x0LZVkrZ3D(m~pKndRS1KyZ|9gJ0+~8t0^&`-Kf90e316R!W z@^HP*hIG21&=+xe1gna|Sl-M3z5dlREob%a?jCTwYZU^#=VV4)5eKY>5=rcBgh5of zHpBmKuDDdK&y50z4OE5zVtJZ7ZDR%7!SCb5rnt6Z_-klP6C{Tp3JI*Z`_J6jspOMg zz@0`G3Pdz3+n%~qsN8fNU8h$WCWh6&GR%#*lhX~~=E!FQ5jkc#FAJS2vhC_)?DL$O ztL^hWrto(Q{C2oG(=8N79Wsq8jO0`Bnf3Rwt!SO?6mYn5xk@>RyB%}%SlGDVXBf)t zE2n8XS9ujt(IQI9&Qv*yKq)~LrFzZIWi_1|m>57%O{UplRa8aLUR?y zC2rlD7{SuYBoBD=Ad%R1G8Q2vHl&SM?;~1~SZrhCVo{f=AZ*DZivM!?MOs1FqJ8Cu z%T?Eo-$yF+HbjW|cQ%@a z3AtQRV+#2_H9a#xD^0(tf_H-P3da-JF2WEAF8@{}7DOZN59!cGq(1m5#1pr~2S})FEx(^56dtYg9qpJk zNZIb`&yo%Y|EW+~{_XB05Wk6!F?U4KExLz4Vq+m_k{n{E@`}+8hm)mn4Qyy)Ps^sZzf@^-4(^V*IlgFruI-h(`&*W<=|Q@o;~FT~JC4Xh^i& z!X~Lt@x!!aqo&}U0yH4|6Vo$TvPT!LD1f5fwrbilqiq_*TQQE-amaqBn*r6n$$ zv)~w&O5=um6#|RpX-;4m)vk0dN$O%G_}Oe6ve<_CiY6KiwpEljIxB%BR4H?6&c>Qu zl+sLcsXj(&DDb6as4Z^`N>-2B2@Ix>=3_BZA)}NjLNjY4wHAl+c%U&uTqmMefJ7k^!3$sF z;yPXiJN<6fg%Xm!M}zdoW>Jn2XQnVQSHRrL;#AOOOEK{W#~&tXe6!KT3br=8x_8?LMAlD2#!sr{56Vl(*ct&Y`|7j-XRPqvNqmuP~hF=U&LLR-B zi2A-~B>7rc{n$H)4uC_ifIAuC?)^E>f|TZ}cTcAwNLaIv)qt{yFNY@{`~7?53>6+< z73&{Q`LI$biPy}ef*2kQaP-^53EZ9+NOLbpS z62Ldn5P;|Z8Ne)=y!a0trE(=k^~ep6&vG;N>75vm)w@+nl~>AVVvEtIB~i@`inZ~L zjAgzBAm4iE7fH$L@w zFlX}aTrwsx&&@1Gl5ST%6=x!OwlYdzp9r~O%It%CVHEPJghPp=HXJu4L&45*#Ci%8 zlh_(Q!skTdy8*Xg94W_YaU$(PJp2V{AMi}3>Zbi&5SxXT8cZG-`TUx$Pi%8g)Pb3N z1cM+W^7Vwaz!$eNOQ`#{#xR{DoAJNProw;hBHutPlxSCG)(l=9nOcQ1%V6~#`?hvW zy5-c#aI6gb;dbjBzm)6wzNg#Ky)=33=fC~!II*J_e&%X1eY+-F&5x}L@OX3k?MLf< z2kMub3({@_3rkO`BZni|^2&S@vVPh1g8DQzEBHIrbmy?-)M;Yy-4-)x*N7S;xdI?} zn+v1YHD-KIMcWCWskH8zV0w)$quzy*DC(NhBX6skL}1}0T^7;x`B)iz*dxK0n#)?F zDi{5?ub(8NA8MHJ;EhEo7i4#INd^SGI zi#1*1xlyix{bltSg_E`S*r>AQm48fn`$PLeIJ!vy{ABQC)1$KA6gL+efvGY9Olyi+ z9;1TTa}MFxk68z^!{qnmi5}iU$ru&>ZTlEr$0*%Vql7fzAR$0P@!Gbb`9C9qkEbG` z+g)*M(I>tQlxr@JYMx=b-S9+q^}`qz95|jB#|!>DI4M5^kM{iOSf`@sD!knw{fN2# zqIZv@LOf(7`0;P$$NNjQUw6kzAMbWC#Su@6?yuKl7|*9M_qP}ffCd4QLSUO99xg)Q zYy?3kf~XT#bcw(Mz9W`GQkWpA9O2ZSK$t#ootkabA6ei9go6T$aYIXySX2O~9Dg_! zg2g2g5+HBF?)Q#E3KoXtM2m0(m4whVhhhzgfZ&1RRWPn>Agmb3SQ@GXhF8A~XFl`n zkHW(_#nbA9kt`uu3{^AOA%-*nq`vv{0GLTOd{;FLY!hh%hCPagvt>t;kBBktMS{UV z)3C^JtVnMu*pqCyTL8o_JL>c*3PFQNj%4wYipBv)MN1(=I-{{M%h7rYgywtERGiTo zP_VRG41sa97}`l}+Xt6{q4KhuWjjs)(ajjJgw#PXfn@G_e62iN`v<2Wb+1eu>kVja%UIoX<{( zv5BV&jsM0)@##y#UPUaofg7_;tUWSen~S>4gsN^iaoaxeO#SVqNz$9m1WHiib@aQ7 z<)m*{NdVIjkaY5pWF)S}+q>-KU%Q?PDMUo3UME%Llh&lbM!XW5l(WnLIXF=~B%C(J zLq^>}1_^`<@xDX@6lqd7jj_aMfHz8UeB2?GQfcSykrJ5d7)BIGBq#0g(iJqE$PENC z13*+8pogaC@66{DVDi1HSDMxCtL;(z1Hfr^s5As@py3Wa`BemuRD@2%gc}kqd zVR-?ftnuRI@rVH8KmY1-vt0!yNCpF~i%D|5 z2r~#k3YpdNCX}?^i4S~NF@BL6;hahdL$0SZ8t*>BA>XrUp zfD8@NAgKt5bhqRX(!vnZ-6bX6T>{dn(%qnxD4Xx|yz5|c%7s--$}CPe9>t=B>2Vw+p+kL?1k`MX>saA zmS{Eg{XaX$Zt(`T55&48mEFd(xg_(ZB%7)2SCbe95F1ugw4mi3-A< z#%fH%tQPzA`nm&3l~goTuGe`4FN0VH$M@rFkf?JRK3c3Pz9rt7Lbqi`@o{KEox4XX zM^U}!P%GYC%U}z|E@hj$eA}#d+k9HvVoTe%r8aTCnjd%6R8OeeH}?J34coI%Yj)Bo z1zXxvo!XD6J7#e@&I~&)ygRPaI`)_eZfq#)WC`$$KmDPmv^l}2;|<5SrJz&i%+(@z zxQ7?cmV?x7H_x_s1r5DEe9zx9b*lQ1 zZ|f#8%jK^Zwo|fLXmOIi8pwZ`-S^7J4JpM_41V+~BS;Uu@Z?f2-4?d2G7 z_Zjd^AMg@`<<$@P-438=1_RRv9C-&rIGHFZYeMe`h|?|s&+Pt7w*E+hz_F)8k2Qu8 z(}z-9htj_dEm42YJRs&&$8n?_W-)PbODz!z==zQimSyZ>pk4__e+eoAp>F~G1N*Pa@G@6^;s}712Il%S0pSG@ zfWD+vzmP|RMh+;(Qekm4cAMYeA0I)CI?F#;0}~%fcC9JFq%reU^Ya1XGkp?bqb(;N%J zuL40=qA>YbFDFPKnh#yY=OE6td9kA+IroTbuNG$Dj|@Y==p03k1xaW4+_i1Gv>B_Z z+C?u@+IoH?OinoPMRW#(bfUqukQobvIOfm72iiq>=LrVni&Wpm!i>eV3(Hka`Re3 z{aKLG`Cd&pFGV(A?DnnekJ^X3Fn` zz_Vi8tAdeP;&s5-cKKm}>Rsv!y-)C9J3FkdZMN=hdcPf|OoPO~JF%I&LG8O}q8F!KVZf&KZ*I`n)NTNJ1($Je}>}x zS`#`1SN$T-{mEoj}asq8I${6a?Y_Oe^u+ ziYv1w{H~$1)c-+27%k!HobY>5^#2b9!7744^JOJ1UG{&Bwlo|s zcLw1D;BHZN2>V`fzIm_|WhZ42e+E{cv72vbbORl8xaUazByzhgoP~e z$q=de3L=-ivUy8lBSZzQ;a~Q;0!$t%1$`w$-uVj7e5#;t7*WG8vhNJVA?Rw;by@t8 zM-Tx#a`?bQ78XP#WiLJdl-#$za(c6EC%})TOcE66P?`;8SZ}@9?<4!hg8#gb>+w=Y zMYY*pmd=l(N_n#%8S|el#!8NR`qk0U{)aKbHTzhIo5Cr44(Ms$m*_ti-#m{0T&{%j z{Jq+Ue1OCrOsf2QbI@?yp0X`p`scT1W|qXCtL@6WzqbP9&j`==m(i&#oe-)M6jV7I zLOuv1(~b!^HVGhv@OB029r^*afcjDip7sTjIIg(t#7 z=m5mzIuhNR zp(@(7xjrw8Wj9W$B8>_1C>q8`OyD$uxkUFf+mtZ`6GQ4ln33eb&c} z8UD7eV6|Mzo)>Tn`BEAO7SZ1!2@{5`!tLTg}>*lQXp_e_=1J8#`3Q zQcaqj8I**?F+!c#EQ5yGSaJBrp$lsQn1MfIwRaft@hb{+zADsO3p$Pk*cz(^{+z8Q z`L@A~OC9^SR~`sxr1O`4zmN?GfR@EnupXGHW2!hR;szdkfMa$>S=xA(1lp&{G|mJP z%%|0!A7-McTXd~F%Ow{+8cjy7Md>v5@kUoiSwt1~ck9sqE~vJVD1S3FUq2v8bOw3B zxxqkvJ*c2s6UWA11mU?JQlC9l$y45BH@qH>r{_y-NN4AANnw;}|B}$5yv3h(Jz}Z) zIdyJiOQ_}gZq)JKOSrAPExL3)<~jB`^K!)EIGqRdX7+jVZ{;1Sx#=$00!3g#DJ95ut!!esO3s!5O4ECwqN$Qg95-Q~KdJHM~iC>zTV)yE58)j^~n9A1~ z*7TQdW*f)qDm+GQl4Rx>Y3J>wj+XW#w40d`<6VRs`Zh0*KeCV}gW&Kr5aoD9RbTXA zwN*ESa!?2aZ*;G(#H*kB#nFX1gnTzJ`msv&Xyzc=!+Zr#_nmw%urOo~JI|ZVA6u?Z>E6BnK|$o{-bT@us`HanW@jEfl$NR2MNOYhy6_)AJ!~ z3@tLF4s7OoN%NmLh9(PvUe9?+Pd0>A@ zEM=An)c{JpU%PK*>4>61>P!F+!E9zIke~yNnAMo+lukM?ube-pgbAB9Ob*w#wFHc^Pc0Cmm9g zm44?n_P5i=pKkS60DMNe}i_gnx8nW)d<7XSxLwBBI8l}B>a)YAUp+t zQk~T<7e(TUBC|wY3y~3qnL;~Z1ou?P0BOb~DgYfo00tAF0w1h$v(E=A1O*m%gGfMN z7&`E=0vL-z-j6=;dk_ko9VC(yNOT2a6Aof!4JM)wVq*<_?g@Jy7AT+)$fFP_uf@uy z_g-%>DB+Y(UYJ|QGnjw=y>4T$M)G@h;Sghr_X0cbO_G6EVZm5AA>2DC6V@QU07wiN z{J=5Dhc)Q2LeRk){91?gkzOEMV<@Imu>7Ec>kc3I4i)x7F9-$>CesLef5lg9`W`DM zJiJjzLXXm?Q7C~TD4!yN#8FUqC$uyyNYFAAD=fk{IijREl;|GNJxmHPVS(Fui$fyf%3^gv-2N<1EZD| zf>6oiA_^aHb0T-Hg1$k+4xrJ8p3xtEMV#rePUr;^#6~~6ioV&2z7>vcb&3!MqY3EI z_(-&X37R>K8vB}!Y6V3FSkgOzx3ySP;GloL1OOnIUM$5fK*<&hgA&77V+loAQZ!@9 zCJe}%;>f~dX`A8z$JkCRFclF0sV@A1kzzbixC5bL{C(6Rx*Ly7i5FK)Akznc1-RIC zJYPxx(=J+4KS9|lL4`67t2&NnH}2uJ1+yX>V@W(RAT-7)j&;G${9U5uf^?93;>)>2 ztLsEZ$|Nc5LuZx#TS1^uC1j$Q zK8hK=J^G*Ev1bJZoQ)*^8$4z$YYk2{_&>p8ZJLIWkN*uG^YuP6TWb2R;4!(q%BuFR zf52lt^;OUM|0nR+B4gw1{Udih<Rz9Sgb;rG4e{*n8^=8P7dq!DWK z*9qG|Xlt`u?{A3N1AVpEZAXwcmb>zXKh4+YJ5yz^9qK^8FHgh;pdb@J- zW5sI`ob@|vk-Yt^>rsO2GA18{w~E)J*`yG0F;rlYgm5u3%8zL5?-X${3eLS|a%w`j zT3{$V0R+J%=>&b$Gs1lX!Ayk~#!Aa7E~h*azh+E*T|kdc!}@e;4l)|t!AfT;pf5_Z znqDYMGb(r5&i02ZS%Q3KuX7VPOPZK4(KY($lxVzsCS{Q-K=PhBh7OVx!c^}m%$f}A zkrWIgVNW5~@G|$k6u(=9#haVRlt8YwH#s*Wbi zlcGk|PRmgr5{y@f-oI^zW$%Vxz%V)9HwE@e`jT|+0r7V^)SXS+(M#&h1miY5%~!K& z$89$kUyj=n`DF$vFc%m(%ZU0UC+h`y4;(>+(qcXJLdv$|_4}LD`^|r`(e^5}QhSV8 z_ZSOg8^(-x%@BKoGXF5|ZV@0DYl(COE!i@bV`8pKN|(yw<*L&|9fFxKVKP*_ehOLM z&QmIB2k0s84t%pF7`Wuu)JrWww>gy{f(c^CW|Sfw1Jh5JSfj!0VoA3#ji2RePhU+8 z-R>4~&u?Sjp49;0P?k1EsNe;%Y;$3--M zZ=T1`%2XO(LtvG8RhPGn-|SZm5dA)=nN$6JSic?p`>1(9b*dhH1f>Li5Ew#Lbq^lPh7b>SV$q$v0KUBhv0Np*#qEV)at=Zm z2a!-c$(OVVgE;a#aCj;&h$TN8ugAHYEVl~5eY=8Zq0keS@5oGc?^^a4?4i3k36&(s z1@1x>dKsur!-z{j`06;6l+BMY)T44qidfMP2ALuhUMgdmcRu@~rxBz@@P-JNp`Sl> zf?0jU)Jwkngm? zsL$5>bK)#9Atev0^ZtvGwFZK8FpDQNg+kXTCVB8641baJqX_ePigyg$$`=s7N&)XBh;LES4fpRejF=lkJ+OSSAlX5zfqnAvpho6-I@6?o)A+-UAc`&8h~6uBD|p}0(awlYbCQL zj({I7e0@thL`(q8sjq9Xgb~eMUvBY{*@vrd>LxmgLu8Ogg+4Gc7kpTcjeF?ZQezO{ z6WM@Ujmg7_#5oIhDOX~!k=}ciS{-~rS^n+wqG=+WJ^qR4M-@K^UVD$AL_B*@fGZ4OC!JFVe z)>b5m950ZDfPl?bhx#pwHd09Q$%BnChWCS&FHx2{1$M*H8T_7a3^a~&nSE`!QgMXZ zVhJ6O>)wUfAh)J0XU03_QzTrh8s{ygn^XHL6HD};XJm3-zf!ET{evrq<8# zyh`Wl>;8#cl*8b|WBmyq9j!Hvqt;!kcOKzC)4nEciw)>MtPmaZ6R4^Uvwf)PIAHke z@{Yy^^_G2gB>wqj3hc?5$+_d2+C%n|d6WM5+H;?7iHkY^p*uF8c4_Eyul5KxH-nza zubMne-vcfD6>G<&V=aD{UxoT5eA;unHVj@RF|(p{QdH8m2fdI4g=$LySA4k}l`n)MQX2Nx%<5xUhnZ(k4J_4ybv) zc9J!um6gX8rgtR=oy#dcv^3*1c6P=_t-lS-42AvC7Bg&=CR3NhKjp|dV>1^vB2EgV z;d^NHMilikBxA}L(@E?179&-W(})}I+<739gpIQA+2$P+%M^JKLPJF)JFHuZ9SdbL$Ph0F+vrxg^|mlvGd3lXcgxZDg!SnyR|x|VxJwlPH_=>^-( z0)L#jGrtcPpno#={`qjd$_!J~+;o7f6JAKa8+eWj3mipU$2n|CoVo%%6Tem_r;Y4F5-pb-lFjK+iM(Ja8y?{qY_gd+)^aC?72#eO0w)eX7@h^yV= zX>rwrR@g2WrOhwon}uU>!3pVzU{R)o%@E7fH85RB0(EtKVM7G$6nz%-aaj-WN8zL} z#97Nkq{{*J`qobRfD3Mty$C40C=7fB{32_~WyQCtRB1%4W$^dg9@V2^ay% z+AwxoHW`$)(DwDbVPGj|*ifgtJc8NA6rb1MwfG9IG z5{*mRiHk1w%47q&>r!`1=)~3mj8vFd50r=(P>{?TEX1Yj#MRk!!RyrJRF5?nG+MNB z?+9lU=>z9(@4uRfsH{@57c3mePBq zkO*g|0EU5x=n4pal9$DR@ljgzP*87~UliZON(?(?vsYKCFom>Go3578hA}Z4qQ{s0 z`s-(|zR6t4xqO%T+!O`~A8)~1QJ}JbO=vDxNlw(Zk;BMR?9HOPdU=_OkX3uuB5iGptNLRyxg#u0;wb-~{I$ zo~^uFmbU@6LE*Tfa7+rz6;>1A^rD4}l;3v1cq?fGY@f88K4qT@yxjY=VNkKxEV6o!prs9OE@=UbSK~Vdrwamo3O5%jd8zuA~Yr8v985?PgSjsAF@2V&C(TTX( zQ0iy?oe=iLs>eAMOr{^@(Q(q?@LINN5EC?81S3V@VYNEw`*3w`b(TCIE+p1hU>q0g z6vX_6y78U2Ts3a?9p&e~)qFKRd}bCr?&mnIVV`F-YM8(|QWW^K(ip zG&mYu(imTQH~f*7bi4OcuGjmuFrug%gAE%)yc@&P8Y4KWzXYa4rZH0dYLpH7829u^ ztYH(hr_#(R-XgL|hc6+Z+L^GiI&+^i=_$o$^=37*2J=;{+=Zsn-=9!0e0c;4f^4p~ zAzkr;i2)#waS*FyEzIfjuV5|29E6Y;5>^Oh09$34#(&K(!43t7_uDdbK~x|ux!R>I zzg4EGK{R)u7*fEH-pRt=y?ybE{A7!b2U&eaTsvu3`q_SayLRc`7T9X?d0YcH0 z+ql??Wd;tElcrP0C}9;mI_*@!B1v@19mwf zB^_BDPsXacGL;Mp(2{yv{W!H8^qvEd*t zhS52vfH?&Op(ib9_#z!U2zCfyc4I0MrI#>KZ6&hk`VJSbQ^~$z6&u znhqOw{JQ-ZsQ(TWN`8Blqxg)y6|-vw(mAp$hPh@2vbkHq$Lxxf(E`hIeV0O34Sg>o ztFDF66RxxKpp{lnhC0ha5i+oG zd0DCI>*p4IabUo7Bw>9ea6+VCKr`sWs^O`;o4J^a-VeGT}r9?fMfs;)u9)@c2eP za-$gOuc^vdlyP65;(9kdgbYaYL_nGR$Rue5wEt2{6@$)^IEL-!0=rv`IUvW>AG#92 z(Sk>3IlvF1q%+>I<#@l9lM7T?f~LC-Tf_g}B?949n{E;S`&0O9E;tIh9cl!3&Vz{{ zx`9=f7*IlV_AWNkkFFkyTmo8)p^3P90nOxgsz^7Ty#iZ_f)TC_F7ApjSoR34aTkzk zM0G&+FzACLN4Xvw!5V)90go_Z5Ks{oL76unM_Tq#_AR9iP?IC*WCbAQ@(QaBiee26 z$l0BydnRA?sW7h4!++0>n{1K|?eQOO$F#q6 zpJtaGCng?~fo#;%v7HX0@GSW65Rj*mI2g;hr)k?|Y+#t72(N#ecH=hwKGr3Xs~T-J zkOOiM$i|xjyfcN|K-KYdvtfG1m|YOULS9bPQSb{T#!bkf`<7aO<=>-cLI{?k^4`?k zUiM}yAUijC!*4gTZAWL=>Fz6TEaaTbv_yHmf+W{17)czy9>^Od3(Ct%YeCUgutHD~3y6~LSL z9;_bb&MD!(PvE^Cf5!wURFcE6Ze`aX%Yk+q4>>)AByOGpQ9>3+{#SRpoGE8t4Xs?} zySW|^D&Zl2f7cWNtp>ag1z{0lBUpJ+k%2s9&Bk4h*!Q9Y3t?Bj^_Bi07)}jf;+TyL zV9-N|mGE^Ay~m>GH`|%aj!fnh`N7GmUZj#P{xnr)!O5ieqacqelW4Uis6hAyySS(z zqe|9`Pey&IAJ^pr4ch#$sC5qXYTk}|eNyi-4k5srDi!xW!NsN#Z^7)$ChLym))OYe z1vO?H2QeZX%kMLymknUDXGEQiE33WXEDhr6t4^Dvq2DznEcKl?>cE0exew#3H>aNH z23066eD1=7-EqpRe~ACQ)Az(MEz?%?^Fd(8I^EY#O@}JqsGsV(mp64gZ`{wX1~Okg zUBJXABRQZ$fU!=oIwD`AS5~fr_UicO$G#(OF@GLLcD#Q0Z0zRd`v4DA0))d<#e)5p zgBN)Z9y{TcPiiH|ugDZDSUnUN@iMlL@%c|)Nt%pa{^wku z^5dRUKJ(%24P*tKKNqkWiB;z3Q$FYAW0C%>1e-AH48&9y6hMkGGChzBk}HSHBRy*Q z+qp?e9Phq9xHfaukRPI+9+B(l9a5vFrG_;qT#xXLs*--JZj!U`u2j>+sCAkQ>i$;q zLbn)%~i{x)W5;g*d#2^^k10xXNRP zeSEAM9pN*>PVdq?I&T>B$m69;AJ?hMv|pRLzCnPv?kld<_{T=C!ViRA`*w7HTHgAb zF~O&zHB)OG@PJ6zM43lregzf!>(WFsGT(E7^TDr@LE{)1y{Qj2-=Ay*B|M_kvRC`T zyJ_;muVypkso&KCAYJ3E*s#%7|-(gdT@6m$*AS96eFy8FRyN-*}kf)|DAnM z`<9_iP0!z_Cutw>pB@K+jty;l2Xt;7`rG_&_lttQ%pKKojUSjdJ+b(0S6vE!+^NQcaQBqqD$U55}vD}EPsDJh>(|fx0z(o z{%$)fRN}@5=}CvVS1=&qedu9c_WQ5{=b6vx0858Ym4xK7&#yU)4&Rz`k7s_@+eICI zza8Z1{r?<)DBJi)u%aX4CV;HX z{70~2U}`Z`^!&bBWN^MR!W|x9e_t)KtBj_WZ{NCJJG`$Jx%6RAEzjDn)c6{5w>F(` zk0USevw50-?azOJIB}dw);EB`j;%VIGR7dug(PsiqIK< z??8SyM8daN2vyJuX7Nhk;*eHM5HL#&3MRN0tT_DIi8l!WJKq19{%f`9{?5_C2cROs zoCqL_znxY6gW#BFUNqlX*m|_k1;s`TAM=SRgn-kS2}6PXomt#-A<9PyYNA6-A9W4b z-hR}w4&O}FcfS{`n1$#wCtLcJ6eih5TWzIT)xX7}jr&@HeyPbu?X5YyU zCbQnj31cqZ$&C`)+sQ-AvG3+5FmEwLVRVIA6{OeW+{2BH@W2>ZRI`v|$F?~tLq8aXklO8}T!m*bmRLH51;<21iUoBNLs_#|)W6D*(^@u(x@ZeRIam&VPN~at{hHR! z<8+s+D&a(}heJ{Ba55eEk z3}&zWo4XB{Z$jo^)08Lve}-RQ0)vl_u!ejmyzi$HanE3bF#&%gzW?@@Xl9^2BMe+aeoe$ruO=!s72SBAcrCWj?8a_%5wqD)8_@s%tY zX;M`K9bE@cHnzG2+atpOBt23Nr}@h}P)umgs|!7l!WGFR@2vD2Jlx!Y{fT2JJ~cT$ zL2_S=@Cn*oMz={PSuvVb5+M(I(`jjpp`lb2S)9IdXNy2T8woI7w>D!jQNYo|lfm3t zk1eEfW;?rn@HT7R_*7lLm239c!Jk+LgxKX(cGpA*qSMIrN&sseyO7e~2@Ho9IDvx* zkVx`!Px@}`twyCi`A^9^TQ=nnFS(PJ4Zm?dBC z%C?%puhoxVENK%LX7|A%XY&oyE%a*KbQF~i)agFL4I4dW6U@6_G{?cMQA6*2$;Pi< zg%?<8Mu?#4AKI0)xHpNu^s5TtH7!y8^=pg@ejI}R;+3*TL`A>JUSTWKUVB3FRDX_I zfs!~|%*9}DF?LjxTCal6r$sKRs%#8Z-(4BG;TiiE6~Q%8gC|M`vu}Q>yRnMz5LYks z*VoMGN#3`KrmaTnO}~1zeS=E+KbelA(=e2}&A@R=eKzCdSmq}?NBXRL;ID~bO$HU? zE2O2w%4S``Pf^>JN%n!S!_&1}sa;gZH*$SHYO=bUsLb`Xn!4|(Ts?(a%B{_wE*&Z- zd>C7`bI2jqogj68EJ@An$*DK64ApJw!nNMTo_x8J8(H${dzst5>{N+47e-vqx2Kfo z-k{uBtJP6jq+-i=7nQRQs_%ymOTRR~Tey7r{`qU}*HX(DaJ}hSes2t(`g`W}c3pQWiL+0s8_1=I4TUR~8lV3gx(LL;!?IUTq z>PsqNiCT5T8d8t0Nhng@ zwEX^g*uIay!4~y|+;ahoW(S2IMPcwe^*^db=7KnqclJWmRf$7W0T5^}1{Ny{hk_TR za!=7W`;KR}{W4QN-IP#XxbG1j0;+mziXA@Q%XEG5@f@D|6eAmh_pfB67IcjyJsazx zrxWhWl|W*wMrSQccdO&5XrgrWPEH>U)H6Vu7_#$|6H@~UEpDC(OAX3@Ob^xa4j`-T z?4uG@!GU^qPId}uV`UyPkTvc=N!3x%sz3Xd)OacQ0iAf_ympq}Y0S<7m+xL~2YjV> z`L_KdJeDFn>tI#2E+Ow_t6iXh+i{C}3>3r-af}H0Yp7Wl`Cc;Nouew280fQQW4<80 zlj=~@T88yyAK%}@4!iV!4!&w7;SqcDum>=2eo! z4o#9A!|%YLOom5wzP*=eo>5w9UQ4))CcC-8MSfu{4~ za%Mx*9q~LnajVf#I!P67UfhRQIMG$usa4ny!%)Mz-~e@~P$#auI!-O1l+WZscVbn2 zX+<>eOqY$@h=AgCO8Z#&m1-#6UgA`&U`13x+tHRnVK_KDcsZ^X71_A*CswX2cy8*! z73xo`LvawEcm$pPPZ2UiJ7D=0JWmi<9)<7P8A1m@Q%|7p$L$+*StasB08;N%5J4a> zPWwu*d?&7_I>^Qt_sdCcBML1{$P!A2kgd0rgDFnoDqT>q2sPC2 zC*C?dD4O^E?PY|>N-#_v+P;E!|DC_x@jk`}XU&4S25L z& zj{h76{>4I5OP+uMHk4&^W|j1LUJa6dN4t3$XY(dbD97YsQDP@7QBjZBPM>y?q*jzXp_IfB29hcj>B@D|&XH-2Y;+Ax zX~#Kf?YMN5jv8Ge0-gHlOVxaUWcncG!-0kLrPK6rkqmXljOlk7^C=mNO&Q-7GJafV z=t)~)-qB~SgwxV=0)KTf_nI;f7BY{nGfyb9&P1|)>StZN%eqR*x@pR~UC8=-odu%G zhKOck8f0VN48RX5fS7z z*P!!};X|^Qy`Gh^1!i$G3?;ZU!>WI8hlU%T)N77K9b2YY9DS6gU zuX?R~4-K_p5?>`Ma%@~x8Kr#WO}-H_AAdqhXOCO+wMfohOj= zHkBkb)D%Alw@${Es}Z{hp=z^8mOifXUJ@T$tH5KJxNaKgFwRp{D)je)OL!H#t%kJU zbpn2+#d3Tp;|2E{Gk~F4>%ky5%#tUBN-hDfGDYlVOgU~L*Ggx^<=uGj5L`L7q;e&CC?9V! z=7fsIZn+{KRMjbQXb}pQ%pbJ=gfJmY1V9Q^P<{kt5wGG&EItGbRY1ttl~yRg@E{s) z?xJv0wo1AQXcGz(1%NEjE|1l{AA!NN*^*h-pTvKRT$$NFnLT*c6Af3valh3JFz%C^FM?iP&1y@M~eccO)N* z+L+SOe?Av9&;HmqQX~Nh&_&QSveU`1V;EdE=AOO?+Giyxva8?4dVj65mcxl{P7#^r zG&B3@K3tRcrfuJ2@UB6hBB9A~vmRWGiSF!0S0R#<{uSwxgMenoumhvwOiQbg` zSCJ3RxhmpahJtaZm2hk?l~SJbdPS0RuH;Phb1`It#x9=zxZ7{E)o#nrQNim3EvB_e z8dAsnwq;=R-q&_@-%5Wi)u}#Cn%MB}co_qd^ zC)=5u21G_fc9Yaa3Cls(XkzEl4l;^M9%a_;MOz@IB zifMC-qw{*P%XxQY`JlXjQXuHuor0I&LD`wf{AIr-&7%oE2QwOwNfc*3gFulK7?&3U zL2^9MV0WS!fJt&vI&tv8Id~={KCdy0+;C7{;p}X5nk0g0*l23^k9Z^D~yegcrew+ZfnB#c@6uA7Jeo9EF2M;o#NDK>~oAM+%%Y!tR?sl3z1I z0O-9-A7QB;8af!MgOA#Qxl!pOMYdzpw_{sABmio-N|Tc~XKc}D?B;gtoQAt*Z45+6 zJVh}6n`S&yY)FWHbo|@EZ2G{G7{^NP5L4gy%H%Lq9RBy^Q02%7;dkO`_=G)d;+NQ) zBDgTSHQ1n)?;ceEb_A2HOmY%V@%(|sSrAWgiBIvsMQhipsX=*ez7s zt+uOhB;B*ZTzBCcdkH1~pXIjp&;W4o#6NP|@8h*rvsG5yVJg(yyMYZh`*JDFqxRiA zG~0C0iw39IE}SjlvDS^=$WJz(EjK8YJa4{B zbL?l^PXA}tmEpN1@+!&eV%I|R&0n^iZ0Q&3$n4<%BYV-Y-YrNrFWoInci*#8eCYGf ztSixaucWvzVj{M*o{9pms`-A_rSWjungf?*1w9fy|UflN& z8&*O%jv6--|CPOz9W@{PD|_iT+;cvgwIR;B*xJ{OX?Tk+#JXt@cj!#i;YCAV77Fop zC37E8MiFRPJKEhsXiobms5v09lpeP*LV=gtr}x>5?b#4(QTf?0XT!nS7v2HR^AW*0 z+s{p5KYX0WL@y6Mw-ViP{v4OV2?-kHnUdt8b4|Zq_kNw29)LypP0j(yiHR7b0h?tw z&*GBP@?nxzpxUW`%$^VtT zM3WF|a2#E&qvg4;HxhL1uQ!t|Dz3NEJ&b5D-cX4;ZO?=#iq;1R`Q7Xle;D(sGk(#D zI;g=>|9x0JAc5Wwj~P0zraK|hIOt|+zo^FbsQMwj&xZ(Hukt1dCYM90cHh2zS!3 zApR~n!W{bn`88ZET^l#v6Sz;|H2K#Ukj{vH9trF4us28?Y|DP3=6eWLE5-LUg#ppU z(`e6;Ji3R$!Ro;fTz=sosF7oBM<(j0}mW1lHa^b37N| z4u(>GR0whv?ag@gT!Hy(I2F4@uac+npz!X(9gQ-O50u!1kuyP_`}q|Tfd{vdzzsTl z#zdJD6oBBah9aRQ8Q6AXoWkZoWo#QHU`di(<@>aSAU~V3Kv{Hd1<$}SH!@1AR|jkwJ^;zrIJr_1%Fl8TVM2>MxEs`$b> zMzlDc4{oNQgb!*f7i4l!vZ1q?kyw{(Ma zgF{GnNOwzjDbCO(-Jx_h(jhHf(xQTdNGK&BpuFSW-`QvHv(ERP_dl4mX4abL_dNG~ zUGS65$T!WYvB2wjztD@4+NOS#mJf=&XA_mYi%zfdy$JCnUbc{kqODz6u zFf$3aPin*@o7;l=71lUD#$EHDv2J;B9Zv3zz?y7EwD|rGcluZ@zJ8y}VJFfLrlZOe z9{6L8|3Yk#Mn5ECbAgnQ`x-3fr*HO9$e*B~b$}}B5GXZ;!r-nP@>}Y91dUMDKAv*- zyzg55D6)(jne0MKqKzdnB@65x;l|&Sh#skz1zI$6dq0Z*C=By|P4ed0&A7(&$e#zx zw_wPO{0>WEQx+4y9_-IBx%R%fFkk5;%H+MTMD~T)a;850@SO zk?pMKw+TD5RX=~4*$6YYQG+Oav%E1FQS=%knZ5ep)U&Sl%;$h<2JHfP$^g>@@Frlw*wBNftx;C`HyIGg9w*|IUy#*&4| z!Tdg!mxkM@4bJt0DYX&V!98lQXUNj{1NI_*o;02J>n!zser-~lVe;Q@WRCRD3qkbLGOO7d>2 zOipN+EwMUOuSY;H?RtbE?X+HGZxzSzN=lS~gB+Q^6MlcnHo-Hrlp$Z<-s3NBr^)-z zTGwpnOu)?ftJ}M;2*R$pXw8da>figyT3riSGZ*EOe<4&|ixrwbCw8@isSKB3$s%sQ zc-RgN+Fv%2eH&1%5rw)H zLl5;5THX<+VRHu|LvlLMz|#=~;$T|0lHzj9SP*6yy5!J@gM7>VP=n=&f;??c&24XduJ%&_iX0 zr)du1d{%!TvG-oh4Fcg9a&6cwP#1do0Zgg4se(}}V$~wJHWms5JOSA@i&Wde`oO@#VHhj9ZhOFUJbty!Z6HBDt1JHH~E?3K1|~bq}&prmM%;Im6wW8m2-kIrbWms zz-$+Q939lMsW4lLhxAsejhGaajZt>CvP*hEmyRe*R8)r!uwv_BAO*mHSQM8;6w6xG zj)@UXJ_rv403YEz!m1(N45jBJVWAAuNpKyU0giS$HqjEF#RJ;OXHRK5 zQW!>J60&?@_56(V#S8~bw2ZnBnB`tx%qP@0(au~mJkVvJPo-pJ^x86FWGPPImSgOS z;aQM{?aBf_&BI@p&<^X+>^CJ6rcnP-rujGkTT7w)Ax1MjmT2om^*cL}+&XDZnJ${2 z<}-?cP$y|a83r3?99HK2aSb3miKps(fJe_ri%oWA4ZG|}VZvsh&4J&^y4JD7e_F%5 z)2NA?Q$eYz)UwGpUTF-?lyO@`K*qteiuriNuQWMq26@VKg`jj<6;~;226X&JdOV(K z0oH2-lO9i}1JdH^WT?faKmL^_UPW!v3E!f~P|Qik?Bu!3CZY<+gr;QD4`d2|$s`44 z?c2oo{|cbB=JyYZA@c+V2gN+&h$T${k~e12Sp#FR`2wq=BPp{{YgtJ_S)tBZ5$v8! z#lQ?~7g!;XtTBgjFy|FEWq2i!0?3!KpH+aJTb+{|k4^pWV>}pu3oroL{?`fh{~qH* z-zcV*j{PS~wu;{rkSFwSbOwV;Ez7=V^8YxY{;i4$cBMr(Sp176JL+vQ6i2JpR%@JT z<B5tq`&q3zVTV>#b-L1+au87`*$xs z_x-uM`@Qlx^bdxU6$(mJNsq)9=-5OO?1@@Nz@D&gMq$3LvubaLFvIQH_)$H|FvR_Al(bNpl!*z!CtvG*d@F(w?9+@E|K zK{(S;A*fsen-r;lwF9Nao*9Xz_>xIo-%gCbtpWzGc_AxB`W3kFg|2aG5UmSy_RPS!B7-_G5Rb19 zxF7$?@1urLebuJPFe?P6geMDuNx^`vrEe`y6OAUF3C4uje-3u--dno&M{gA6SChh0- z&Z6O4QV3m#)$f1N8Gc`UNwWC!YrkbU@GqS~MlNKJ@@>J7l?IwTN<^}(EEyUoEC1*H z10`-4;Gb2oP2ll6#O_f83Ra4{Oe5FVaiW5<9-zl$601fDD?o1IEEJZ%l7YNWB6Nc2 z@1Vt9alVCN4k*OEw(?MIGAx2}-W)$5hHgWAQU(Y$AGp830GfaEbe7VO#YwBArm-lE z@!&7Yv$-U&uj|1iNcXp=@o{#~ryW^%M04&L!K$pFS?0?w})ss}1rvT{`~U}>?J zBI9F)wfynVnU%+=7JzK!gpf*wU0MA#(g*%$Y?if1EHs2})Gy_cB25gmT@E2JbDG7b zQpP8HqRM}k0%U}tRy#)ORGQ%oGd)`ZopS2o`YqY37f@!(ETzbe)FcS1l-E3G+BowWa3NCx7ipBvjn)he5 z1+W6KSh*0w*_z{wcc?j1&6V+mxW=h>LUicYSc`>S>4B@Y$=4ea&rH&i4e@HZ(FwzX zb)pJi{Msk_oJ4jwWbDX-8kzQq)jG|uUOOcAHiWntSTqN2z8X$~AHF3E-(=JlE>#$E zbQ5bp5ReQg;6Vf&VChSgP6p)OPNZ6kyQdM%v1H*Xk;-lW?b{RDp|@=Vd>%92zH$ipZ`+jL0INTU(w915$g)#m9(rsXCu#R%hGRAHC@mvFBwum-xge*~u8J@m+y6ey;A5-WX!wEX{@8@WXN) z{X{$tyj^Ov(>bSrbLl|vb)HV$tIm5iThA+u;L>+o(O zYMK1>D8F>AP1mg#Otv-TnH-1NcdxhJir{;RO}?bb<%xBFfNwPxM$iF>C$mtl(F$2) z$1SZkkah!YsKIJV3+~(If zjQk1;BajKxoo~cdR%(U-Ce;hB&4{$wFM?kC`-M;46F1aP2 zsuDxWu?$9(bM2wedVxBj7t*6p zfxKs{6mJN&8ZBcjpZ^&u#9g(-p6ykozjPd~`4!dB(1U)*+egqz_)a>8D&owYXnpKq za}lZ1D$^oX+6=s%k$ZmM+4*QR;gd^@2Jk+$$QZbu_Bysb-Q~3v=uRz&CY~<&GEpnQVhYe?nk?w=OtYgx~`l#Ob#Ad#sMI@%bg~ERfq2y9n zw^za#IyC&tjO(_;zqPpAY$-}qYQW1QcDI3@cJfa$9WjBAS%kx|25fY*W%REf;~-%5 znIw_TYN>X*4`Tu=Si&tkr0KL}*#spiD`l|vt+tk&aZZsQPSPeN+ZOGxBG6I1ZqioHj`w~1knu$9FwHWt3~5gK z%mVV@mtVsDZeSF90#Dh)5vTA%Wj%u^ZG+vIMI%kH9@jV|Xly_5vM4&$FJjI~FVN{p z_Vvpr5NSqF_wF%sXr$>6Wvv&D&Qug!Y}-nQjxYyui)Z>zUK*%HW5pWUg9Z8pm#*L+ ztgt@yRmxgELlSQ1DR={5R!TskqDgUDILD|@S4k)aL)`fr zkpVKm0Am{Tejdct2;xBk#`OYxwt*>M6DWj}Z^{&vmtosVhVK>A*cdn&8$sjDpnL^m zoTvc8plDp#RHBRw+AVh~HuLJ1#Ik0?tBub_KilI(oa?$FFLH) zjj}LN0fNHmxbtCY7&bnYS>miFuavThWz~5-H9#orTqQ$BL_{HlIk|Iq3`Zt(K(}=< zv`#PT^BDAbvQ*NLg{*=~YDpXq3leLKW5g&d*cl5nfb|pT08W8EiOup|RZ=iAz;STM z;($GG#G00k6deUo_Gi)9yQTP=RAxoQj054Dib{om-z3pt0kAP~LsD&3pY71kMhSPz z?)CQ^j%FN@jV#{Fzw-WhLXG+6uC@OPeL_{Umk?8VeL-9CZ%uN-%=j`Ta32To{(X3d^<1 zQQs*#9#WxG@+p^1WqOJ&BZM2)Z{cpFbW`G_{ze%ZM=hoYJsB{a9u zRTY*;D&~4h=y7RhkfdPS>b&w%rC~t8p65PZ7X-Y3!Hv2qYEPz^I2x2C;@rqvs`i8DN;Yrt8XAjD3W3`ASClK`dTCNc@%UcFg| z9|}gLfPhKb#o|_A(dt^kQ#ur~SmO+e0W76W1~;@+f9WF1riV?>v&~=DYg^~d$)@gX zdku~hT~ZMtr~pj4G&W#9Ay_>YuzudBu4r8xdPwtzN)mFJf)&zuuL>uegx3c*85(%v zw^zo%YrzcQ@QJ1vcyx-YkD@B201ObQ4eWPpX4p*+GpIYh&v|CR29ExMAwUll2NYp~ zi$JH@0wHn?K>~4S;+U)=TGbw1`fu<^QZbmstIrK^aV5f_tu*OiyqZ>v57GI2f-Ib5 z=C`fBUf9;u4R|TgEM&dIq{7o%Sno~Snm(3$Gvr-B}vnG;mV2M341R;Xpf0e>?u)m$yM_aCqekg!*W7-6tRtgYwQSJLq?LZzJ{QcGy3ywZ>p%^b4}P9NTv?Du zRt;>Y1VF3pQiA3I0|ps&WVvoV&Br>vV-L?;15v9(a@H+RnrYRZHLEfVsk>6it7j|U z(fk_fG}suixEr|`88ML?u`(Ogt!&Hn#J(F#axi-|odZLyj9$t|0<{5j{j9e8z;(`d zmp&Q4qdL%QCG_RjSa$T;1}R6#SloTjSi;6wVlC14YN9AtO+jYIVL@3)?ud~=G0bxy z$?TB}AMR@!S#rJ!ev$F={0Z>>aP`JS{oMp4azeefqtWbdRm}Jd(VQ^3XD!!#L}b`Q z{B~+`Slu$sbm{|B#aNFtXV;WPu`~ml!wfgf*^y#EYWfinw3IOI+cLc&C9-}uy*M<% zD>(J#+04Ef%TE5xQEmC*6w944%O2h+cpZjGJbvs-a}$=Id)In){8r*ma~DxBGfsc&F_jbLG)ofG+=JgNZA^maQVXTB zZ`hAnD1MJ)^RR|jFK|h-5Zs%?oCWIyU(&@jCjt2?>GR&Jd)xBhFV4cHPt_Kc3l>#B zlH&F*?x%no1`}9r>jmegG+)y6#Ul(gSPXiXo}@1E9WALXEZLYZJ3L=@l8$4{Uv_n) zvi`U{%OLM5y)wwQ;#)wMamV`m*~$?AqGivDKI8jm(yL-vs}XMGLLsZ~yuj!fg!qtc zoEyz7Jxmz}5IA|CB2A4<79=_Wg%+$uZDFNah z*Ue5v5@-Pma{zZ0;uZA|LS7KWX3K={B1aQueI$(5bD>YeO;!jjhS=a7z+LO!XrWR# zUC<}XBdRz-cR?{m?hzj&@#=l#M@eu#MHWeu7H;hIemeU2>AOZK=CArE)ACroH9kY{ zd06^?g9ZklhJZ;`D}C z3gGQstm(x7>YuBeTj`WDFn2YU{N!530tM1H?}(ygwcc1ffT>SFEmZiNPuA7`R;Wdj2nrS31G$nl)Ap6!Q=MU`=g2!u6%*O zT9?=+hJ)YVa{&GNK|C&Sfp@kw%M!W)Tjj-j4eRjr2?^DwU4)@630y=?CQkwuddsJnKr%U&b2+<;Gidx)=pR z5@s2y0bNAJpn(HZi(H@gN7TZ!E_}!D^*%Xnfl`N#aOi<(Cn3EB5Qo0zZJ!5_Q+&sE zfZ^(33G7b;Pz_gu-6_ghTfoRF4zDYY=Ph7}@5KZuW0*zj+*e}5#OMLx=;C{^oS8rT zu~*&NQE+SGv7zVKMP=3u=`gVl_3OC%Js>;4e_bzOceA_z1+t zS$uy!3M`Z^l{wj%@jA`dpHhYug)Dx_&Vo11-t9Kg7@mvIf{;?Ma`~}Fn{(|K66Ln% zvOC|Chw^%`Z48{fo+J&azCPS=_rF!msIa&6S<3-^^P)37SM^wTw*>1wB$2aUF9Tnp zH6}im=S>3K!hB%ilPf+_PZ~B)@wc$DA&}>T59ZB@WKEA^ci_WnJx~r8|~6ZpnDmA zjV3xmdKeT5X!(}*D+RDO3)>=Oevblh=4;`eGQyh}`?E9gPZ<$kh`uFJ@ym&$kN8$d z2pE@_Vhpi4fWoJhiJ;K=q7X;QV=Pz{G0L$?v(U7-raW1Qng)3@ib;1n0WI0GCQ6-;Sl_}W5M3+Zs{Cm4Bt z2lJJLT{zqm-j%~eZmrFCflt1hb-}7sX(x26^_%b?)tgUb{a7e4IHXg|H#+?iMfr>% zL6V5oYVc9~;8Do0Z+l(YFTQjC5_5ZBAn@=t!J4PwlhM=`ndj=AEX!{S@82gXd?Xe* zTJC*rxKa1v+@pZ_wW>_PPwV5TU_Ih!I&+CHNhx_rZ)9lC-j_Hf$pPNJuT}o>u8zyK znwHrhaxL%B&0Rk1oyH`Hsiz#RFr&-6 zmzTxxp4za8StX_<1%dInD7|JCw$~8?svH#&3l(@E&p8lOXiOE%)48z_hKnxD72&?) zCN35j(w_y1Hf=OdKHN4?$6?CU%aFDop961?C*SFcp8SJuJoAqVQiv5e~rPQD@aPLB{||u+_tj_EFN?WhTQF9UYV`#VnJQ>Ulk-nx1UQ!9+Aq+ zCq#khKc%@rzph*ea&mP)_!Np8iRT;p!71K!0Fj1=mZEsIWbJ7R2HtOm;Ra#xiW!7K zJQV;^g!R{G7u)|9gZcjJYhg6+&3G6u7O3H&oxhE0q>P0w)V}oQ}Cy{&!MR;h` z8rAwql-Sh&ids`vFDA0r?Lc{gqJBuuFo90mSU5+)Iy6w+Vc%X72QQHy=l!XD0dhF0 ztXNx;V`ODY$&93Pac=NDM5d#Z#oY|1dBnCQ&3^xB(|l6!1}^QV3K_HKR(?cy2uvFI z*f63nHrj>Rh5)OBKsA*Q3Ep7=r@hl~AHm4Iu(R?ne;^g(%_jt)In|`3=!Y|hVEv-y z`XLw2n4`-u=d#R@mWCpWRSxdG*_CA!pX|JdQwM)zmP9)AHrNxbttRP3ohr&vOL@B-T=AnwE->giw_k2tdbL67#mmh-1H zu3w7~I!?acfIoU%;#LUyYv<|kM3xMT&EfT@&f3v7yPo1>D154?^YtB8@s~SK9)>Hk zIvpfvembZ$(XL*|xM?V}v;Nj=RZYr;iZ2%vew|K}tyjB>AM&c%PsdUDl_+;%95NQ8m2h7`{MV^NZ5-zTY@Ex+7>%P;jn&1 z5e|#wZTr`Q@2Al&wxOroPD*O)3%QqXDmCh!8cwb+cU`tNYUJ44s(o0$U%zbYn09mY zuln$*KC-tTqo0-zN2 z1wdak0(KsbSK%IzqaPq-`jdlj1whn}O7WXAkOXGj+m8XV5XO^=un}eu4UIJcCr$!S0u)_fDgaWb`QcOf8nWae=IK`g+ zdG~6b&$&2;UVE+QP7|&*Lk7`)nJiIjy-0iVQ{6}#Wz>+toGcxdnIbT9HL
    3kAeH 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

    4F zdc;>2gmbXT9o9?f&+_uj1!%L9! z=tD=;HyH2`7I6rpXzEkK5ZOCo<@x&1b8*BhwTROpEQt%iOe|Ie17Fo@zLJ;uG7O5+ z7rGrPM02RmPt2!#|JVV}U#f_BP)UOGMHE0@a0JBEYy0b`Fu?nw6tT>^qD*?RO!j%10@hTKro6IQ6FL1@ z5MjV8891>D;)^v9E6|cLyLV*h3UpR-wG3}A``&hIj>76{(%7Up`7qW zvn0JaQ^Pw!U6&HcRs>&5jq&-j8cF603MVxwNdi0;wKT!C>@79Fn8cZ{RJlFpkdLlm z0M>xbYZRCPTLOr)pgL%C-3=j;T5jao(FL4+{aR4{{#4CekI>6qB=gsLCgui~76}?1 z#0(P<8eP{z)36@I0&77IsR@j!HJ$?nFvf`NC|)^mV-iT<9Zh545%PnDKs*dthfi2M-@@3qMZ_2cm_q-i;ecK@7Jb%vv6+ zDZ1IW2o<&fi7jH#-%U@L5dW5t|7$el2haf2K(7CFG?aC2_o4r9)ia5V0y-N1S@_7@ ziW`k@t$zC${V(C;_Rs^+ABh>yw%X}`2_GfD7g^PBzBm8BB!CwGPe;SsHIx|r{Mt*@ z6uFl&8cMT*{xur@Q*;Y!8R9}uPW*ZP;|rC9-#KH`t9!wR+iwiuh;CId&CdG6>d6Ox zhQ59M_Vn4)H*dmD|3WCjM=EwNG7kRV5kPsvy)qy`EW9j1ILB)(QM~H(JznzJ_FA&+ zfcUz#)P&bM0i~a-O)0wlGa5oA{vQIUZz39;VZz+6lWC?e;eM+-Om;I{-U_>!BP&uZ zl8Z?_u0->Rb8Y4Gt=e>FdOb^=$^&P2RTPFAvpPWT$eRI+!cL5sz=Ed|Ub;hx*pDT6 zZpA8Ci0JM%I_m4sn(_!JH;FFKw5}FS2>2HPRC2ebBFAU9wx+6Xx31yY?rwdu#QB0m zgZVqzi;bOIb)TQSJo*1f$nR!mkAQZxTQ#+4FQvUR{U8KRw5|6y>IfL+Y{la~H@eNx zh#qtX%Plruk)|T!K+x`FY20TIw^}rt#weu-U#xyRVP@s`?PUHe_5YBN%Qih^b?c>L z{2xik|2-P=TK8$)^aN}BLB}1Y^slNI0MIa5xqc&#+!*ce`pZ0pRySYq(3<(~f1ktr z|Bi+cpBjIx-1~99|ARsRl|CiMas-_IGa5!rs7pVwdjUirbh?RC9rkQwzasb07F<2Z zX$-+>g}f;6<^SoB&z!BMo%clAeD}#0HuY-=H;nc=B8ndkeg511^B2-v>X$l%qzPi9 z^1SRBdO$(utPy3asAP!JxW%-sXmZ``Xi@0+#nRh}}@BT%1spEkaIK&0hw z0z}g~+_~>vb?{>J*I%f!TIg3@7Q^4aR1ovcPrxWnvi5W3Had;b2e}r8e>YSR9Gyrk z(=ZMag1iiOGDAXG$l88^+6>Vo=yJ@*Ng9tP02T}3JwqCJVQ}BSk5~&vL?iXgUd47& zc+_Md-+4q6l!~SgGTp09U-l{bh+2;-3=UvcSwQ`ii}q!3tWf@RK=NGk6f(R2KdeBi9MKtXpnmu943J>4cgWq0q3tN zbA7z5!Srliy1eno=nV*(%G-pWZ|(4nJQNWpPy*(YY>G$q$-zR5!F=JA>IX@HKBf)G z;M5eOwg&)*aaQIl%EugkA9?7p)GZ)OR-AKAiqSyz37jAjG%4uE$zu@L6;iYi)d;P- z&m&$Qw7$&Yq_=X7HplZx9Iu8y6ou-cBW^>4i>FgnQB|;Dv?(w02u|6MR=h$!hiJs2 zsdP!7=z=lVu0k=8>tqc0BoGhvVv03DftWSP(E?2vnCc-KmKtar;)8%W2e^FXkhcEJ?yUO&umPSY#Hfmd^Y398HN1Ry*-K1@q%&c(Y<-~j zBQbUS(Xe5j2Kh+R0*CMy$Z%|f&(+#7KFjY+8USrN4GggTys8^;x2D&_hbKITj$dV19Q)bs>opo60Jx(m{PTdur z26XjB!>2c|@k~Guaix4iPOt(yOda>LE=OBGg;mOEoz_OnxZN$VNGZivtRkSN4GveO z=16Pk>hNW7z}z7q#3?v`)Q==q%rnP)xg+23nkb`1;HYNFdq9E`K+=11x=vrYMSXiu zEJ_xuNiGF)&U=H^elNt!D-19rs&EPzQ$~{WIU_HiLY@ZzVl0tu#fVBkZ4qFv6W|j; zTY#VHr1o!9xBE9Mt!ys50EMI~kz}`k;rR;*QmzAI z8&s?x0{M!$VPjFx7&VF(4ab*uU-I`r1iiH7#XiJo_2sqs?>8U?5rYWZ?=0YLFdx5} zK2rmFV8zNKrS;77MYIxq#WI)|&*z|4)WHxGLE~yV-IwO={I$G zT{JwnzF-?XC_bjZrfA^3lX~?UlJmt$pnz^B3{OH++93z&2V|heyff!{`^Ue3=OXv{ z4*Bg5m);z#zSBtk!hcHYm4oKi1)sZD(X4bjc2Wp_Gb|CjdQGtOj^~XRIAj7Y<5t{f zOCizo+Og$@`P?IrLPF;P)<42w{O{$2RFc@t~OiDIa zf_G9$Z2~ri_=ylMuf9CueHPwJljl@K$c{(Io+Mycz}X&;x{0t8IIb%$p%&J*fWvVVVzz|yJ5OXmzh z!Q~W76Ju(v_~+D5J-G#M{q$60KT)68#-|Z~k9_1T-tX^;xjhD&gq1)kfDDtzX5h*^i7Bt9T8W0=sj| zKiXt_kA(>~>8){y>-OsE2D;J{p@L>WZB}u0BKjxz(%%rXlr685IEk4#t)8S*WF z3WM$UYJ@opRm{Cd$`?NiU(I9Il);+bkJB0FxPA&nml{|%Osk#5 z`heR_NgH5Stx=nYGUpPUuhi# z@tZ~Z#Y(X1%jJI+zQ_uYLSIXCGh*_()c%Rev=8w_D3V$@vM3q>XcHc2l_s%VUmDcd z&(v&X)*`WJDjp`RorfgAfNCf+(G+n!wVXzOtH#!JLQ$vY{Io_lWI7=1f@mX)?6_pu$LyX2x#05O}#6el# zry9*e84Bl#vP!Dy@?Dvw_|(h8sb97;^E1GlXc*0@Q=uLjdFs72~DMkH;G`t110LDY|-G z6S374Fe+PY6;{PORI$EwJ2vyifJD2P&JF7#iweD-J4S&1bjj}^GZ)i~7n}sT*~&^$CRYGR5ev$81tW<-ws;+=@YKPS*N1mhfU(CYB*lg5^`eBH2?1G^tO?qZ*)8g(hl$Zo!0JA=TXkn0WwLU*Z$r9K=YX#2}fq%;hWa5y)pI%YI_lX$3=c!2Bm~nuc5z?gw7NgI^2)8GqQ7s!&Nj^Ksuu zQ(V6s)OU;iQ2PYj0xyYh&7o#M*wBZ;J={zUHZ8TEVcy1?B%EXYc|DwR+r!1IA^79;p4F9}*#W4`JZ(bAVzz@XI1l8hVYB2qnfrx;yR~^n-7A8g+`m zp=O$vvj8%bM4_QFqg|U=@2RrG#K`8lAAAA<*Sse!S3GP253he3a%haNZrrjDBZ0Tt zgo7)?!^2!3Dd`1=8HR6C{jGmc+ft4wvjbKpYnXtz%9d|baX`&2;LHteOYM8#hhY$EZ z`}Mqg+7X2cwY|FeqSkG;x9EPRffVZ$Xp}sCA1l~Lj?xZSC-}5`nj$z8+#tFX9If#? zrR^-Vf*N8m#`8;3qb0_MQg_(AN$WM6pxVHRw2_d&sOuI3CdAqsKkU25`ed1J> zEWN_j^2=PSz=h2K#$nzZkPNY=Pfdqs z%Ph>#m$S3Rs5629z!GXo2dIJ@P&CPQ)j!QqHThtNsM$CPdjAL_IgN97WH^U5?cQ>x z^ul~^exaRR9@4ia2n(!+D{cQto+CW^g?il4RUpE}w)QIJ#kUpuG7&aes#B1TU?1W- z2zd7o+v0Gxx5QHZPWHkyz!wR(h?T*(f3gq#t)l%d;1wYo&b1b6Jt zAN%%kA~Ji(wuVwIrpI`y*>9NgXI~$l(Uw~c=@A_8M+zv;Xi2kG-hVIlcg^2>`qi-C zmg>3!!w8b-$M;o(IKuO63Z?W%PaONfJxUBOkm{(Ph9sL-gp zo%a+@)sMV3BhyG-rZQng#&xBg_l!DcH9PjF#5WYBOAHRPG^_EY$td@2r_bW= z2e$(b1bh$SWnCmoe<_uX#T&_ z2;7R~NNdOa50`Y?djw02HAp}M%DDi!nb+py`JI}Ph)uveBd@#Evzx~W-xqrfrIXa% zZy%hUJuTFG_1&(qKC2(v1S*RKJk0h+kzn3!PhIN!?~PsGj-W!3sSKJxy^w1`m>Yuy z`gt3+pK2ax^V|v|xtL`^1psRMS71XI3|IPq!t5Sv9ER$cW?ialcgKJRdf@rVR`&F3!souR;3J8P4c~#<%PQj~AaW(+C-hmV@ zARRv)7TlY99m>nQI9=Ucit-gbS?w00{B>*aE0M^}+Vnii4u{yz1cS$@AhQ$mNVsT% z07}nf>Bb=7kro>_T+NNrisj{BJ5Kk;tYgci*3l``WN%(z5LA;y5@U$gRVVXW5Wxm< z2HZDKYJ1DO%QeBjkef{DE)X86U=#ntlN(E#te5bP0^iIAsx5xQlYX~d8P!F>dY3+T z>*Jq>Lls`nN4UBsrO{rtva{%;sP-ggN$D|P1*q=cq7%kXj-~^g&OvA_5x5$#^6LIM zl;7d>pQ76ZgJOrD!5?!iR9*NT)pVkjgYolIo>v&=q14uIndHTd!34%{W=VrsD((A} zDw|u0c7Y}*$oA>vk6N5&bH#uh`4Vcx*C(yg)(gv^&F_VU=;^lr6X4u86D71pK9mB% zGmE~Aj7;<3Gz9mgaV>$ojqHJ+97;+i1=?a^+R({8iK?}s5@D*}5y)6>_2hLKCOu4} z$beY}00$?6h|T3o1xX@s(U@LCA((oseyjMR5UG}%!YgJs?!l&NQi<0Cb=VQkH3D`~ zO%?NAsBQcLh$sMx2`zkb{qi}LqM0^qnVv-hiBvo{U)gqWPDnfWHvSy?Ix0y4#&er-yTItyhAd;1xz_`vz$z9=2Gw+yJC_FP zMnY#{Vm^K*yr}uGG~;z!Oqz+EpF|a^N~#w33hzKS!xzqZBbFViKy2klCa#Mn$*%3y zno6*iRv_v$lN7QPr5alAe7q^3#}HVe-G29SZD^cw;#cGh%y@TPSsjci0qL<-cDf|X z4CHlK(v8H{q`=x4UTEqe#Gl2~wQB1oh1Y<=p1;?C>N$#T)Ct^P%g)W34x6c4Ig6*) zMcXkam@(dpvKlax##nNt0F^P9qB6b1=($~%_#W8N+HM!AuC+wd2RQJEV3W>jh_6dE zS~XK;fCh86;?%g;b?c<9Y4)F!F!FRlMT)y8;`Pq@)Xj1f`K?I5^E>fqR5;>H^G9*C zur?~54g=+Nh)7C>7L&`zcRkRUR|8|DW-Adr=)S)W_3tVwYn}Bk2|G^8B z10#T7CJ+J#LHMA$;~2b}a9{?9n$q}vzlc)k)~!~`JM4?niew1JlvF}=Y*%9#a;m>+ zAyPUfz{4)cRmi@7#EdR~pzSP#1BHJb$6jVYfaeT?Xj6uv{A4t*mH>`z5_w-Kq8qA* zX<~dyf*_IFFb4`i@G$Ni#^VO0)g$5Pw$q}NPH!EDs&o&eprcTMtF&l9GzYN+DrBZj zQ?A`Km``t8*9dajcUQN&;6(HjOub6X-;Us4NB4ugi@_e*~gT2oe?j8lsx zl?k_s^Ed{^eoMpxuf#Aiq5$=h1EP0-bcqj}R%`p`^g+ctH*Ka>W9G2tkwrXug(F$< zGCFw`v-L~Sv1G3ZuabP=i{$>;gZa|iP;4iX> ze229vd}J7O1(7h3RKjo?hCC{EF<~Ngi#}HvR?tn1nUn5he8eV5pO+Kg&8uDZy6XlY z6){NHbkHIbFUQRoWtZisCvxHE(2ZY2sNvsOL78;C$u3JmT0@+O=Laxe?|cgDHw&?= ziZhBtMt|fDC5s#f8|iThW%Bbz3mP-U>RRZOe`3(fG9F`e_|?N)ffl}^sh)E4WdlfOU*cJd3}cPdkx64(mom*f8Jfc_9)WmyTK4Z)MQ7j^t~AmqF5_tk~HFv>lLGt%_C}I#mwH>I4~0n zu!LRTj@|YHtS%3<^K|wyENb$PqE)oB(M|5JOFK>!)zSv(qBg&6_vL722CtD;ry8E# zo{$5ASG|TULd5**dIMb~*DZrYT|m@!MhUMw(DZ{goZayy1#~6FP(5c{*Pg(g@~-mN>q zGW$v0TB}7fY3q|9Pwlno`$4lyPEe*mg?wiLJ2NNfG*&w{I0NWacy%p!GlvQ(9l`)) zu=Xzj#6@P#*ya4{SNFV_9kvtVkuIrCZD>XdDQoTC#_Mk5?$N%ANJOwj;l?|2;5&eB zXEk~ppA*S3=yY_6o}9ArQE;yw~T-&Nv#9D95P|(;;>ZC?r>bOJD}lVW_F_ z{A^7~3+58#+Fr4j3=9!Coih%R9w0j!_ZuMq)5DiVyn&(=*Gdy*?%_C2I|k>4}Dd$>dhZ!n0@GH}})2rsHTM>TO7sNn-%3V9V7?jCB!prR8b1~L?f2h|4Lrwpg? zF_V!ZmBxgQmWC^}gH~s$UyL80Mc2DEfEzOgqu-U=^)RZDVgPuYo8^@-mrfw->9U8m&I2ms11D zs||NmT%AueTsw-6=;|<1jTKOhR@}x$4rg)00sJ4tV&Op8V!5Udiwwz#Y+t5y+Q>)Y z{q06eQVC^DJ}PK1xaT_z;pFk!7@KMvn9|UndO3>UFbNkPx0LFdwH%8E2zhDfPiS15 zceu9Xc5P{C#H(+-z|G)%c8QP?D8?m=FRmZmury6E;?l-aqj@p}Lrgi$)eGeCy@oGh zYJlThZ0(VVJi`{Ho76E8Sin#g6b0u;;oDNi=lfKSqC~9D#(!44{pB~l-1heD{o6mn zgMWm_V}|(EgT%V%u#C17;45aAhk*#gY+Y;&yCEu#lSwPD2wg*y6!=CL$sZ#=Vs8H& z^D`rn6Hz6^KPCtFa;83xsg6k0FQpPvBgeqd`p+t+xZ9_Atc-bQrua6e`1j2*yu%-c z=pSF56jZWUt7+-!yintv^(>jXHZQ$8@D01!^;j=NIW<;mp4RG!HRV+0B{h&5js?mh zVu^3)FjED3`RB>WF*GQt^Vn%r_Oxo{^i<#5-|xrOerjq2HQ1@Yy9{~%krPgTgmBy) z5NLk<4i2!?z3gqCs7WS-x2D2tVgfUB0D)XG+jtFMOFa7ekNS+q5jFFn=DEJpQO8r3 zRx?)aGuB~Nl|_2w5HWVz_x9~GQL!Z~`240D`W&`6F|-b*ohyq5D~)a!lZA`CEH~Q` zwutR<6uGiDkAoqAZZjf#vU#{r;rAw5M?M_^de=~|ZrtUaJ1=@0+<0SNZ|={%@!wK5 zvl;_QK4JweGg0*K=QmPwgU4f$Nk+RbPFX9ar$_wb3Zq{MrB;Yo@98tf7DmGbtlRPz zQ^tSGTAi!hr>vJ;zqmH2=4cbre?x75entFR@ORs}mvu;b0HkRy`_J^4{Pnfkn#HX7 zFM0FLMVYS03~Iob&)Jp;w!;jLXN(1B;CLDj5=`u9o(fSG6zH zRxGwVjMOh1mmD)xxQ{O9(a&gSEnyZ~98IT&QgoLD?+UwGHFnM2 zq5q5h&9JcX6t;=f@7D>hZvJ7NNY|XxsC*k9HaACgQ|rE1YuwWFrAK@bhzzeOoBpLS zcjKos4r4R+Z~r(HLL6CRI3tplrj>@-7IB(roq5B#xwz$zR7>-f%b{@{3z{}d1pRP} zhIC=G^Y;)ZWJBukKHswTwdF>~851Y6-pXc}({IbAPXxm_W4Wav04?Wh^2|!fXv2)v zhY857al!}%_wcoUDwBG73NpD2fBj)-Wk2qg{fnz3k1ixG+b+`EkwaG!vR3-qmw#{C zF0naid?zRk0rifiPp!!IAxP6dJY#QWjE{%CS|+y%Mug10lXAGL z;UIKE-(@wot>mz|f3tws;oi$zNPcqApPQnl{i06SL{psxHVNuKm$}*3N4YZ+7C(?? zZk_*OTg#Xkzn|@>?#QrJ=|Ud5G4{@d5a%M-=Bo1gs`}QNX7ReZ6~i6wb)?3az0$|S zxW#2MS!Y(L>N|`2PB-7Fn8C9RMW6Na<&VTyZdbgk83TI@7%Akm@dEy{78F()WE$W!BZvG&Nj)B5@c17TI!#vNrmS zRT9K;=LhKR)j+ZH zfs8!-Gq1mm>qGX_Z+W+qSGv-L-O|{-8{6A|q{Q^StV@S7e1K~$nR%x<>BG8)DW4qJH`a07Jq`19nGC6ZmOiul{S0I;MunM3f|TJu|Teq-N^Oe z1}(`qaH3e>dD%?D{oD8mf%{(s(7)wbe_di;6Os;m1FV+^NYMhag93rk3q5}06MNP> zd*dg56YTqwqW+W0`)~F4r=a^nvV#l3`+O1m^YQx&Is1!M`yZa|FAeN3&+ebEZ0&zM z*(XB}R*Nr%I2f*xKM&1r@;Gtl1qR%{d$1jUu#kx!T#*Q!Pdc-lY>L( zmm~HsUqx?!)uN)NY|s?Rr0dyDTO9%-qp|A_!fQ+-I=aY#3KNS}N7C!ns4A(hc=>(psW*aW`pJj-fu#P&s) z-R6ir;fNzQh@<+5^Gii3DadlKg7fJS*QcWkKaP-Jjs#%Af*k)QfCjTats!qa+6moc z_Vnn7ethEYOd)_uyV!x^9~60_6_NM1o1Z^<^#9_M6$5nv7XKG70+Y+JI4kI$A-DbM%Bm0 zcaD|2FPL;B3co)#{d9c&ZK&DD<9`!Cugip;QEwCtd}8Mby}BY)j>UJBe7EoTesl1< z!`yerPv4z>e7^-d!El^7i=DWrgx|c7(m*w;W+Zp|fN~hJ{7Ibku0HYUIPo1k@tZsG z|8x@YB6EL4RsXo#@elr!&!Eb* z;LZa`gb3@Yo5(3v<`k!L8f$PGcbS6!ykpREe2&kJFoFeTw9+SqZ-!q^RlPoG$?B7@ zU%5=!OQ?0Tnx*$Hs#e!=MDQ0I2!8&D0DAjpenMnH?$3h3pM`Tja}4meSF!G%&KF_7 z{tE##sxskMRobuBh}*WWSJqSg9$1PMr%BleCdn^=p~TH*vEMC>42yw&gg0*eu}5x7 zUpuY`ci#HSZbQ%MPaK{3N+E!LUDoEw+fF|dOSSn8D2W?-b(Q|zM>PsltCg4E`y1zjc16hd^U^e`c_O#ntbw<4yJ&{yze}S42%d3zQ`+PVDayHq(j) z)qV(;J=nza{~4|t`twA)Qr*<=0T-sJgbbphHYSpUNVPn zhLl8esZo|F%M-etbm4&^IdZGu>wE;QE*>8fmcduB_+QX(k-OQ$*iZwbcv7xd@q?*D3@RuFU`J%gewd( zwJWFYjd!ZZES(cnFIf`+Cu-I^PAROqFj>QA&VUJa7{4~Y zquGPolZi$V&eP5zL;dB+qli#{>=F$Z)euJD;@6FlT!q^QXR4ui1qWU`mb|!JC7>%y!60b=7IF*S;hFafT9QEX52Tso-trQu3IZ(az8|d1pb)8 z5ynNF?odT4!igFjvi;9-`#C=Og zvdRXuHLzSrv{0+cXt7$XEqc%Bc)q~Y84n{zRXz5_)Q$E$04H%};n(=oJzB|& zTu&mZpI?W3|=TrFSDw@{~8Wta7>HcdSUENgRTW^Os_rMI8geCFW|SUr7_YWICDSYy&Z2#d~pd`VarOJQvU}2y9g+K0kWL+~!!; zVF6RW_<%Pzw}vj1IPVuvbv3DjE{fyg$}BZc-c35sS@X`kybB8+dC@eR0docqQi7)~ zE=cDXDEmRu&1kjN75AD)wbX;_VZ=|(gw;8zrnypT{y6Ps$GWID(Dugi4=wedzP$N; z8HsTk8aJSENqF-zGi4)Jcn`<*v~E(N>2XUnu2Id4yy zRM+HXk1>O@tA$&DQXH-dzUoEj3%XzWw3-JZ*NnN#XBw**IeYdAGIKETh%S;dyF@1l3lZUoJ*8C34zFET?9KXyMhgsj ziyGgkv#8lKy!7kndf-Y0|5w0O&Hu&Pdj>TXFZ|Z2B=k^12Sb(KL8^q_5(vE`B3(eb zAcCPuKHh^v$c<+{(F9-dhFWx|Y+=Yibr>#4VccV&qq+PstfkDE9~eVPUD^Oiom z_>fu@YnZfQrZmm&%y69n-vzFv0-F)hlquy|>R}X9@2pE~l3or*$n976Y-=M;-TlQ4 zXMvWvWBdnwBz|IY%?W+n3!u^6XmZWG>uo^dxT|Mf2%wd zOIv+zxxsJYeY7E6Y4Sx|SV=PC^^1`dK2u4{Vb*?;TSCCrt*aE1X(sXJyW$~=#$Kb6 zu@TKJ0dXTQR;f8|Y;SiGlLoLyX9todi2bOHBgnT? zlHhj`QPFvhTwCz zLNSu9)WeaQO78-b=Fuq|GBeXRRgAl;gD|wbu~qq(Q~OXc)~51^1*O){`4?|_yq-Ap zz$cg7x^c~eEzpaRz3_#wblcUq&jSqXHt(`_^=W8r!*s&=pnBwRslN&(wd*XsM{|QA zx1{5vy-Rk(GrPXE1wWV;dU*q@jP2Nd|C!Iz^UMf;#fPSF02lH6Cw9x4`W5H?{ERT_ zazWIHU}!@m?4uX8XOpgVY0=+{oe%Q7)unw3%nR(E$#Diu9LW=Q3qzkIm8+1(3>bo* zbmq=*N@-UfxUt+j(c^Pxi(en1lzl(is!bG@yVuC|beXs@+#6LN?3{~6Hl66GUAmjD zvVI-m+ah)IS+vvJ`}5$|2gYm+Sy{GvN4(#+wAb_Y7H4KX!^|oWmw!7fvb~E8vAr2! zyFBJ|L*yB+lB$K5x?WD^R4HbTx?Tv-l=()b`U%e)U* z>`wPf?%>c27Y324etY(tCW27TtJx;sespoXk{VYvClV}!?}v77TmCTCRlAi*les!Rm{WFSJD8<7_6icw2PGM21FwliZJcHd6TBI9VvHNMK*{vrmYGJ&5C*=4| zbLUg+&Gi0wa2B2a(sn+@7)Ft1Z2zM&DL#>&DVV^?-*wmdU|bIVr8wLFlK2aCU`fm7 zwL7^C1nZ+W?_xspvANr8Z;#(nH213IJ5r8M%e%BL@8@Kk3GTU`j@`L@&?@b~$sr8r z&$xW_`ejUaWy7xzl*=bQ#a%xoAC0eRY5khIQY)rYuQF>#2%eUqoK9&;@CC)uu2mdv z&#kEP!O<`eR|-994@#y`qkv{Z6k!xtxdeO}1u;ND@^fL4cy=G1aibEdK=RL-E}gRr z7oljB;sscK3H5tEzLB^p2mo?+g+Gv5iA0co+>oK;)_|IZkJg=nMx%lUqSaeF+|I+cDX#mUk`kwNcsG{W(4IGIjo zO~8zn_FV7S>nY&W_FvU9kg@@4(%mQXE-m2NQ3_Fxi~r(mUl<0) z{?@%o&v@hNmE2rbWiJ3XQr`lR)Odoiat1*3h&=Jd7OeUZ2oWmTo8$9T@vWe>5E@{e zsUfhd4?-Afc0avbc>yAe*2*TETO%MiG}Y-R4S8;5`9y6#AzA~xmfE_?<#Ig(A+)2u znuxv{SGhrcu9iGe|C^u@Rhrgc!C(!%mL>Z2p`Ze_2b6vwyvf6;fBi_C2-ZWVE_vu# z67|o`8efILCqg(i58S2);P$$XQMmz!XGnQDMtS4x>NOqaB&<#amd(@HM%dQ1!q(B# z#+KIlRf*NzjWecl`}_(A`GIi#6e!09h%+9_F%WDIfcT)D9Pv(dpIjCz)D|mTQ=dB7 zKFzD~bRH9?^}{>+p|A3JxifD%i+f#T-gNluivBMG?4PQ0&^ZBS`~M=q>PvN#W@|M6 zr8-ye`#9L}bRYwzo62MSs(dI%xYjsFl)hrPK=#`EBIDPUqmNWVQ_qg1h)Vu*VKlrZ zja3s*jdH|0tIgf4Vovf+9-A~hpLt>b+E(&e9nV~dV^1ot>6@B`*FICvU54M(erW#x zLk_a&89)0URp&oG4dzH(`C9-yC%|5-74vnr9X=fcd%PR#Y#-fS>`|cLW#4KU@px zF9NJ;EmiU#1X!mh0)Jm#z((-C%4XH4e-mKk1XoCjv81lJxAt9b+t1qB6P~Dz;EtM7 zJRE0xX(PC$W)(;a9Ld}W=DZBMj~2kIR%TvkJO%2Ydd0kp!jRRQ4~5&RKR?Q~!GA7} zn;_~iC<6R^uDJ6(-zvMW{4dpcd9JPBmx@BK=U*y|BK`vbR^Lw%->zvCaqy~baWCAi zqdpyys8I+*;EU-H*J~pB)$Ftz#+H6vf5w~pr0dHWjz^T6D6$7LC-C#WfAe z-`i;&u?2KBee}B})e332PHF>^Bqkdb)<4vx{-O%Hs5_HwTGzQ%En)fY_h!pZ{rhfp z|47<|5B{CQ@9#0?uZYlj#>r0L>-$w~ivnBe6nNwYAB&`h)Yz8|{OEpPc3n=JUaLdC zWSK$e)u6H|W_M`w7oFnBrI)Iq+6%lfjZKh-l8^~4Hpk$OJw7L;0k~>%#XED|KZ3MQ zj~W~2v@aX)F8F9^NVT)EpU5oeOyV~d&o8ZA;%*u`$GyDKLkSR_CCjHZYPXOdeV5|UqI1nqT5MLKdFl1W^~I9VwoNMR{@9%GvrIx0>feY1LM>1bOFP@s;x-@F_$%S%1 z{|!*uBrIH^;AqdAXdL`9PMtYZX9ub+ioC(U{nWltd|nVJUmnZjpY?K+z589>p2f~S znL1jp8@c9tLpp4l^vY28+_!(1&yt_v{9EJxhA@nG*QTL(tJL+24JT`rXTrkfC3Z!n zQ-qmw)(}R$IbDcUHVpwb8=-iz6y%22&m}gOMupY1A9@P#M>>19K&2^&#_ zYKuSQm?7-U-+jtDce65t7B8T#mZQIF1ZVQ=3T6DQGC~9lWSCtS;$##sFpjTE%4fYQ za%CNe3EbE7%NAtO`ohm7Dviw(5>AGkv)AR8d3+`pB)yG?9T)fWTSh9RZw{TS&i4z5 zbd|En#v|@rKMMyjmGTAumV+ohGamJG{P}QRgGTVR7|(0o>_;O^`P;-VLX3q|MeDc6 za>iQ6!o)vkB2OySKO2wVTKxIsWaQc9;~~m8|E?RO1RPNMi<5^*LmNR))CPDMlRi!Z zVCpCKx))6*QXLPfzjg2wMPF@XXfm1o@St22TW#VE?#_$o2XXpT-=sqT zwBaSFmF)^l?Q77vfCLCu)zj`h0L7hHqXL4eJ>KNqrP6St4~_&;Ig25<8}W=jCOr(X z5AUkLt*h@bP0?wPadV9jvI7u78+xRDag z5+%L?*LSb85GUc){KLgv)VrAs#9VR@R#7c3sqE<_mom7Lr2hU?(8atIHGeBZ%}8Sg zz%bK3GXyjo&MG3=lw7+>?i3cwj)8_eJ>(Nd#DW5}d9GGH(=K~13YVErm&n;NqlwfP zG6DwO1&?d;1Lk;*F49_xvemPR$hTNqsN;o~ms4J;cLQ%2>VU_2UkZMr&r|j0sTKep zQWtd&GO#)_jnmItwl4+f6m3@_O2oXmS9QUzrdd1%>=M^~0EP1XMiA%TK_Ef;e$J`O zFbP=2%|oCi2f=09Jt$6WBA*`&OFp;^p8+3WU+Xi(+1%q;pq01Rjja0;-@Jw&JWqna zKxB_B0tzAoM?XoHkLU6s^V5WDUokE+5Wl21p+aKIr7l2hQK8$%hHfYX$X;QdLcwb3 z@U&EmSqw52RI2C$Ovv4qv`jl76He*UwHIs+m3_351mDY=*dn`; zx(4?I9qgjA3WazS8gxBDCsO+p5J$Z56&KuCm9n68@m|b#NKjFaK^bdb!aK9Fkb%U2 z>qZxhCYPRvDXRYYV(Q&CoxyNeN+XnZ>n;62UQhfDHqFnbs;cw%B3uMAZcBML(>x5W zKlEc3zv6DWRmxPb-zH;Ssz_{K{yuixaUAnKmQjNYqa1hBzTE@Lw%hWgTO^I4I<7UF zlr8d|mbL^>Lw`hVRF|EOnkPY(BfIEa0m0*sT$Kv7Vl4d739V%|Q_?=$IyQHZEgzoj zpZ04S-7b*%H2D_w?30X8paL%u!GnXJl zW)-aaw1a-tJq#L0UiyyJTPJ+{{XBBAlBsh&Yh$PG^$#K@A-Uc7o>0X-;Uq{Qmol@R0FVvnkiWPmoU*-Ow{rM~Pxsk$dTx##2)Ru+) z*46vdDrxLYX(&+I+GN_HfOK_X>WWJGntl3H!ab5v`j-}od3*aR!o5T0jA9k$KMf-6 z03f@pAkqVPHkbhn0 zJOA%41C`LPABXGbQ%0>$@-nU3?zCIUH`dcB?lATM*p#71LomCa@%9m z=DMZwpsD4h;pUes83+)BVF&kp|F~rT;WD_dIQtKm!T-8s|K&0; z5~*I##wdST|A)(9BlkSovyo@-RlSk_e`)T{r>p)GNS_D7xeT1T4xFzxJzchDSl`o`WKt+jywrzcGsgB(!H<`|zsFDkB&yKdgzXQM| z_lOX7|NnLw?DZfFC4cm?{%sY`_LGzOgyVpl+QI{|nM;k^ zy!+erb9J?FmmORegFS)Vy{N*o^lDsrP*Zme{=}qb&+&sSX%9%i=^lcNFW~8=*E7!; zZkO|GkQKOJs?aJDf*`yCn592IQ^Cv4)v3i=x{Vg?h>(@Ac_1v#9t}C>|C* zuMH@pl3w0*`-d<9e1pAK5N#Ses>{7HU#U$$S(|{;dsI(MN}%c0MsS=!7;VW(3>f;T zd|EuH**k$Jauuq)gWtY<7%xpOxhvZn$4K!$ZxK(U{Emjs6F?}C_Ov#Hem()kR-bS! zh6Wb*q7;@+hPGCeGDsluVABO)wn#>2v7l}yTqc;ko(vZl>|#(O0wvc`>6q)E=sFO1 zs@w4l{0Jb=7A|gJ6vYs&0%5#0+pp3qz(9*G7q~)JU{jH2VBA~Y^cyh#7``7~OecJi z_o5`XA{h}w&}D_bO3>B|hNmca0w7EPIyfj#W4?!P4XbrmrR8V zxluN9zGQz5wf^~PrA$O~xp$492YK^~MN5wL@Pn86;u)yUse9&yB$aq_5mm`W6WHD) z@+1p3=kG1f7zqcTACjae5~=BfCUforV5(I_zQxRu&{r~$i4HGD$RzC6w=R$}F%F)) zkX)uVRi!cinXe<&=%#=bME&F9(NVCpOSE0xe*w1q6hXzfCc267&t^- z;q1fn{c5%$?Vv9-RPjb&p0dY`D!sg+MCqG+AaINkShHXV%u_fE{j3LYKB*^(?lXap zoQdc%WU@2Gos953xyVyPJ#Q{4TZ)+X^cznZqPQr~w>o?AoS@F-6>iY+ULd2Hs`*W- zk{Z_l0HfY-f{H8|ZctkVeC~@^*erQj?cc@Mfd=1tl@A50e4&9ffJNI_z)K&643CFb z(y3@+IhwtoD(>VD`FW32_lT+u?a6|Pco-q*Gt+gBzHicDl^pZB*dJ<3J|IN~b9`ci z7BD&fa!y^m{*xF|l#4zUfazjwfNba~hM}k#{8_IuL^x_8^f>}D{t2D_d!CA&R_L*@ zRizs@`W|!fPrOMWASY^%3^<9PQjM(1Z{D$={X^p*;AY2uTP+dho)sidN2FQ2>BUpd zPXQ=J^0VA5Azp-+Ke}1Bd{{S!=W>2|E2#E6lZy$AOGFW3PWA$~Wp07ba|DqdUgBMj zJ;)tAOc!w-j^>8_A%?>x+_>n=?t(9;HjRY66=dTc1h=k|OZ7275honAyn5I;W)7!2 z+6ybKzKz#gz_Wvk1M%kpgh;&U^3gu64M{BehT(z2b`Vj|@|we~p%=;*BThl1K;H_rz_x$RuPh{_}mpWn-vpTw#Zqumg} zd%g;?pU^U}9gAPbfu;T@yWcjiyS3A;EtWlwl~@k?vJ@EV`gc)#jop7>wFC^HFwYFR zRw=v4WSpb6%1gI5Rk*@RVrsZIjznS`>*&WKZ|AU$4!JZv;Oq?Gw&o_y8U!Mgm%e-v zS8KIme)B4Z6bV~(oEUTox4fJdz`USl=FTpi`+(P~;scAv_}I~#_CLEp8SNiGn;o}( z&@}hW$R#~o-hXz7G@RrVZKMJ}eD~UHhaUKAaIashec+RU{xf$+7qx0dlLRt(CCQ+p zHQ-^W)<_>Pr5=nxX`;}^zSm?>^|z2Ey3(0IBo25qogA)`e1QV+IJYuH*vqGE>2Tsf zr_+gOs!(YUnT0rzk-Y&y^b&YAK4Kn_Q4do>D}Brc8;OS3m*F((J>tn`^f;KIzFTDY z6^%VOeLbLa9`ItyH5`xeMZ;S2O$nr{M~UW+E$1w^Wtft_g|!9kC2%_&7Uqe4Jq_b0 zVXg}!&g(s4eU2ORfJi);83z;U1%}mwT{E%KxbrszXCiO`DE&p7d$qR4qtiC;_27ps zusbBIB2n*RBg~`;cAEr>^t4RIgKrZt(RdhRkXc=>DSfM@dcEmjq7g93==NS3D-uXJ zfGsA$m-9@I6mi2WFhe9Lg%vgtVt5@5qov@^`y5h)W^pU9b_NO|u4sNy*z=b?f@%ZT zS!iFJ4J5I`;*s{*2F`3nfdLC>0}iE z-51<#1ndXWJi5e81;9QMW;xslw(!UwZ!{e~z$Dn~eim{}Wi3=VKe~QY&@_V?Vg>k; zvN-xN$tbJOdd|g&KxG6d2yL5IZB+8WHl6d~c)3w}D_DsYq+VhaA8vMNWANdUxmdnp zHcVVq*HmT3a95}x7!Uh#2zNSk%gD6yMdvSv7JOqh=Rg1&$gT!Wruj|gz6)kx0FW_A z2Tbw?W*UznLCGl4=X3WQ#TRhIs^0{)_u~YB5d~EB09GZy5NmEq&iT&f;!c6%UvGxdv%84{Wkg;42K5z-inR0-Xm&;&HBYb`q7jMot^| zK<9T2wC(g%t>q6e9Q6;KZ(3Ehn#)xdtd?hHaR7T~ip}4EN2h&{uj#~;n8Je|$bK;+ z&s(bcm1~q(r|P*-0c>ER2u*|Xm|UZ0}zv)a+4k6fw4L5Zr?TCJ1Xb zQH#g3Tr<-5EbGJ3*MlSwureFi>m;=6ASTw}Dy0V;R1dZfuQDeAx~9D=g+Yv7#S`7d zl84$uQ-H9&3XUM9Br5D85&)b5WCF0~>X{@e;JLhDF%oWsG?he~w>&icz^UETM8%AU z-d?~2MYukyt`I;u+T)=hxvUG~pm9AIN2V!nTTx9O)ns__bG-*sP0k4we!j?t_GysB zG}U4g?Bybcog0>4i7uOr9}%iK<&v@jyM6A()}M%LK|n%5n!jFaI-aPop)YWwK{^z} zWDx;-%Olko~=u*t=k-42pRS zwU8dEnoz?R3mKXYVyYyn!l!{r3W!R5zp{Ls7CeX+qHOnC>5rivQZLp$55(-_7#yLL z+N1c&^ts`0v7n?^)H7a7*7(PdP!N@%r-&YXUC-gK|<5W@kGKQN_1wPpp z89n=p2teO#yfg{8(9oD2se&ScJUBp7_Q2f)&>pR2WiEWJM@ki=HY(o}Ei7)a0gWg2 zAY}==+2#TO1A#rz5$LXz+C7NStw|8E>~|x2I#GEK_`=Sg#w}Ud4Jde~dwD9650Hnk z0*2R9F-E|jJ!@3Yq+-H@D><|#<3T5lw@@e$Z)Pm!ks*qL$e<$kQjwgSUqt2WXep;) zREd{&z=8BfWkJI5CMB!udw?11D>LOa>f|92<0}I7R7m}#*m5HYA}pG$e%1=>VAYil}Rls`X~QQZjguG)XTW1wah(mgq%wjWP4l$M2z<=QGhVN2@@FTRRWzj;>T>(JK=h6riK zT08Y3tAF-_AEP`U7*B*PVi<`b2N3FPs+@dExV6oCDjEK;UD2^^{lWM&44he-5>}Zk zo30Ccgxss(t2Wh4GdY;(tUfnTSD5;xIQQx|IDO6EJOeyAn|!nZ9Sm=aA5sKt7s@W! z@x8 z3NYnoeI1Vv!z?o|g0D9@fl)VZa+d5x!8MQz)gMF!6C5jsCL)orkW~diY*uqq)#42G zZMBiJn7qkbaQlh?ITO3;X&7w~+=U3#WT_&A`R0Gk+N{l&GRt>wgZUC&*4GoBF{g06 z$e&-bg>O1b5K>1JvtG{^kB6D`hGUOT0l(lj#|h>sC)FQ#!S0?9uT?Z?#XLwAsuRe( z3Ty+zgW#f3W(M>tvKsdiHO()7s!m-D^m+^4X`V~XrTV#kPqAPk&9ZxD8rt6mW59v0 z|gEd5p0q7=gY!%()Dn=^d@uqh<28`+Sp zJRBrELXR5uy*0{DPUvQ@Q71vIYh8S8dT;iE8%m5`E<%T_Ef9+7kYVuCbZbS_C!y%K zG@FHh9gxLA7WmOMXg&tGpo_}-H3sLh*Cii)4Aze7NRWM*cYKhwFlds zbpEIaMj}ETC|><49dC~;{n^l(B(8zXdfT076}FPstS_sjGM{Bd-mMJL6Gi=)?yu(i z`0Amx^0`5TCew|^E&5n6o1O$Z{itx=DAfm^8mp1KWgAtve}gu+=1Y%?;zdnmN8O*> z2@S({bk!#Gk&c#>3QqALlONxsOa$(60I8{fG%%1{J;;T0-e$4rnd(d?c-pHI z$`ghKD7Z{&`ClLwHM(~gF$^u@33I{tqjWIK9go47h#EN)uLY zhn7jdDx_h!^dWLt@rYX~v6gN|G5~?eJ$j2T zq^OSCjT;W7$oLg=$bS*CXY)s;ajm*mfHu>WvC)2j$a;Jf?FZH*VK3#InKTAU4>5RgZt|qak z%OvxHD*2N;1-y)2atb|(REYN}>{@##y*P3=ZIaesrWRo$DHEmnrl0}P0WSgNx%f-+ zXUI-sO4&817Wj+r96dl4#8oaleIzj~>RnOb+V*;ct(&m*lv}5ea`nZ_{*|tI=iAdG^>2BjvC(@` z+YGl?y1`Xy2{jjzHA3?B5VwRXWd<~UmMaX$C5`n>YaC<*v2})wK9lbBnzr(G2``eD zun$@Ae&$l{L7Dk|W9jC~BRL+u5`OvRe@A;-LNC1jx>%eXyQ(QbV|?05Z^-B0N%!h) z^!InLJCQq6UQeh#KQ+|)V{@aqBm7v`?sv@T=V$L?f7{*Zl;d)@dv}Mju#P$GzJvy` zk?^pc4<~;kE^Veg3#KHvLFU%wPZw&!6s;D&?ijYwkC{^v%zvXc_iwgk`gq+r%Wh+VHY?WdVR;_5|fJG1D-q8mx( ziDlUAjrhcM?A?Pl*N$`}J>GrO8yXn*Rpw*e-i7+)=+|>2BlaEAG&T1fc%FWn9F${^ z7y%)I+*uD>42S51VtHAYCUj2TYJ(;-xg|ZIOVEcrJp8bRVZjT+szY7AjBy3MLckA^ z#fr*z%s;?jx%vp4o&LV_SjcW(QA!LOYf!hdI2w08#@U=3eH0k3VodVrAniD zO1j=#vQ-b5-P55&T}Emb#li5em^@U?GfhpO#`lo4$Mqu*j5~r7lVn4SV22l&pvQHp zlcT9h&Z4?M4K6Fu+~*e;f7&iilda&#bdM{hRR6Q6g`!$+S)}foQOA}{ZhS-OfdI=l zxVVWW7i;OIG(Ko?_b>_KDS?#vp0*(pj*js zudnUzXIRuEE`67dy8SH+Oa80mioH}Zd8?e>M~eH;fthh5jcRs_o>S4jbjFZ1JPho1 zzs~-^9ox@>zadYoyraLlbzTS2*WPbiy5s+J;gteg_ z#?z@VG(K~&QDxumstj3gxD6e(wBTlOUdx82=WP3jf2ibH&U++aJQt{&z#e}~p{NxZ z7!pvfTFVc!SRhN&SW5gqejxhKIe zzcY89WBdNgvkhr+8tWHm9r}@b`1^M#9Ui<24+gP!_j4+CJj4xK-&?&2$#3Y`khtkE zY;6Ffv7WKdL>#n;8T|AUy_w7ZFo&M_PWzC*WBCX@Vcl!*WF><^F7KD4O#SG?FLq< zl>iP#aIP!wbx`07En#nT6*9Rr&|sN*A}@alK1jC&B!udMa|8_}WKDv|bz))?xVZ2f z)JIknuth8=?si7W$F@J4WT4+l)!#_5a$Y%m8`&p! z`A3>l(I+lgRKNb;A6d~K*Le-2294kD=e+3H5dPjmC4m1PmfYSd5XU)^tGd$T_u=#B ziQ#x*udMO&*pU8Boc60Se{NZZ2(Kfkn^vNr%rO z8s8Y=(9o^lp>N&^l>`hdM%<&#e$un_?E+Hp+qc-~PB!86&9%Rmp%m%+Ut;zyarqn9 znJn}aKL%HP8Q z%AdmcW&4h1yyNEbNGS z0JM+|fd>XQ0DOO-8HBWbIkgd@U98SsEQ;DlJ#BW6E{?=5cK8+kbY#zT z65+b?Ji1=0J@R@zsj|8hWoKQvFkSDI`)Ni!YGJxcy}Ig&J(~Wymv8r6hV*K&_G)zK zYSQWH9O&wVv86dYZ!S}mOw>#I0XR@-r)_*=`#Qou~V837gl zz_HWeUbI_@6sjs%er&hT>T@XXb8PH$>g{u$)_1Bwvbq7maJ*(Dpyzk%nq_4Vm%hE8 zLflrol2L+pV!uyrzi)ZJUt|CE-hQ93ekFS_-+Y4BIYYnL{+z4I!cV~8s=s)cX=5t^ ze2(-b4&2Ngh%6t7Y8<%LI}klR5TTK&r7UKX(uT2PO*9vX|7od8GJJaFBJFrkuOIAaSTh zLXErRY3J*>5XHK@#`bgzcxrGCWKs&Rm-0O`&QL?^F-9&{&iK`7b$F`sW9G-^51uh* zo7kxp)T=%k&!!szqd zdz^^pd!S6vqn>)?Ll4Z4ZMdgne#g40%wQaKO+M*<-ekG)#7A0o(l9^K^sNw<&8JUk zZ)Bd1=74~q^s!>|k$He7t6uczZbRD~6sPR~tFJA6EY7 zBd%ivc%(5-DIXtm26N-aZRti9_s!`v&1*}{**!^r!^Zo0st!~v)NtkuOC$qk9M?&E z!Gr~BX0)!Ptin&se&!TZ*-|=@JCfcmc_j$&TSgrQUjfXVM_ruKP z{DpjXoj95RYeu+*8VUQ8b?QK4;xutub(!ZPXgmH+G~rK31*SEnt{QuoNGy>p_gjHq|Z)jQ^b;6(qztj#_i#tbMQ} zc1cz$c|g-X)BPG-Y!c4F+Lk>YN2QPB3W_savZ74S#AVM4XN@b7#_6SOeDdNJ7fGu1 z&jstB+XH7t&)R2+6&xIL<3dv&O5>h0vjIz_wnjU{01W5WH0KOf-epFKeuDBh*KF$J zG(N@@KRPR{J%LHHA1m*C__3~_RQ+ma&9uiK^$X#1rw5Z*sH35Pm8aUcMg=L+1xL*>t~W}G@&pP$ zcFdo##6F&ByB}AlWbVUj{=(h75jvwpinHmnQ$stk6*?&Ingi&qSdos(6@p>{v0o6A*>YT;g`rQ7@IHynA-}^4({`zCcsj|Zmf9p!!Vw?}_Tj&!u>myl@Q_X-FF zrpYfoS@9>gM~-yrk=t6{XSt}QXx}eMXsg(Eu7#_K09OgY+!WZ4B1kkhEQLe<+ZvOB zyI;21+g!6|>NSU4_l^(b-?i*s7Afh2t&bH7dCW}GhcG`hEP%E54vR1%561rn@Ux?^ zjjZFAheZtfsJYa9PzV0miA03=QrygT_bGjVB%Hcjh$yz8)$JX$s@?f^9bo*uj zprUaGSxiGe!)qtxA2lwv4gGBNuEmXKDI3eDV9h;Jew>)yc=K|1!LB&K3vh@TIh>2_ zbW7S@*8DSG4W;?gI325R706?$&+DSEWd1DBsd99Yz9~)>Fw<=PL4RhkyptmkW8sh>je4Xg*#|8*+DDunO!miVN1CDP|Zg`lIfjw6G#IgP5^W z5tiHTtElatQ*&8R!;z)}cbRD2^RVWDiMIKHJS^VcM-O-0|I zjpcaF8zUa(P2ZM0@;>ZtZ2LU6Sx&Ttj!sD+9ZP3+iCFtO=%g9aQ3X4z9b?~<4*c*O zH(YB|ofn6HW4C~u8`%~)*Jha@gF&96M-$E`^rZ$}uyq1flLTC8=zQe!tD=zQTFZCbH zAv)n3T@tNU@QtaF`bj#D*av9z;mTwOXIF=EY{k~vi%KTvPn9UzDNm#-Kde8?K-xH>%33nth>WMq#3 zg$?5^5bZ)UgwdxndPvv$$-(@|%?#un%FU&-gqzuNylQa*!SYC;2-G_GiaYprM=&(4x?K35N$F9&Vh`-J7uAo z^biT*-oh)NB#f1Uu~m5%Owk!t36H)zY7>X!wlErQKOP8F4bAzFvBy|ffTz8Kom$<_ z;VKnP=r|)5ZUmYCzG$`go1#RD@nrsEU+v9CP8{bww>~7k8jsT=PS+hq%OD{82Y|+x z04y$coH|i;56=TnoTq@zNLwdfacC7NhBwx95A=O5`uokK`;}nRt$0Ee_s<}SD|vZ3 zZ=#plMyy03<5v>V0D`frGxg+pk`+Hz(tq9UhhZkjEEFOAizTH`jM0@%&OTu;+fe@@ zYfY=(KI;=DNuT<#!RiDQ)TEolKSH7rKkj*dy0QfUmq|* z*y!iZ&R%ckqGV_T(2b|nNb$ubgd4OIJ zpWRv}F|L5Z4+ErU3e>5PJJu zgXhWUBxWB=kD)IHk7>5&$7)|aE@$QUp0z49hC*sKU~M*QJKhn z7@uL{ELnhdeUAW&C#{kN1Zu8M>qw52P76YvyW>Ih3z-G%VUm`39U<{@qHv3pWfzm; zJULE8e60G3Stnsd9a$fw*fVu*B81 zC!2lZH@`?(=Cr9$R7Ry^c;cMtN7>9-23KPA{SZ>nei#Tg= z)3*)q&bt#ydPcw`u`+w{3vc3p7sG{EnfU0TcwM{eRd)WmMOA&dFA+YLFo?LV?A-l` zB;UpJ0J76yMLtjYx?p@^f45+4t=vY%BfhQ_lb?QhJp%FT=LaV@pIE{=DI%3af?1oH zo5inJMS8f@8}qfPs7*EG`jAey<@%N9$!=|tndwTv3`@J5|}Dx&4~B)qXWD_qqEYNB>pbD!upCtK?FD2_RpHCaujS zP%1Z}1mXXo4Fs%5AoJy$rC&R>eO`{+enCI4o?_3S;s!v58FhTG&YABph{u#!CPy@k z#qUc($no$oL-Fo@NkGOBm$9MALdNg0Ebwo7;m2yfCGp>H>n>U4--1ybx{KRNj@2*V z;au?*ygM@C!2yaR!?(04k;AEHU z3$w70@n}3hS#Lqm!`E7#I*o#^e~RPmB|(+p>ks`E63UzU!Ms7EkeE=&9LYB!ze7kw zq4gQMZ%o`9X(T>ta}16gbHHYIHIs4%6f2RnYf!DuE;}LJ@{@SDF3=mGc7p*C<@&WzjQxY} z&xn@LC(1*8AXQ;w>9kbV!=j7vPb2xMs5H6-!I?l^z8gxMJ_tx;cRc6L6qR%pn&k%o zsPos4A40$Bzt(tncA6T*G$mx9@O&a|(jfmC$NRUaDXy$rr3`Oqi5DDm%AD$~lQ~5P zIgljw_lkOI=_l-AvE@vUf9XfXsK(RZ+LC;4bTL>tJX$q-au`JD#p!fIDp;$N=a4&-N3^N_2BiRHH&`=paDCPdIJP6{vR!MhFo;NvEpiuDj;zj>41TO9w8mdq z{n(h{6~_i!nb|`(qTXM0@+>6WOW{|F2>dE=e!-358G$K+BFj|rV8?)PmByfOEf)jt zX0jC1LlwqbHu8)i?{ryyf%GAePw3E#Q+fp;^n8R^lB1Bk<_tJq*g5VV zfEC1^;{cIKyiV=BC;Sko(kB+Ftx0XR_LQPZ>g7tVXP!lsH~*QW(b>b#C-QV5Uw5YI z0EC!7%p1hfYfP7V*j=1rZXGnJEVO>y?Wm0tb;&2lI17Y8L|pusc#R6OSp~G=a2>?# z;yu*P5xh+ntxp$Z?i#_&^wM$*6{%UXYgQ!2c^w2%v&IXau@R_LyCrgTN?|l|FiukP z<)SQnAT59YfW5nXQ6ywO>;+(hKMYM2^u$Gbl>kJAWMS33wthBZ$%Nsmf%V-B9{78) ztEGT6FFb_JChmVw_TE8FgD0n4$u3}eBXO!zH{cB{cmRW?71h|_sYH2b^R*F5xu43 zx{|uGoSA*3ZW!VdAT7sIKJCmbnYAxC97Nkzi&f8dng`b0A!g8Dg-_%%Z#xP?K4CEp z`lnQ-=ALbC#&JALYgM?gE=fj!hyRv9ouiBp{0UaVSFHCK2TPix!@|*%FtHPpw#%hzh(={8lQ+S48 zC!|b%Y%w4SR*M)j_t4BX@z61~O|0wXmQ03pns9mRKC*=JvjbKztl1EY^86R+prr;k znUeN582Jd2)d9i-TM*v5Auo0`GYD~hOSI~R`Zew4Y`iZy%DBVUm!R nXoqaI7L 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%0DdL@RpHjBd1} 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Ν5qhS0xOF(IH-SSZZ|lnxJNVD)2^_PcEBo5%0V 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

    i=hvSNii4zCE8Ld5#$0TY&;QQ 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ⅇ!!V^>>z$X4;Ifxj zXqV(!Jxqs&Zo0YJxYF6*2xh1P$WBpO5U&(ZQ^OL_yiCrYOmf)<^WV7kiUGRy6qFQS z(+JC|7)KFuao!%q_I|^dCGeT8|1Fe^R})5k2v#I4)FP#otxK+=M4(FL5dCPi9QhgU zBaJd?(Nu3$XX$f_St|TQoYeA%I%Y%9mHBbZob^sGE7F`Ha#JjytYmty+lbC5%ytg&WL4ZL$s(s4&Ke*6Nd#CAIUTM{+5VikK@B)7Z5B z!7Ve?S{0X-sfI0RxK^nhcq*sH#$c^fzP6B-B2N%XZ`&EJ+F<-ib6ccU;_*?q!&SE; z`$^*{U?R&DsaiA|!{F@qPd;I;J{5M+_K&x>O0MVuY>U2hgCHf-j`jF2)=grCL^^}% zUFGnG&N5Oj{LPKqWPVrF0X)z8ieTo2kbvI^c_z=Bjd9K0`aU+^9%rkQ_)}$YR6Dgd zq_85e>Yo@>F+(z#vTno+b8HRzFr4&VBoxay+!io21Zoh{WAnfVa{s8}-wl;&YFk6`NkkZ+AQrrJT1VLZcxdit0R4#|*kEODZXNZr zcPiK2+*kb9w*7YL-mSZiLFWF&-UE|{+$C!1y*VxG38LB47>QRaSR}#-HJD-p0sdbf zAz_yzIiVRcatikVng5^g>0MatV$cvCvQxb2>pp7)cL)WsQxuNgKJ=;QpprjotW-u< z=#Ka|`g(J`XM!EUYqU1>9bk0*1_JM|r&*MruKCj$r?O0sb4po%3rX~k)UuyO&96c$ zq+WM49G;gLx^8P+-e56Py_Pne@9dL#qkg>eY@ju;EpvBX$qly+o+3ZgP?%k_gnMmT zO}YLc;XkU%Z5f;2a;}Z%->3fGfruLD!i=>QKa8f_IC z-Y*iqVr}%1>GhLkK-%u0VQzPc=uDqx!{vpku>jyBHqmei=O=p?p|TLLNgs&}G6+eD zUweb#M9FS;g6@q_p!<;Df%{~{t1Je+JYdk@j~;YdG7MH@jG;i#OfNEK(A#}_YGw|0 zO4yW|@K$d2$L`jI70G?F@rr`sX=@fTd=T>44&Ez}IHMPTfQ$fMloUV~`?NJ~zA3_- zi+KwM-3X%q@<_2wNRjhEG<{fSNOyL*6e-Xkv!0VlgG;hZkr2aOtSu`0ykPS@Kvf_l zjTQlPAIT?|JR=Z2FAoF|A*BC>dP}+um(?c&{z{xjN}R{AXF?_@n(wDM#j!^Ly{}UN z4NFS;xTuetmub^tI6t}b)H+01u}gvpK@8}n&D!J0%i~ZqC57xGch$eY&w_j$8)yehoxM}Ces zuuPVJZ@f27HSlF>gB>1%_yjC+RPb37BmhW&9Yidx_d40jO`A(PBtmr4ONuJW#cED! zTYw3@N5LG$H1;hniBiK`0-Hrxpo#SP6#Vbc=4N5`^5VwdADLVFhU|5@kU8XvIuwf7 z1&})hkPE#*vn#}`#NQMtQ7jLLA^S)ngH(|rjG;v(Xm=?HgYrTsD*>h&f<+o9@&eC> zV~siIt)$dbfg_Vf7lo8Vz>jU6Hgiq`Q&HZY7N7{qNe@W}*(6*x;>I5DEl|vz!WjMY zSr%Nky`=D>`7B5ImY8PH#~PHv0*aedCY!9pTN6|v|3b-tdz%y58$peqJ;)*LEdby1 zkoEzOCY3KJ|w*;ksirpZw?MFIc37J7sQblGKAFam+nqe?4j?D zvJqzZ`FQv_FCxDXtTU13HhLRL(F%I;S18?5ibPL(a1VOX2!W`GB?>wgH38A=_)PId%{*o$(71dqqDh|hXS zHzP9@kV`-(01x<}K{QLzrb7~2efg+O0|*o2uF}vg3oiG9F!;gV$0HX&aaP~4Z{C3} znCx2p%Y7l)_@(LI*W&)d&(~R}LWt-x;-XC)<~Cn7>`3lu3i#e;?T-DFOZ(JQ)fmiJ)Y zy41Vx6-c1&e+v^ zWBKsovvk@@ZxLnZa}w0PAco64#>!Nai?3%!V#FKk8n)utSDnNb1g>VJoPbMzhV>uV zJey+&DpwR!$1}Uc=%NPDjG29b`zKGt+Y%e>DdnwsjOP$Qy`YNEjU7Ceu~W8j!N_=d zX1_RhwRg){qCxczSA8d=4nWl3D9dJ%yj*+VMDzasFiSf-1}3Iip@S~isv=h$1LU`v za6y~T#AOmdGN4EcKQdN<600AtM7ACo;oM7}q4TFO9d>hx`gv&(EJ%m%vtUV>5mK(` zc>a3k=uKs);)WLBS44Vl|)}V3-q4qkauPV-NiE_PU@gB1&Pd;0H|$ zL?!HWZ~tXA(ZdePRSxC{DH?M2$wLXw$rX}AE%td8DY&oxiM;gL@z5HL+uA`Z@qV1Q>tOA-RFZ4nT4J^SD++de?*ITbrs}=rl=> zXOnxlL@o55dDCdLCUPl~Q1kvkv&T?9qLZ-@IjlTZ4s*`b2~7pE$Y{AOZYk3nLW7|3 zOl2y%ruZQ2W9^w_WuZD}eeJEnzsq0AEnRSST=8PXkYgCowuU9S!^&sfISWLGsbrh( z?SQw37^mZqf^ZeS`o-5C$j<_o6r5@hl0`fSV3`9EJf1D_|re zaXnlQII0RZ7C`Qz06SU^~j z5)h064i@4Lk@5tJbB8EB0<^e8zqf=raEE)egiEymLLLDT+>r=95$T?h*)37Uo{{OE zAq2u|2b@8C+fc$#P&=H#Okg!qK>Qtd@P{V^vv2~;lQ8B74+zr>Kq(y0#FNOyqt4C) z0cee<;|Z4XN}~3Hz!Xk#@cIe!33deh3iblvf`OmXc6va3{?pHLulRbeG`7}s3P73< zPZ|>d#NQLE3XVewiJ5Lu?S|6~Y0U}uN(uIY5D!g>=CQhX%GH&~Hy!+ZW&uu*8+}g} zo#(*c*6d*-HKQJoueUlWSc@49!~}qpz12oqOHv2ROhZe$+fs*lE2eof%e^z3pNo#$ zG)ufScX-oRc&k$fv(DSHquYuCrfM+S>!J~g!tXM-TkB2RGIhOU#9n@|-Pe8h(IVt& z-fn6N;A;tQZy7%hjBjr}mTk>$Z>#2O7h8ftY;$iPZts}p>s)T{+~(^#ZtuG0>;Bi? z{lV7*)6s*%-;2}HOTynr-OAmYl2911(hDr<7)$RM@8+Kv?wFYNrP~b_T;Ugl1Wax7PapG7e(=x0bk3j% z%zj7*V+zbscg``rK@UP`a6`<~wX<4=GK&k;UW*Amim9_p3qbY=N{8}m`N;+dEa?u; zN)0Y6NeKTJZSFr*7zh9<;Oqa@&JLme|72(X{}8f$tws$5fF9&N?d%yrnKb{Q%?&3| z$PGOmM2d|kve|5HxWgV#=fL@sJr9#+2iidHkzqQ_56puE#*vxZIWO0nT=usv@rDz& zbAzWDC>$Fk2$QXlk(JYSNRK9+NRtNm0U7Hog)c+o9X`5yz%Iv+U1z9W4C*$JnxwsU z^YKB-e)%UUhVA;m0HOe{N8c~?O$+hcsy~F=Y_{;rXtAMD%3(1H_V^%Wj-RmS_g!sc zOs*|qaa^_jaMCc?J$UjI?!8C`U+KI^vY#y`(d1P%LGVmtG^WvC7jE+6`0Gygz^QEse@0Y`0l0faV2D&ScnXtL4SpY{XxX2BGLFMm&40OtSRMVgEGqqy z=B75A`@_*$LK1*yL4%3|6^jPWIysq-7Xm}mp5(m$H9g4=`BGMr6VBOolAj>?nJ1it zd?p2u--!I4k)fg4WbCf;CLsGfM8^r;W3HY2@2qa--sLm4@{$J)`sA$ccY^XB6p#N7VY+hCwSQO zJSK9k@J0McXcES4V0cu7dyR4eY)wqmZhbP2TSnh^SbBDn{+V%4=)(Bk9c6e3T2}mo zF?c%R(x0Lh634M&pRZ`XdOn}I6##4$EDO$Wgj2`G?|1yG;yOuOXXKYJ8s@LR9-;2` zI7n1we!Zjn9oMoqrs?3IHJ@`2*8RaAWhb}D=E=~$S=*g^x zNNBAUxe4wV-@5ps)r-y>qNcyHHY7YEIt*kA_!46*BFvbmO9QLA7v35$I&i^$2Cxol1u>Kf}DL(!cG4<|M@3%8RRqHzP zG4B7Ystv9!}`>K|~kJH9u0l(mbnN#@Ebt38X(LETCWtseM4*)^ zm%ye}W&Kb&2Yx#JO|(El0$=tguN#eB#5l!Q$Hp9Ep#E!)wREMo`kWKG4XwhN%5vL4 zYD%Ls?v5pZdvz3gO|97T^1CpLBM>RX2;_jJhtLH(r34}CW~*>fkcO|-B=9po_{{_~ zD63e<$!YCKP*%+fHl4*HS5x#f}wAv`g;!fV~eA@ z<(sFZezOl_D9D(9wwB^f|{UlR46UBW%*dgfk_G}m9+Vb+DY+g zSX0{))g@d*JH!e0zm5=ZJ5RqbF#d)ykkj{S#y)-h`PQ-dyip61aU_u4vN`Vrsb)Sd zefzf~Q-pmk5rhgLyqA0jS@rJ~hlH+CiqWo&MQnQzpTGA7T{ z%DT&?9FkyQ4u-IK>MW4^Sk`^n&L`Ze46AHIxz;y?{vr2*daTV;Ur+lXOy-EL4l=li z&a~p60apU|lgv3FQ6}!eSaX`w+YYecwYOM{^+JbYr95?TO@9EKbC4>C5O)~T_ zG}V5@LE>{zxb^53NOler`?7r9`P79$7L;p<3)$eiW)?2+@!+TFa)mMUkb?7`8{4I^ zn!NTJrd`~?RE;u+lD!cg9$;`l`#j#A{TmcnUB6q={@9H#J3Z9sVuR$Qaj zget*#;Xthz_N*KNJ076qP`WrkJ7Top=nQ%DNZFk)>+~=q**57&EpuJt1o=7znk?Jk zQq#mKgC=tjXPKQNQv#Sv)Uj{@lqKNt@7|^dD7QU`aR5MI4`K%@5|x<#PZuEiV=%9V z)#$Qk#GHfF3Su_^F~kUd;0B?a8TtJN>{Q^VF@jTUVarzojY(~y~0M8wCMcFiGFJdE-P^YonnjN0tiv#`A`9-I1YeE5%*t69XkkJ zJqSI*$ltU$k5}URYWPS>1XewNSkIbhMOgg$u<+BP`T6!)pVv=i*u?X_#4k@Ffm#ww z?1}7=*mjn-1__D&c{+&Zs>{khJ9gri`hqw)kcFNiUWb%dAA;n(urp4Ql)Zuw%vHtV zB4L{2I2RFH9DjDqAihAR)KI3FYA2pAMYe@mJ)~N`gON17k|&HTM?~rSn1A&s$BAL5 zc#S62a9fr?1W3Y)yw`+lJ|VOxq9AiKo3kM~c_q7A#R_QZ%Rc=w6^Y5DaT?|hr#A~< zMonwU2|5!^3pWWL10($YiXx>Qei)wi{Rf0qivO0hd6k*!Y)*Ph0^;@~tu$;T)#xvT z#kig)Ea%2Z#Th6?W*E$3#(=uGF*DWM&-HKnitN@(GZKl=p!{p+w>*S)rgdOu3JkKD zsyp}zX&@)4bem8myuU(+KhIJDWQHQI4`L$^5ZI(yYsLM81n23QsJk)Db8kqVn%vy7>Iv)0x95tE zv8t}M%B7)dm~_mKG!T=N_stsj$#achEr7$Q8vVSgN2k`1q8fJ{vu3Oc&g&QCxhyhY zodjC#V_F>)AHZ|8PTWc4apK3AXCNk|t zXR|bG-Fme227K6NlKe0iz9wm#py8lqC%If70!*Fp+IG$w!*OY2z81Xkaxv1z*yf_h zXmN*x(h-8?nj73bZnf7^hBgpW72n<3piIo)4=b)E5bfojb_6X*&S zJ@yD)*uI~QPA@?Py223@Mh3_LwG}?21M^Ey+MgaI9M`WIpe1I*xAi`l{0=Ha43Y1) zJi?%bgdSd7=JoY{8j*e}BM_rwKP*n)aea$)26|mO3C|7?Z)d;)X7I4SOI04dChc>) z0>lDaNvREd__P^j3=jfp=z9RfMne|=nk@BLWm<R)T4}kn5XOMJakkPy*#I}#H2Z9(p5*^b|e>OsH`$Mx4C261EbqE5U6e6D~Nr`Tpqo$0+2E>p0>fGLO4Mx zB39KgUd$gpEYD`3C-P<_ijV+IlAj=Q?8iJGhY}kfBSc432IkSDk^_)ik0+aXMs|JC z5COn8df*~zSzXM~#l{pC%hYNGfIXpNc7kU#W|~-JD!&4NzLPrebM)htF_~@#;~Nl| z1IUvHRV+=OZP0k1&yWLWp*lfa7p}v)!+4dmWFn(zo6~;@=iGd!DH+hv?Pk8W&ZHxb zGJN=<>1fPg3a~ZM&c{!va=f7(TmaE7XVZLUaRnNL7*KVFX3;W1N$_)$0&_BUXsAY0 zK*yP{b_*0x6RHeosFy&D%V~awN!*P^6#dUjQ@oWkrkk`#c1y5-7R4qf?+Hg#kd_f^ z7tjP|HUCxNAWeC0q7o{Mi6bpaPR<2ZE<>=4VQnlS>MsReqKYt#iN6iRO{!%OuA=lV z!0#+fS1h_uET-wBMlqnG-ynG(EuZ-==XatS5-o9WjBmxPR8Gz&*-d=6G3>wr#4fGD zh|G{DEWKE?r&iL=U#tTGv(fsiZVYqM`twhB(qB;l5r|6xdgUb(Ya@23C|s!UA2pym zdX&YYxlj4mx&SJ|4Uh*FK#vN@LYixh)pZb9LjXWXk%HRXAy0fY2V+;ay|)VN>Pd2J zSWy9qtvWe&G;5dZ%$UIY%x(G|sF%s0oX#CUoCu90Bt0nzEvq8HXXOZK=NuC-^aTVX zxb-Jf^A2e_F?APeYd2zj+wOiFhY=M+9O8ljHStLj&VHBtY7gIkkLO}i(0>c1c$c+i zi&)W}l(B_lY7@_Yn;CigYn5vI=DHB_Zq8XFYaH$H=Gu9|?!V6cmCJF7u1zV$Jv4te zG5e#2%2ng8UDYglowp-TyL!B;BVEM}{VuJ9w*!?_9=b$dTPGLP^TPxuXX z-HBJdx=w5jj@)4LP|9{pU60m@4rLTiR&*s$@pDb?PXdt+E*X~Os8Gs?QDCJE3ztV| zUyhaRw}+N??}v|vSFXVp&cgP4SPG|52jKS}L|RLlc}L_oW~9d( zq!m=8IpU~URHSx_+%CMm<4Hgf_ zTo;fc97R{<`&k#u%t)(>$a7mLE2Jos371|?D7QwJSHjoiUc>xKs2OpIlcg~;8#!;Q z7gX~W8-lqMYWGSZyZ`(kSrVXMrw($E^HQ$B`@+aCJ--)m^H8o2_&+{XDo1`qMwYFP zU%EFRv$m~B=KYm!e~;Cx2Z;P22AL^_2UZMmOgXoPZA&pvj~$($cAvH#L9sYOioKrV zD4glr)iWvY$v)4v*q>BkJp%lnp&3D1InNQ(&qIxOW=yCwJ5VV?kavVaaKvk>CnY1D zFOP3exk|e_cGqc@|DI+)58ziY|8qLYswmXe6R;+y`?l$WhMIH8 z-eme3LA;X01PXS4TEKWM_?X8L7fTlEU7SI=b!2_r{s06j?Fa`!ArXuJQr;B}Ln0Cs zr$Nc)_j-RsgiZLiFBwN9;17wXav=SaO5wll>Uf=#t zJ9}gtL6FgrTA6yK!C;#Dxki;PhE|O+g;cCaC~T&L+z9P3n1^_1iGtMrbsV`s)1c78@s11HPE`Pjt;)^<^Lu`*>gE#?r8B#7Aoq=Qu zS-w3k+Y^}*!K=TTTsP(d4A7%8Z#|AFJxsiE46dC1iL-xr*FK1bCdz=IHTmOvt5*nZ zzBk_bHFz_3j}DgvqPw$!7RC2*ft#|*HBvu`Q8f>yzQZFStjE8&`p|?v!DS%a32<4M z!bN2MC59}|L!AAkt5lrw%TO6|qqwrcSZhljg-36_+4!`nS8iM6E;PnGdG(C;L8h}1(I1en+4Mb37dzq6g|w8|B15;?KE3N zOF%^|V-=WNEaNrgMXVBatXr&-O@c(MQ*DY`tkYi)E)~3Y+i9_Rh_j2@<_15}CD#&- zL)jL3LxNHZvzcFH0e+_X;M@4-42ll<^5&)4$DCtg{0~DK0KfrY2dVv^o8!aD`RrF% z39$d?=J>e$c!0Wb<9}4%@@=Sa@&x?+@8u+8?Oo01CLEQL*k)}y9&Gd&t z>jROC?))B_<3H*=QtP~#Q}|*6@T+=ruv*FQF8Ja4bg%F2ouKpTa6HFrJxlk~r2-}H zZ1s-YA%?EN9|sBsA1_bV`h@Nw=jpUvv!w&r7ge3lJm}R%ui~A*_yK(HFx&{P2RiTP zMcw(RoFFthD{mX-En@IMYR?Bgz$kxqgMf4}gdo^+$oO49i7Zl*0OEp#5+s$7L4m%_ zl31Uw>!*DGWGrO4GcPRahJff}dTs9x^K&Bvp=_2$^!vj4PL1O`a@+LMqeLymhanKvcE| zoN!KFmR{JnUnUv1bHBS?R?%sHP$JBLunj^p_CBair7Y`>y#-($*2ZL|GMBt{4mqs% zR>xwmoRoGrN{TC@=&qP}_3o%iRl4OMui*ykxMlqboYVax_ux2gG;j1M^JKwcv*1hJ zQborv`RjsK1$i>boZqB}-T6SC{oP3 z)vxs4k#`tesq(}*GV9RIj1lVs5p|v^e>x`2N7_^RrBTsoQj+iIdNB1S#l?(o;ILFT z!Q&%$;|*rz$732gTsq@^Rnr@uY6czOp=5d?Ws=zahf8Smghy}ezk1_7p#i!hl^kpp z;6GZwm>vFHwYR%RY)I zrfJyHWmlFwy*QV_5^`9X%eud3$jw@VT8jWEYZzp(ANplK*Mdc1499P>#9K+a(Dh;T ze48{mf?hp%qOz9l?8&ZTiqbegIZ;fixl(Xg=T@m^V7Cm-ub-E_gbStbD$8?mrFOdr z_FaPK59aajl`xpBXB?i9P@DfWx9xXkn+XsiP9e@-lu8Rc6=o>d0DBPkbK1`!?Nk!O zGeXiB-_LlhJ22o**>nfG|;NR>cqK}-6!)!a(=(g`Fl*&X#qz|#?8#DFmDm1^D@uz!%Rvf z@u)4K^Q#7S3jwFud>S-5+8dbS`-)PQ7kKe8qI=fSq6zqXaeOLSVTjh4o55Sodgkr4 zZOP-C`$^`3^DvdOV6n7Z94p4hR4KYh$BQKm=A}5>6xj{U^Z00s(+#q&(?IwW`j|Ht zk0p*BcROCZ9Cal8!F+S7!0!u;NNT(w1BRf9i-)PlLfKvs*L-6M*3nAaQlRO*4pcz` zwG2~wX^%KF)jkqW0ZI^A)cv#?E=0J-%`Z!Ur*eQiWI+#?fC{}2yJYl6v=>afL>6sO z5`~Pm;k_s)$kPHaq>W`3G*G-6DB<=Z0DOcZ$YvzV7}kBX;-G6n&(5th^x|H;1@w{m zkU#}cz@-SRO*zvt4zuKb8MYlwmgXJ~c^-DW4~Cn0eZfh~VlLRP zoa9MOFPK_}2z^@%e7m$fk9_b9H2sznc|~P<*Z(F95_Rtg=jbrTC+KuV*jo6EtO2P#avbRfwchmg2xcuxt(w0x`SAPp)C^&v8pIR=0 zpM1)9e63RWA=-=yJ--a7;5t+nQpqbDw7E+3&#jg}if;wMpw zYtS#$d+kJ4sHU=zL}gCaN6yv0LycdEo07Voc{|?Yh;2T_jD-YVJH|*jyg0sBD;Sv( zD8?^rU&S@?E<#*6AWjT+hV9F01CCrX4ho#rD;rw<{*))g$L>zKeH)XyaW25e+I?Eh zGMIVHUIKpLSaGXbnx9MMW9;pK3(*=;ftW%K!^5Vu9m<(ME>S;L#A$8Xlw>>2Tfo?d z4N)y$f1udwtNl(2Ufh`iX*ruL9v!0;Mjm?1u3xMhZAWs?H?Wf5JjbM&PYj;xdKz^- z9&Y*L_0_NZ0>Ay9aAVDaCczzz>OvXg)zu1o9o=eUQ!^HpIrL!3PZWX$&&Bed(RbRchq>bYuDE)o$T|$g5LCEIngW9ZK@OPS71q8H~ zp+P|sZ_#VLfX&EXcexmGD+GJx&IYzcGHv((huwRIkn=r=_&127SOg?Q;CzcIg;1OM zyB~`Xj8PJ~&En5|&dnnETGb{%fRI6y36U@q0P_cupK?zU`LM8}(9KX^ip-Q3ks{k~ zYpzhlL>x!jzFLZb!|TX^0$=?SYL5W3_GFX^1_R)+^My`OVG+ZN-4FK7lw5BEPe@R& zSsjuS-d^hjo00>-f$jL{C5R9%1o4MECDYp-xv&U{ZMGLKM!*8_qz^+hofbkV4(cio%yD8Xg3 zzZU4RI)?t$Ly0~N9|C#=a-}BNd@myvhh>X0h^HLnH2?zaa|F#g(Vo@E!sf{n@L~li z*g~mh9%qy4^0?t{!T@u0_?rmahbh1^6TZPV9`H2YQiL$iD}-0Xa(VvmAYcv#_}q=N zn1fTcZfjsgOCOxK47^GjJ_myG$xzL_|p@ z*GxP=ulkN1)lHy;_D&WpGS%ISXrEubY#o0~60ahO7Bm|7D-~Ah9jA<>s{5GpxYn!h zCQU9@&W<&g6q(sWP698#^Lox=sP#@yCx|$WhBPeiO>P`QFO_$n zBrYzK#V6m*Rnf*aN{pS%}M(hG4o>joQEihbXBhv&Z ztl|BJQD4*HKQb@$Adq>u;7=zenx~NwYXSr$F+wykP=MkW{X26%W)_W!vY<^O}% zWYyog5D$(q$Dg5QeJCOh<9}|753k9xR9ou)%26Cv|K1d*a%943)LPxAMT@k`i^?`} z#Qn-G#*FtVJpmtXZzonK(u<>n{+wd^er;=ZO{)w=pAP==^X&Vy#-Bm1Y1*#c#roj( z*|b%+@wqiO;Dao6%{{;q;E;AUjJdc3$1BSXFuEEq@h3HY*Dac9HGGXeErC zH@cpsDgI}B-?vjfXfJ6bSQdFFr`k7;B&XW8vK1TXLxsO*dLX^2vV1$yY_btmmo_=5 ztis}yK;~QROhfj4TOF*%tK9+vT;;t&Z965ij1NHcjeS2mx!_ecis>>sE{KyANQ_xCoGO9t2JA6ikmc;-}6ueLh+I1J16 zfTz{Vxm4QZa|+*$I&(Zx>cM(?+(PehS6Q~(h&}sp35&6^?cxRT>yB&vi*Fw5I|nDy zg?~8UvUfqEr#+Zo!%us`&vQ0XGkAZUd}zJoIO`I{d&kqa`m^=S9(~ZGqL((_(@~F- zzkC|0A#Hfx63D-mO-9lcQ4>P>rJW0pvLa`C{MUZF(=bM6Mb4P?-2ps8ktOn^mGmi> z^I)X%SLY#PS*Odo$9#{@76#&Q8k=k=UMarw8X&D+Mr*zfFK+xhxoE#;A~#mlp@rkuQX zD~;7f3)8ZX?Y@_VWBDB9r{TTJYn*&yzuzcPW}ebwaqDxEFp4LZ{ZWF+Dd7es^vkN5 zY(6K>_IT4+e9WNnorkQRS4?KbvPh)ZH*JljlO=3^JU$Q`pW2%mfv{+a+BLJ>jSVpK zFZDk$;0SKe?+q3HKc=zKs|wfv9BI1I@@xxxvZiztx*y~w5WY1NO-Nu#dvb?H3P(n6 zF=-;hy>-E^8_}HLeUeI$UoPQ3N+{O*pI3bp7|8C$>>Uy;A_*o<(RFddkG2Q|PMb_`4!H2OC{u*%3 zOQ{?{d-gNlZgGap)1A>Vq({OSLPzn*d+R!*q;DG*Ko_1dC45K@(6E-F(jkT}5X2$6ahC}_s?T8Ef$F@uW3kn_P;yV)7*vkBP zBM&Z?nGZlkMy5zYkOLN4`sODkml9hAMg|l`GiyHI#9oR&CKKhE;d zA4(#7dqf0;d`u$+43b~T0R|i9ba#xl=B6ZwfHFvS!tWAVO|bnqlWSZESGAJM;xX+#GkA27UT?{afV%#>Ec`_A|o%S$Ga)@j)+M! z6Dlh_kIR;@c^d2Scn@AmQBk$U#Wmy(aN0jY_01FR)>joq+gh~IHr>xQiVL}$Tfc5g zUpNpzZL4{`rTR9R(9~I<%JtracA$p@{1W#G_G zCsYvEQlTCRK{xIAgR2&RK5ld!X5EV^$Y}@NH|_Bc>Vq1e266}BuW#k2yivjCf& zhNuk}fSU5Igbj_3T z-n>~%b2`sXS|()v{1EWq*d1AEnHKb|$tL(p&d2A&WB>jFw8yzOK;1fv>^V;3IZC!D z)f>;i!wwku)MoI`yDytNHU=SN@tK zP#!k_S#_WBT>WZ>V<&>GbRui)GA}aOoX=_Q)6aOr(hMg%^e59_ow1<|h>8lSrz_gO zf7;DFBJ(n$`gG{2yx#oiq%lHt_A+R!X)^P5Lrv>9t5l&nU{;cYU)ma)kZ?1>6H*)u zi2cLQs(y?|8hAyvO3aNV$0kb>A@p<%*o>#?yXET7!ixLrUb;?s1>EU{cujw_`F4;X zk7dV&hh@A69g@zIof^Jn_VK5Z#Ca}`g5brw-X3&8V-ei1C9aW7Cm)OQ)njw{9#hV^ zSn{RuM9T4k{YHm_#1aS)mFO}1MKqTQQ;g?XjPVo(Q$Z59Jvdev!4!+E@AzA30H-bB zqq?l>QLPOc>ktb%Q5)!WO73OHH|xV^SKczyc0YQOQ6jg(_76i8{3?abFqiBg-qEvj zYk+2Z97{;eo4j;iLyPn|I)%BbvuAVYYgFq>L;PANF{Mwd^GUSjSMfpD4P8y2q-zPH;`qtSD(Ne=2w z*nxlk+?CdGJPru|_2WJi>iF)*FBL2IKW|C&h`f{5@f6Ocz^@x1 z=oKKG5+K?fAhsAFejOl5j*=Ee$?Bry$^AWDP&_>t=%(muB`8huz!$?*t5W#dyN}Lu z@vCbCd4&SuSC5W11C!B%lo*4oy@G60g6x}vTKvr&$q719PHyD?KJ5M5ga>{&?0Nk6 zT0qnEqdgiCyWw!ne+Xs&SqlvRZ%ud+3!DIfRN*)OCCt{7$A&rS|F;Qm&R-}W_amvK zKEg($-u_=}0Z=6cn#%t_!t5I}lIh&14{L$e%Y()G2cc|7+ttHbApD+I?-`k8-{nen2b9=-(%gL5z42?7rpmq--pArU2(w3L3xEiF zj<+^1;4q2SSf43h_@wy3x#fLG`T z331)6ICOdM?GzjJo$a)f0q^hLes~X}dKEUGy*HUrK89u057B{|p(l5T4WFIwIxD}a zzdCNcI=(yUM(6%@+E14K_+*ef(Dz&|v%6hyQbOa^1+bX@($TJ*&QE9QH9qNO;Wpoa zxIz8PTE&gxli#<8d_w1UM?>8A69lGW_rEh+BJckUCQtpp5N6vKz6Z}_qw|2IogVsv zX=`b)bQa?=*2-wvEY{`DnWZU|QECLN2uX9>zEE39jphAZSiXrH&~@G=M3G+!FMhb6 zS@bMaGa`?;SaE<||13;*d?PBVWZ;SD7Uf8H-fYUcoWEs$1nxQmQFZX3VCz|=OGG~P zcf}#m<+CWS@qC)Ahv>lVSu_HtfDT=0Seo)YhGJH-7uM2?D}1gN5mCU%qBNqce;$`I zUcf9gGNSHt9-o6#$f}_9KMQ4RAemyEpgQ`jXa*qgKi8S80BVrNe{-uQrzZg8f5k1a z5S#q}X`R_ZfKDq8gxCJ}I`h*KnhJo^$deg|(sWn@sq2DaG}=%)SFD-;f{~rX4#5Hp zxvd!eSpK=%v`^W$PMdR~-29()CYK5ec*=8N1NG!JmReim(O-k->er+(veoVY?APSh%?}38F*=h;!=`ii zK)TAmxD_>T`u~7iKMuZ4b^YZQly&VNZb^|*|KGR;W>Q=a?9&VRPi{HdDQ<)orH1?m zxBS>A{}fnn)(lA-56ktepD6w9Q4MV@xj z92@r@)|rEBHd@ao*{tIexM1CwREr|a4DX@rtg!;9oZcKm>(GC=^&C+h9P6!b!A@awul|a#t;>)8Q-m%3$)*Kc$-x+7mziIZ@;2iyyzJoI z9VeOL)l$C>?~J?tKr_n80N9SF504%yPSwJm9G>>U6gbcNiFF)Zi;2ZFzYkEW*qik| z3O=+=pbB?1l3*^bI9H|Ph&UgG4{`n&&u>)yF(LfD;>V=X^7xM_Np!A@X<0I-i-*Wl zX8n}1(9y-5rUKXHrS5QYu zAJ-FuI&a&)2g5aR>pnhu34xAB(C+^)ZcWa%X|X$}l0_-}`33++aNTUT%Aa!X_&TjR z12cl3_{^k5|4I2?R9tntUzRlKV^Y%fms>jfK1WO&Rd>hj5B@C zQ^B0_of}4X0iqFW{`sZ#Ng-!fJjo0s`Y6mAL5C6b+*q>3d?(~al1cvIvSnEd{+T<1jFM>{*lBEah{eTl@kEzs# zl~jB`HtnLK3A&JUR6xuo#iA>wN(N--{V|2u9)6mr_=HK1`KfQ>j03&3Fn;G!;>!lE0D zQW{5xbf-Y~3T5&v$E|12|67Eu|08X2yhyNVWWw3!NBSC0vG8Z&Xl0mmI)J=b^z+E1 zXX}s5(}-fR?@Ag5Bxh;oAqvl)@8LxG-Tuf1;Fe6T5WxNukN|)#2>G9YM9vdJbC@HS z`GaA!$`OjLc>`hO-1g(cu4x~m(PhG@mFfyc;#sxI3`gn;$CBX|qyGk^j&=R334O&t z#&QCPLPN>SzZA#Bc8CH{4`xA9{l65)|9laRB5XE z+UB+Q6Lt5ZQnAZB9BnwM=|OQE@-W3~pS3~QfFH>)muh4$)m@M4FX+V3_W0gF(k>$e zB_-Y$aHG>jF4rH-m;PwMQ(JE6UWW8x`f}(}Y<_zHB&|C2_j>DDP`eW;*K&gcI3JT( z+0zB_`WnZa<66y9%zvqm_I}F{*4iF_4nT*!)gQAU#;^xJKkXBrJKE;+%f5Fv$yw>8G|8qLKFaB}qXkvB9@CQ*`1-9H=- zCb0hYuY(=iGZ|cgPd#J^_tRPuNfa>Vv8E@)&t{qjL@z?m)y4YbRmjLR11uaA8;t!H zqK0Ag7D&z(!}@-Y6v69{%a6@RJ6rM>kQ5pGG?59Lk`U5Qqmo;$rE9{Fj_>&I$VrLK zgBf@>4gA43gT{i4^2HjS=3xmL=?Q-U`9{PO<{_@WJ?SJx3L%e03w)(1!EnR}D=VpD zo)!V$+|S!9wze$hn9@#$?)?R%gK8R7@~hBYiSl&CV}Y_%CA(4^O)KpU?-y>3Sd6-E zt$)h?0E6@1=$Y{u}4=6E!U+J)+ zK|tzUQhrxzolfz^GZk!7^!OcJT+7*5=+igZzlhMfUjlR5mH0bXZcI zV$!pTu@48k%{HT^2Z;>*vK}X;|wW zX9Bwtc5{N&SYh12Yd4{lrs8VxuB8|v^^^Bh2}zR1K`+-8uWX*p2FJwSt8NMshHz)~ zEMOoT8I~74kB#|zu)`cVsVT+=+R9L2 z)dlfatp67v)zfCynz=3!l6h88f=AOYZ(v2oF#i zH>0di85S$zjUQ3f^l{TUER_XF!;lz|HQ?v=9S}{;gtOa^^i>=d;UTt3x40h}JE|waV&N3e)}XPfew{gL%^oJIVq^nU97`H$>BIINQB?3x~e9AUhz5Ri*z0A+j{*pA5m*V7fN(*NQuRpom&LcA%9Q8JUUrnd zsvp&^@bM@&IbzoxVqd5Wx~#C2E7zMFUHI6lUFqWFVEFA{isLsEcC$(1zKro76#W?*6X|HaW7AbVfbIpgWml7ifx3M>OO?^Mq=d)xkQHmW zacY(JD#9>M7|IvejS3hi1Bl(jEQvxf01t}Ia8)>Sy?}_5g@y}gE{pUdf=SU$rfqpg zREN%me3+ScoeoLN(AbHKNDw7J>|!y(fWuX0h_~@`S#)Tlmz+|R@AM}LuUeSsD}9xo z#@sAlbzXnu_I?GyeVX$^=W@z3TAflU2fGz|R;*Um64vByI zBm@J80YpR22m#quw1!b3DBoIvHG|Gw@>I9kRc`t(^^#0pYLSDY1p)56&VU6tp*VyN zRE3L3#qI^8#}wQH!Jz;jg~Rf>w8mcgsv-e7f3-@nwJ8K%Lk{{Q+qesn^hH(vJhG!W z@uxo1x;tU@!}+8U&q?(&ZZfQ}<2Rpl(~m>Wo&>B*S|h1j@u0B?B_GL6XC|^<@t>{$ z7dS*8-)uoR2V5%Iou_MPZYI^*6B4wIt2^lMoiMb=Z{G0JpenAo$njZ_?&rK9QJr z>A#i+?n8efGzd2!=|9ImN5P@e@C_^nL_KpePr~}w>IbYf-+VOj*uPbX}lrX}w26l7Z+tQ1e;t22xV@*!vK8;)bz1aVFn zDD6Ks>w?*i5Q=ysQR^bnAOL$!Z^|a+ zH42xZx+a7P!rB(Fr@JjIV1O%tJ30Xp{QP}NK>!*M-AnQv2#FpF$MgVrv}hwBKw~H? z;*tyyH~l`O2D60)F*D%#!PEd^W?eN9fc6}@P3EJ_;sZf~X-NTGpZ)pGbiFNv!BUJE z0h;zHB%aLr&_DM`uajJXx&2?{vPOpu7C(I@q*2HQHsoSY|z8#v%6eV z_!MhIB}tg2Vq~cfA)zAjaW0U~^Ub6nth6MIoyV`|N7Qdk&NExeALN7qRxloGDv{@a zFa^WDWJ`K}Uq;g?Ai}uy+8s(Cp}Xc``Z?w^E3DNk=Bro4W1dJnwlHGFpv)8x)!N8 zN`pL4s}O;ihoV=Zq1)LRSvMvnDS4>Zr0ZeEy`yk%qsTBxN$l72gwTW0o~Hr>3Dbe2X`jYqq$bmgqzSsleq@9BX{CR;LibQeGZc0~YNFSH)6ocGd-RgpM2Jku zGTiiFdYWj4bTC60)C>l&(u7*WvI9z=y z%Vna-C2q|ZV^1CmLH}GxN1taMts4lO#sz9(>f6GChH_qpIt_*7V=kqpE_t--<%Zh9 zI4Pl)(}h1m^B&)FFk=;oT;zhEL(zfxOcaDKk_kuU9i2rX#xa3!gK?lU7U;3KU8V-U z2=t~PAHGIB5YYZ@OA)uL!vJY4GcXbDJ|&ln9rlBwsLc(ph7gcFiw6NhEqw@$*oElz z3CBz0c+&E5mx|btCH+ZdE@6byy*SfS>Dd^r9&ij?s0C}Vrv=8^BnMV2Rm4jy&&eg9EO*v zwV9`bBj(f48f*8Qa?^E(NIh7TC~Od`!Z}V6{dr!RXtw2A9!qX1$SjY5C@)i#P}a1N zL8?-&xRO4$67NgR@n~qetozt2Sf&o4u991HO8T?b{4~Wvx-T*K%a!>vw&h%bdU^f!P_{PgCdqm_{c1NlSQ{LcPX%Z@%>p5t=xgh`;_4v;^)r-W_O6zIsgS;vOsGH`)Ke3)wABu>n%crW(|B`FH*4o+I zgx*ts*Nrdk)~0^{vW3T?sOx|ObXWLGANH9eJBA&07W!bPhMFRZ&M30kTPterTCHKF z9Cv7)Q~(_EL?SjYAOb1FyI-BZ}*7$KTL^+8?-r*fkXyiL#aC8S;aVxuG} zy*t?-&v~p#4 z83Pa646}&AzpYc_gLa354vvGbIfq@)Jk?fU`9I??n!_i#d(SnTO zEtM?siQ5|bD90R$IF-?y(JC3!gj<-9GcTxkoImdfe z##$WBh$Uek_R#+1^e?UVG9&=Ve%g@b09hnK%$kNfAwVkl8v+=J96l-FISDj1-Ey4V zU71v~p0q8QJk6M-Yn)WvncP-YJ99Ms?WlJBYx0lS^eyKU#BWkiXzJ6;sT<#^{c+Q~ zh#=taDIBippN7)}e%3^p)1;54J9)7V5{>ueW|^5kW^XsJIn8R_>2Y<;g4bu+jb?f7 zapzdo=7juaa|7q-fx675pymkE52OGvLJ4U|CsGhduBisf1yY?(FiL{hrky#ufk&S6 ztJd@S9Y7M7c>||;y`y_a zpAH558nL{x;m3wVcX0s;!`=rQ!H8XK6OSMm-2f<3?Oqqa&;$5zlMLwr_}v!)*-rg~ zJ#8VbKzT}l(mN829kky$_%{HH#R{1+wUtiu*G_A3XwSnux+@QLU@LMM=`b@0(A2IJ zgJA}$bcJqdy=J%M!pMWT;er*x*J?@D3POn1n`{>SDC=_d7g46IYTq1Yv!KtHWYeGr zWR{Fl*6TtTi3mU~$!3iRrlmZn<>>v&kK~+FQ6LOE;PiuJRsqx*2E^C|Nnz`U*mugU zI!!;^SFm&FVCO=x>qkU0)Ds|r=-lFLXWqT@FM)U0?3gAoS3iyxdQ#H)c{|U&wuR|d0LjR>f=u*6Ci*eDE2=D0ogU3 zU0;1&i8QT#1i*#?H-9H5IunsJ+I0M8?dFp1d-g3UijA3u@V@zw5qW6PW2r4prt3_3 zce-jACAnn0KVr<5=(Irg_ z`L#Vc?l&&{Y$!pO43Wv%vo7*|Qeh$_-r+Kn=`2Mng=A7oODHDNF1v*wTT~&e?A&5lZ z)0a2?E(psMi1EGPn+HvuT(!*5>doc4B?s(+9SNj|nj3wyVb=_U{cK>TyG>-cEX=*3 zx4dkSc)T@v*o$s8;9-o$MtD8(!=d-*Rn?DDfgfY{(d2rx08adqxo^J?v`*G-NKx66 z)hUd;hIC7ASki`X*2{TQ2emj?`(d zWEvDy^Xcu&{g+`X`1Xp*e>0&*YFSU;YGyW}*f3V9LlzE}lU2BNwU?^Di8p%qonuO_ zO99GdkN%)hdzCk$?9phMy^$cPBzFRdg^;&r+QW%lCd_u^KX&5zz~qX2aCVznoZq)x znfe}96XhcL1*LI?4xd5ykNXFg(|$UyYI&TX%42rJ0@&>>A1V5J98N(Lu2w6|xTPwl zD^0k|UghY8p@BHBY1X7%P;+gZ8BgMWb?-rFGc+r`Ow-;2sVzQmQqbG~`u$r7qQcor z+}jr(xlhN6D~2Hr%T;?Z3?Y)U#)Lc(T^R1?l*3DtrI&WeQR_rf-krdIvvNFSLdo3F zSp#3%J_bnR>2Ed%lZq)4qnLXN=rv2ISV>{HjEaOXogB1efM5?Om!$b!B;B;E0T28V zv{tRm)uhT=N*-%~K`i|qCnpAVDmz;gZ?wh?Yk|yhz90+_lz2*;lscH5i7_LeGu#xaGMN4}!Obmw8<|O2()~bdu z%hIbUf=QCX=*GrU-h?U3x5XW^!(VTc)B`Xn%Q^jDAh^*i9t;I^*K1U^ynQKw7|Q|U zagF>0d-c^iW$KU@2CucKPU-qWemAlZWREtkG7kaN2w#3peucFr^6ssu zlgS6YySFS-R@f=UGT8FuJl^0Evp`B%nUGmzPF!>4Z_i3$i*Hcg9!R7>Yh&k~cob*# zZ$){EA{VX6P}w9NbF%qln<5do?`5TT9*5P$LnhRS7XvJN_B%CC#%{FIw(xNnd25i8 z&vF4wvs~c*TOs{uqG&|*jy}CL+J;E(2u7J;;N|q~QBDUr-RCW$g{Q-9)|hd3bOhX{ zq*dtM4%`SLR$Y9gS)$SY(JTBkoG-C$;;cJ06xrU}L6W{9dRS@vW9<^f&w364^4G_K z^!B%h`**&=0g1vPY@nIIK#>hh7hOrPD}O$qp8*g}t_bcT@@M%42c-AK z9+MBlv<#(*-$^S5fDj=xmz74~$ICcu0j$q{x-t-8^i%$n%@F0}1Z-lD(1UX_0OTRz z9B_J2T5&1BiyOdG)oSHK^c0& zfq?Gk3ShKF02*lkqOc)YV$E*Y3o2bzhU@H%2c!mtDUFi{aT@WtQ^Tv1KnFp` zyZoA!Q;*(c;_}!kVb~`)=Q+5}j}?nQMkj#l#ki`kThYE{p2?ec@B@aBZK34j#ct1R zskQYnULnw6>i~3)ob7nu#_}RDG#kDPrfbbK-ea)|VS(;$X%ptkwP~9texIfmX`1FD zoB$S-y6h9g79{&U@KRpOvOz{NL<0$~g&Jn$ylNS7s+D$mAdr~`Q()l>e5k@kPEqFr zv{U~pagd1Lf##*ieDlg&8MBtXF<+y0==prEBHDw?+5q0$8&hTW(c%75uvK^TR;7~g znVl6;<9v}vWL4w-_5lA=eUCG3*AO&YJ*Dz0_kza&OV_w>sAYk^R|4+{j4C@`B@t&9 zxzlSAmdk4-8K44lnvB{i#PQ_~-?hAQ8}vAQE%imAomao5OePJ?_kJRZ@5~-G*#}-*}Yt}sVtMYF8QvWSO zuJAUC-r`l3H&>`nvhqPy9fcd&7>)X7cRNukg6? zEi<|?w~?5DFOK_K9b6^?qc4mJ!bmDMZW$O|uhEL$_ZSv>vU+vmG^S&xQX&gwJto?3 zc%=MsTIe}G55KL7i_`g4&zyf#UHXwPM`si7ZG%jwaO*}@Dgm2i38yNzCltkVHDwr7(LIr+_whD*w`7x8r5tvhQZQ@b@AMieP)i0* zhhJi?y{bv8elkWB1j<{vj%+-&xqY?@#kY&P>OVu2e_)$gLTHU@FU|{$^3?DPx;}TN z=_fI$pHw9BP2eH8)7FmzhM53MxSJ=ZpstGWLaqKWEu36an}KXN#I z7u1k-R+%XjkD(emjO-cYM&zC$U8q-a^bQ6d8S`71q`JnbXOv+2pGN+WX81`nT;Jre z7pu`W!$jLK%iKX>f&*C}50RfjXK+s)^5t4@w3v7YK9f67u{QaQ6NTSLXbu6agV%>f z(R;&PU7!LAuWqe=IXNSK+|ZS^B7p5VrxU+6$eu`qjLDVYd`3JwOf+k)1V z{|e7T?rawYTNYYvz|Sz z_=HEY@|KA`pP*GNOZv6dsXrMl%fxype#(+ch8PEdh=JESHpYIy5k@Gwbngdp6{l?e z3&j2@)IG<%O7T-uTE{Zwui7YdO4A?fc)JXILBxA4v zOwZ%;z)i@IR1jn2aXjm^src$}5K32~>RJ?cC8D-mz%;H10}J;9yld396Qvk8>cT*@ z(tWKgusoK!cG^vl5jJDn40DGEc}0=S;vCgWRU;%E!_$jhy1U6KTD&9!Q>1%_yBRAY zz`vT*5Ar<^qS?hnaX!I0+i~#tpBg%}*ShiXK6JtoiwT9wV62@>WtU3nnalLU`?T*W zr&Id)+WY!+rJtQkOSJY%;NWmEK7B$g>z+zqz$e?@*TeNmDyjC__hsD6d?{sc1tvWt2Fh+G>+KLw@ir{4CLhS;*IJ&=ChZo2_xBAE_^+){YIEVW#M zH)j-kkC7p^nwWSMFn&?->9BN#3Zs0r3)kkITpZ@0_*TEoVVHJ*BX;uu%bc7ee|Nf! zBi$3r{T!0;iv}1S}%oXb&(JPd7J)T zH_4HNmm`UmBT4Qf$ta}+96;(ghj?BW{V!QWzx2+og6U}52QVKSq%SN)OkNBF`%~x- zB2Fm(s1LPFVR*NXR>*6r5R8b?|BJUX4~P11`~D1rv5$S<_k9-{yCJYVX!UDxlr@9Vyv`+1JTzw?*ldw$OIe4p>v`?Lmg zxGxQ2)Qm9;FSpa=Fv^IU(1=!7>~@K&oZ-t7>`hFOQi4VDVC98Cr9)-1ji4Ybb_`r5 zJC^}^*+m-a(N_>a`_8nn+QCZ0c# zLZ%{z(H6~Dno1s|%S*EzC|}V?uIAvBuPTd)h){+)=IE4ZK^>r=Alnx(H%tWs^z@{x zDQu}O1T=KdZ17REdXHpJ#;Rr>vi~itzt(~Og;}h>{41+q6~1?o8%RxbLtj`)J&rt0%Y}l87Sts6w_G()UREW+QUanS+%;|f^&ZmdgcJ1gnb*Wk0 z<9IyJJH;uqxi(b27GJd2{cWQ4B?H~=1i@D%-aHxxT0>#brVw;`e1uY@OkO z!>{=vFJdDid(fJ+#7%@Kr!%N~zinC5yEOue`@A=U#XBG3ND-hkrXWfqk9MQ9nD9~N zvp|?Q8tnyV3{X|4-!HAu1A#=3eE1QJNnEgrS#`>bsQOU6JeMjlAzEEZ`8{ zcH9OojJyuUK?Y+aYGw5`fBmLKD&4d<$0#UJ%66)*sQ}k~N-Ai|qMxd{DOk!8)=onV zO1ptyGe}nlQtQcG0q=mj-r%z_mda3iaPl$kWf+I|`vd@w}gsYps z;7WAW`?*279UZgX&-Axa-ai||yG@74BnHJ5Vq9*w9O2A@sAs{2(D(0-U~s|>N-3U5L7 z)2~at)`D_h!gxqrK~KH#Gq+i_hy~An$V1qu*hk5F&!JIypq#4`h{Rp7aF*PwoF)*p z9y~Qz_%<1b0?JZCN-_==cE_xY^o{KGRZC4b-NK7@Xq3q5`!$Hj4i2yQWgLs~uqm|B z6a*Npu8wFW!z1Lmp`yYWv#9st*tLsLBleitSu5z)`#~}dyj((5O@Stf0@P;kgY3N7 z)xqB93~^sLu70qDK97!8S2c5UEKR&$5C4YW1b19vcNFed(N2k!z5m&)=(Bk}qLh5v zl)2I3%V+a%pRIAf*ie75E&8mI+F~#L#X&n6bOm=Ywjn{Y@XLeVYAfz}AL^(>kgm^CQ$@0~O2xuT@R#yZ8|bn0 zWNCj>@Z7BrQwOk-QXCbHJNVO?5kAlgKNII_^2Mcl^`})R42(0z4~%g$5`SXj9Hrr>&Qnw0I{v(8MABGBYBzOV%j}SM&UfvkaJ0 zLPW6FLU@B*MMu=_)=SL9%Uz*_h4*J0?$ry8o29D1EKkO}yI-HJLPPv5%C*Whls9t3 z*CoSS8+}6iu?|t&jWHF79Oiur3zeYpcv3W^ekdrF9gf%Ze~ zmhdu|p(@-P32nYwe(0d~O8&Z|jqajuAtL|WC zxWhzqJgoD5?ryC%XT%=i+HDH==UYs`Ofje8E}M%B6D#N*>P>yINsZEz=XcJ%_ibHz9{7~`s8qJP-EHleCjDW^%JEaulLVYR)T z{&p0;eNz-qj})Z;eR$4Vt0-~LaAOTL8)^Jq>UK|4`7WLbsmLpT-zfC1Q3BLF4Wp<> zhe+E>Sa!8i)2-p3zxvtu`_by-*{>NM^&~X{Pzjbltz65u5L}}%G!Wu zWLXm@DQa$Da@z#s1Z(y<3Mbuca>s<9y1?Gu3Y&g*7+{~aqD>KbjR*6A$VDX%<1mbI z9HwP^wE*T)RpM@s!1#x=2HkV@Px|p?pyt_^ii649yiHTpc$A*`M>htW0xe1Ry#?fQ zB@gq}4hu{V3!M)OJuzvO>7Tbr8ofO7%|7!PIo3n{ud?8m=%pV}?2SLUIYfID_gEIh z9ml?Azb1Xd&-EY;wTWr45zua-7^-bBjeGX}K{{USONtL~^>N8xA9YTRNtKaS5N*tM z-$J)WZpUuwpDKQS@_OZx<|D`8E+BdJM33Pk-(wcP&Z$Tanj?@`E)U$F;zcG{q#>GL7Ss@qZYRgD|s~f;kS>XMFo*NdnW^2Qb$b7un!M&z|YU*`#KalB}{#ny=-=P@jI@eb>XrN7{_ zwzSRBlgKVr#2~w^hX|sd$7xm5NA<>**^QOE?m7(+LO3Am%K9urIiy-jess20oj!e7 z`xmDL>Gkgtgl8;ph(TVTMH~~GlfOeHfVfFMO}Vn`h2Fqw{SjC%Fw@{8ahQ4So_VJ$ z+3TmAQv=xwIpFFmF_FX%-=8L#QAl{KHRN?%BYR>H$F^18&+YgaRm)i_nT-Fi&4LN{g7a1e#81=`1?&Ri^_B&@0TCHhR}3QR(_Ne zrYmIf-=zy=RsTx7a7B~OfM-+?_K0;@0o%#pgL09>-aF-09M&Oa2{sva)14$*gWE^M zlw^_M0+%`ed=>O)lvI3=p)~AZoJb<@07@ncm51ch$iND~YRxcot}BdAEhQEbVwQ-J zwvfH2EB~5n>VETeh;`cO)#wA-z}qTDrbvEDPKUdcY`tXK+Pad|2tR5{N2GClW3j5s z&ReqdP1nSC$}z`5yjFy7%=H;4*Dn;r2$3r%>Ow}<4J_SwcPqn={Q`<`(Iz7f%}WSV{EOVA_j|hz%J1mC>$+tB*6W%ZU7|vYo&u>9PMxY2P3PwpV~HX}VM<1sv^@kbQFx~F z)BZh`$NCPrybw0>)}EWD;y#FWbu^TlD#~zE`Q|VY+4PNT0pKo04F%H_vfA5?O=hNO zy~`PQC<)(^-e5vS@EbdDFBth`(bj{PjJ8+(ujGW_(oV*^3~>`n@*y_%e24I1uDovg z+F{MNOx=}hAKnm>xI11gXRP^s@0RtT!AEl06WBML8@79ihO7npTg5$hnNKv&q1|FW zPhmRl?Ce!25OG0Qg!0h~)TVMT@pS6)+qIDmpn z)az!i664^1V(>QXd?eqAPNLLc5aHtv+Ryi6jIsw|C6O7pA#XAs#L1)m7h{oFa@2q$^LQGe8T`0}dXNJL z6j02!hA&x zWGi|Xl_s*3I3r}33?6V}$wzA!>ac~-N9^^GU46gzn0a&=nMptH%zfj|u)7;VZpBz2 z=v2UH>k~{!-bZls5+vovD29KM;GT=FL>5tC(Pc-zsrZTNs?bMVcD}x5UEI>3>eya8 z+3KlIL;tFz+vP$m`Za{eT`Wn0Z0qa!a!xL*+VcGBQ&_D;_j9zlydOasBjAa`>YP!2 zaXqjB8O!OhRQ5gSx``XzV82{_L-b&V{Z;i6Qzp~$ft6L|8R!fJv8`YTfmy4y0NJAE zLZ0x|OdD-pW|6pSO$-LfLE{WXDA&#;%B!319HDH(OtnH^Ts3WJOOrm9>c8M_1fi5y zRXKAfU%nuVrq#JQ{0E_E7I7+Wrz+M5?9kY69j_969Hb@Q%qGc4Uu2(j z@#VK>kn#?2_-<9jZe|~kOrMhl&apY(@GUAB?WhInyyc(;3lXN3f026WitWMOgTH0& z^c)gv^8S`OHx>%Nh-^V9h@{n$n;nIuL=TgbJ>}r9&eFAIr-;jfaxS`)KQe3@OKqtw zlx26MkT5sRFp)sMVRX~K3>go)mFASN~7o@eNSVWCzbh1n*V3bC%I8LW8d9+B^kH#juE2H0u1)ciVG3@dx z4H&U|lJg)(n8-XIsmV`wF(3`!R3K)mS&0+~dQ9N!Uc1jfdM{r`Ak~vJ&CJ;&z6>g~ z+Z8{{DOU+1eke1xycu=5S>TfW5*L>Kd-CZn?Yat?9_1FY{VW|*vL#8}=~V9vAzy7s z%@O8>oQzQ^g6u3bvO~TeWW#Mx+88Vl*4`(Q%UI3;nUU0kOZ=KHf__>KxSM{U1Iwql zbQf$Ui!@X5d;6hN?o-Lli4NwCLu64$sBjPPGxGbeW+Bj4a)&K)YpZsdfu_zu;$FlW zsfN|soyx$sgoYWRkV7^p5;!q0lps_TPweqy1Tl;yD0(CcOBbUmdD?s#WmHSpFD2MB zM5r0}@6PwW-Gap)&Us?(U{7eu0?Y0a{rt(Vzr;~1L{zGPQ#mRTkG zs5)#@_dcjfP$Y|-k>OBPR6MCnS&dw<_}F-&2*S+)k+6cPbHD^SpCND!WcF+0&auX{ zc<;{Z23Z=PvvHz(Pp(AS3eM)$LVAhYvvE)yM4=uysHaqD#mK~)MsXJ zhH|buO?OojyeAr^uz zBRCBnuCYsG<=cyfB1PN5E|JQtxQt^E`G`)|+*4hoAGz1stEaKb*17qL-DrFW9A6(T zH{GUOVvnFLxV|>4?loqW9(^Ol60tR@Xi{L$%ZXrhxIUnTghr{|OH^Zr%d2)uv2v&- z5~n9(OSfV)Yx7iE3N&QkDzpw4sUa6VBFpN+WeQ+O47L_#s1}|h!}|*OwGCt zyJ}|jhWTvKM70$dIU%tp7P8mgBQZms+JrJe^wCIU<;-hk)FdC(oKcpeDufeZ>yYNB zV_AY+uGKcJR)2kfhcL=l^@>?{1=x`VJq|ve-8Rtpy>vZeoZZ zq^X}d{>|V6!x++tq}Xc(+ZLq}$iL{5TI`cm>`j1k)eeT#&Ut~;$}$JU(efbRv->(> zq;@u-sa{4Li)J`00{*!_h{x$0QB?WjP#q7FQ&(+`^tO>RLi@g|l@kd$ueJsB*+du; zJ$NjI8%jN+Jn~xfp5E=)u2^1u}pqfibR zC9d*rto^?9F07lGD(s@XvyfAe(Dd*VzT6lRXDC0uuRF{79FCr$+651l>q?#7;gI#) zkX&s-sEXF023kINhQQ@rvI(a(E+|k(Nw7JU0~6+rQu?^G#N*KwscEaa=LAamco_9~ z!T_R3om=~4+1x^1BhFlcH%!D&?_)6E77l8diBjl?3Se4+lB4xp(r=NYE#r`iw6DZi zI|^JdG=i?G4Gz#+-n>KmX2~wk{jkR)D-$>FJ^7MwV}ak;t0!`WCNg+MZRXuk=Lh9- zcC}Vh!iBlAEUv(Gf>D)(Cq*XKxdRdEq=7xWQhq8{g-gm4`RY9#vhowv(q)Zb*sZ(@ zvNIss6R4nBC6Xx&!oV_h8rxysu>Cg(g(j z$FV41n>=}KE%e6e$s4E!hDJi2>U9X^D)n7<1rv02#5*G_os^zg5my`HuIT(fyWTRZ~xt9KGR!MJe&;=``=@s zX#>fc=Pt_s%w|6L{MqJD7iBYGGjG&mwK<_aGs5R+C42~P{5r{nlQrwCww-o}5&4KW!BNBw*tc133kaz=v*k>z@ zndmB>8dQlqx(dxJpG%rrNZw9% z@@g#lB$uxg$#0Z0oL zGBbTzaAMmmno_e92kmI|2Z|>!5oQe0$Dv{`+GoLm$!`H$kH1IpIM`7Vxh|X`EzWAq za)GUi0-vLkfv)T4`({q(NQ)?k`_>V3wCQ$#AT12vetCE$3IC5;Q>^B*vAn2v`vf5L z|3vXb)4Jrvrq;UrO7S&u<8w@~E?riB;PE@sqGH1JaYk13Z%7N0(^9wc*dfg`q{U6= z;HEDJbmjF*(H+n-+KkLL)dSLJC?0ykCy&liJZDG?cYzdr_mb=fURY(XJ$|b- zR`>fW(l%NE6wi6BVeE>jOgY?GJxB3~)*O=rJG9{fNQ-u&3qN?;Np_*$XGja6)-cF= zcZ;|8Y`=*nd7(yE*UsEvyNQ-k64>+Bu-rpkOyw(U+Pq|5$`v0soyVW`Y9soV%yw)6- zzQ6N4HQ*#i_>;z>KPTq?Q{adYLo z*5q_3yj!UT9NX&+`6{!#195Xt=>zS&UBROz0LAm;L5JQ;!*3rePfvafKe~I`iJb$& zQ*WI(u0&muWyPZDX~iwo4k1awhj6I35m=1aQZ(m0mh5RGxhd*G_ai4CsoqYWA?m;; zKc{9`(oWs96`pLzMkL1GK{ve>Aya;t*q1hm38*!2BKFkN;QeYsB35GOWi?O=Eu2l< zfkijg&h1A?GRR7q1t-@I=h7F_>ezYuV~i@ON-UlWD;zU;`IBT%V4N#_G*$s&zqddJ z3b4Xv*s#r`3@1+j1&76h(^VxppQ`0ED${;)!IdD;pe&ZerkS6`k;RC`fttnQ!)GED zLCY~9cSBwu$t-T{L?F06DM_OdpFb|N%eblczA8SKpfexk(&$cVY?348jmBJuS#jQ? z{X%_RK5ZCvfn=9msy#og{D|Jz=Vy6V&yEB0(hlY>6~mFa`-#>xT~ z`P9|57LE(f7jIci#HT(Ah`33T&1ryEGgJL( zUe{kCZM`Ebf6Mat+n3=N?C8%g!%x`J?=M5?mHzrC@1A-6&hq$oUxq)3ygy%tJ2N<1 ztCJPa%d_53NTr56^X@MieCX=Y^!yfK!r`rkIUdItJa`r?CK)swr!{%d+~gZEP<*X8 zs_<68+PjXU)8L)XD2knh!5EuLiQ9fVYv(Kvh3mp+U8qP^C&5Y9>oy}MKd3s@9T0oC zUMNvKT2B#cnF6Ii$*wXNPHdQ}5`L_nJ{L*zC?o;R9O`1HLWo;Misq?LA7MC2U-%SD zu->5uI_OcKk0&$fnU5!>OpHK_ec0!Svrg~SQ`BZ&{sginawtd^B1u$@<}$>$gWxUa z=clslbm&FfX2`%nHmU#5yU@Rf9sMtKp+8>+faO8+3w8v&41awjmm(Cpiz54C*~D zn9>F{mNkf@8*2h@^@rnm{Mhc{sr<1saAEVu?ueSm3qL|=EeIQIm3`^kbinZO_qUdc z$NLLuHlx@?IhA(~*D5#f9D$n?POx5&e>^$fng4j_cye*`<;f}G>@gNR#Nz5E3Jhnp z!@~Ll%7X)-wKKsY|NJ5Um9}W?GSid9u0}+MRnVJ6`_E9G|H+3;tcN;p@jwhi z|MVf7DqM}?0$Mz)BP?d^DGwXLNE``ytA?lc#i8FxQhqd4e}1AX{1>$L*@vt*X=Z@U zyGq5^@Cgb+_udzrY@z3naP}WA(@yBpDWSu_ZE-X zq_;5E`pz$EnGPwW3WW;^4=U2}Xpyzc^!YVT@?_pBQU}o5xcoqickjSCmy|ggpq5$C zDditV;kaIo*6p(?Ot^0Mi&`ddmB8&*Ui>+=jNgcuwxsm(W9O*TLh!?iFOX}$sAU8< zu2tq86Z{${aq(l;9Q%ZU7H>rLxl7F$iR$&A)UwOg{nxL2xFfL9u#jq*-_ota{B{`8>i5~REkI~MRJrBH&Q>SoyVZVk5>q16 zZu)>V;6uJlzhlXma6V4188-9N82g+-d1?j(hkuOsOP^88a3%+Qb!AQk0cu&ys_&=- zPTbiz`F?d&_gR78Ikl`n-zLuBjl~&lQN@SYA8B{q;$=Uque^3PP9jo?0}wvLz&IIr z+4TGSTZ`x8WWby6GhujVw8f9cGAaiPHG7|;)PxTf>=7U8Kc_fXH0s8CDv*7VtJ@V@ z%1ZM%T)vcar+%g689-aiZP%?oqb)w~c_z|%bEEnDox=@V?9HRCP9EXr$yYSMhwRT& zS+_f&CUQJAVtM6wZ_0Ud@2in-87Q-$-u z6#9C6PuKBCC3PhCTe}oeMv3nFZSZb{QG@f_h^%{*?`UYS79R#A1p~~T!+urJ&|G}a zXeIj&rdtZa{?e6Fgn@$yP7rw^-X)WR9-Q8N0a8s`puS~>_bw8gZ=hT>1B;y6edVv! zeYtr(c8=FzTyD-jcq27}@A zH;Y`liJp!+kBm3 z3N}e>Sa>H||8iaB5nZUYIGpvuojLBA7HX*AjEX47pZcb1P61!^*0*b+HTJ9V8J4W6 zJZ70QA9RAb(k*RSf5QAIz3@-X&#}HG9f~; zz%LE#EfZGgKTVNK63}k2!r$tWHnI3TH3Fh(6>&afO@6ndqS>PRtL;JPiF)MF<(u?K-t~j`#QXUYp zweEKmDGm_XX-XvTck~N_6Zw)AM>#`P=&uBhs?a{h$J~{aGvV<9hYJuR<4wq%G>5dOvX!aW;V$R<=&C}q1>Nl#*8owZ$tTXBd zZmn#kZXdXSXO1Z`+S~Ib5_TH$!RH=?=EsUYaL99&l#{!s!8WiWJEm}=t*p)3OGyWn z4x2@&gI)%Rq;p)y~kkMTY|>5m@y*Z8c@EQOj zepumPKP)nRBh$!R(nU8+M-aWQL?U7*KK@0rb%0mTjG7~Nu+?6Z zD#$bM<-$c;FbN7DQjKa60@TD_I$&GA;qjdm4!t3(x#YapLDrAz-tbOml24jB-{u%L zUtIpGeQ_iG*K}_bdBfBCXyVHE7+)GB7(yz4>V=s3N17|%4KNO=q_8ZK46^loA)RLr z4#5rd_WzQ8M0~h}jnF+@E;*wjHo3yuam#U&x%zQtB3?LZFhg}@{NU|j`3zo2R*ilq0p(7f8Y z1g1UbBcy0-F45V#>THArpkDz!9baNyke4P1V5cgSo!oQ<&W61oNv=}Xa#MTrD*`mv z?4IN%17x%rgpBH8XqWJbdyMeG=m@GPkA}&B^(4?>8oehg!7jwB37}M}_lWt-*Hr@- zM&E{}=5rq=8R5(&(Y=DICZb~K23sRU7Z615+C)}IG7-66l&I+3QI>_obj3r1r#e`p zERP1rWQ!2Jx`yJO;RDcyffRKoFanCCWH$_{dcz7u z#F)wC!SY&F*tbTA?o#H#(q>hdW};4^I>$=7%}^viqgc*0r%vux^)A6NGL*ZdU}h^X z668gOxk1KGT-1Z+2yTl($b`biSs~0lAyB@#IgJ~$IJ_xsMDh-H+37i9GA(2h@OBp- z?}gd)?gfmEWEibs-#jOQ7{;lUjqKqp4x1B#(01RBB5w&PDTj#BZ4IG2nZ;(~7mKk$ zhQZ=zaf+Zxd`f;;wC@&hgk<`}!!!%*p0;)wZEq8*Sy$5?v8u7OL1hmY-df@%+!iyw@L+A_(U7FF|0U?!{{Y0q^ zZxvU@3g)DTDVcp+&zu~DNA3`+bMmKgG413HH}7|CR-l_dzt*Q7zxE+{At{b1NF?}O zKl#C@r))cg1%~Ae9Sd^ksOiGZpnTe-EjNQ!zFswjwbTo^7x&wUowh>BPP@liB8X0PO?lH$*4b3U5WnM&a>dQWx=T`>*@gsANtQRe(Dvdu`u{ zRIMa5*csFH&QgdJkr5g*MLTPrWajYrREl0scFxIBmBb`HHnP28SY(SU#?Qu=(``pF z)ff4;eqcf8@Kp4LT9*g^Z~1tImp$p_>Zojrev>@Jfba5zf80dw!CXObcTtJ++Mj zW6RQ4&D%hv4Xt>(TY{ra{YSbzFP2tjA}%)1wekwJQ^dn$eH%Jxha0*t40*#SI7TQ> zE8(9E;{DQpEbyM{HTIcWlVqag7xv@UJDfMXB-=B`VMC2WH}33a9sO8@lQxY+>h9$+ z951QsHI1bW?G;@-Ue-@&nkd%2v0T@%Vm93L=GoBKid)C4w$I+b?$G^K{qT6rMeq6a zZ$A*f+@MI@_xEWWd@?hxJ$!-qmZ7p8?@BR1-J{i<6R!kM!`g60s(m$|Mfogwc zaYDb)w#grS&FveSDfIQy+!4V#Ves+B9ag1iq45qv_NhZm5VQz-`IHW z_THK;~`_QRmk6d z{C4#0?&zX~1K!>4#Ty@}Z1ADCh^A215qC&vL&#-9TChVX8(aZ;KRpH!K7xZ=6{75X zlNIXACK}3(QTjpk*We@`&_gieU%RirV^Rat-E2fW>mSI~jES7TB3J(>)1B=f3;chY z?*7v?&EGJo|0)*#(S4mycYkH+2b|u8*@CsU|AwXiPfY6nU6y{WUeXmNI+P-KEuZtA znb>1eg=Ki-eFd=5+gJ{8Cq=@2)6Wzjp$1V3sFar|1u7ly(t!hV5yh9BevHB*l0c`o zb3VisGbfYw8S5Mn>6@i!l^PY~)Kqy4(Y!3tDQdqYGb-7kpC3;hUZ~hA=^H1WDu>nr zHDe^*iWr!BwI!xNHKby1Wlksb)V))~+|&TN{jiLibmPdwXVl@Osb&fb&Q%Hr^9c$A z;xX<+ipjzssA@iXJ60yroeCEDg`{CJsa`2EycjiCh_@P+`c;pWOB@Mw(UpN{@ev zTN5|`Ezs|I6A0P14-_);2G*`BqP&x6 znWZ$g5NiMQ(Fo=U7XxB}i9}cwIGy)XG|6j3B;0Qz3C1W=?UIi?j{VjZ2jorIt6V(U z=b$0DPlifTst8m`1f!D*;*bgl9La_ze~4Uv%Wdb@rJ>yVk{KFag@F1Q`XNBB3%}(} zq`r;f`IR?8Q0okcTz#*zZfpL=Z6~7ZJLk5S`X!ugKo||8OH~OWTkywa|G;g3db96O z+;)w(Ol1JKUHV!|<&f(6H}Y=v(VIJu?dqcu#o%YN5iwk~pMDDJM;whS^{X2|-b5MW z^Isc~vdtC%OZ+Qu;*V7(K1&}UsI#QncN*x(i*@NQb0jM4?o~OtAi5bsz{N$C%mxv0Kuhf-*p{>9}W6)tPlmA8KH`m)n8HT$%}|M&nCn4wo2M zLib9}mGnYa9gDV*iE=(-{p+P?;SkaHr)ufzpZ+Q9o{(Hb0NjI>weJ)RmmP-RLP{ z>d|SJsX3JJ^=!E9mGaz?knguAa&BW87PaAkCtx6I{PhuQB_Z4WP9@qqQk}|IK(weR zaIE@h7^y0)d5}QuzCOnD{j;kolH_|=Z^?gH`eaWlm-$nyt-Bp zxN4O_ArJxrWAg?GP6QD|J!j~o*Uzao5I!;yN01H7h_T46TJ78dBT?Y+OMlW!ehY_q z9O5nl=p{lkA?IsW+p|!c->!C~Umse%@b_nZx&Da8qd)EnJ?vfFm6@A=y4uNq?>{%< z9T$k?aR3gd2thCQ7gCbZVYmWDfRZjv*7LK-0808FMMj~1p_=T{O@hYzi%r+~XDW`C z8aGKEuD8^1-vUByeyu?=J480=aAj+P8+Nm$^v>2GXGI23(!bB%b-29`SM|L9e&M1t zpqBte=Jz$od679=gZx%x)LVfyh)vMN94qpY*7}^v5bLXx7t+a4cuFwADOk5GdYky( z+I%SA0dQ1IhVta(pr`DORBYLfD^z!21UGam(L&o})ni!)(j!_s*qb5CTJ2TpP7IE)l@ehn$}XDjt(pRsew2|YHt9|e zQt}YdkqAj*Rdnc)ZFM2@m+FXOqnJ}is=i9v>R`EEi@`Yxyyu1kk4B@T*(mhXm(prg%L?bl@?C5vXdjKUptyfzoK8bbMN?jrEG0aW+ zPvHHxGOsj-d@^=3m$d&O9Afz9^lsMvxssmxS0#Nf2dYz|^h-&H#g+U;N$(qt zzqyysDr7yME<2VOS{2Y6tf!&VH`X#(To`X=acjml z1Mi}(LOd2t6(1tH?{W_JE>`tBK5d*5aLyCTG~>Y)rCNdkSm5h25^$NgLG%EH71dvI ze10loV*lODqzoux+iXCN4^`+{Ooc|=zpIGxQ@jGm#_2z$?FX*YR_8GlWoGSn&J;28 ztN<*`B|zG?tRck;q+@@IYmP({ysgslV z>(qOmZ#vmd?#y&WEloG(r@dhn4X1h3nh9*n0UIF4r^d=k3?~5p`uC3^(E1xHnulCK{@BJ-s#PKufK713!LEdGBqGTj z>}hF$meEN?H^n|#V%o(%!p5o%heE#_?FdqGT6RRRH!TdO+mj%_JaEb~FM_*$q2{Ks z3EnP@bpU*a5tc*1fh8py9Vp(!hprVE`(2lSb2`4n7|Ty#yvRco-(o&J^+04Y4)yhcifAHdWq~9nB%M}}9w#*3N=;__+nId+aJZ6Fyd*inQ z%O~S+?1r`cfdk7c-xA!i-|fPc66A!Nos<3BpZbo!aORPSI34-+5tY3ZFbiHh_IPi@ z&?5W^ec|lrsj@){KZ&Jl-{sOnuYk|0SAO+_OE+%5I(W6tLjd+!8Z-~K*FWA5@` zG*vNQ@vwGNp>m~cid11f`7Y)DHU*d7rIQi8mhUQUHYX(2q{iK(s@NHy1;~d5t(#iz(%2g6HBlAJp z(?7<9f7ex~1Y1|J96;fUrz>#60Kbtt1YlcGpjeXqk5Jaf4J-u2!nfDU^e{*;WnILKf%L*%3p)2ho}}>&{)`plElA5YGT7@!*0eY33LZ z!3MAL13jsmTU7|5uF(41C(lF*BA2q zW1z&^^P{KxHw-beVG+mf%bL!b;~7IkMY2hJx&eLTPg`q?1xA;3MnZIQvA&k5>$thb zMjI6Ie+7=7_)Rn23`#Y>mYNN&wAV(HmHB)vvn9T!)qJR59sRZ3MQ2rMU|PSv^y?EZ zsxnJbxygpsNk@ZScT z_*bV7uE~m6>J7PltI2s$#iOtFUG>y;o=llG=7jI2wWq(;HyB?5 z`#-nrU}purG$z2hLp`%jb>W$nV=Hz_|IBB(XN@DbEBx}c-halm1rs%RXlBIBY~1|* zeD?YhPPf*FolnNtOFES|g?`NfBp@(IPyn0-x&Q*!bkKefHk48Q=LJ8(MDf|l1@s6f zvBZm|GluH>*LPDR*(x!#%5F2oN%l%XM9L8kv?3_Q+b34^?r+^MgMxRAtUDJI=-BR_ z1d^|%iGW0G2VhsqIt1Yck4THbIW;0nZMUCdqzEYqOFKLvmnZhAd~M&lSZw29sB_G< zDv1ff9bB%Li)_H!8uYY)VXR{l3Wr#!i0L-d!cVJI-`DE{_<%8X>xfyN5xIR6XDm(QE+ zU)+WTr|a7eKl=aVP;fU62h!SwLV*XA{X7Wo+d$(VL3rbAGG3%l2ah}+O1=ntxjxnv zwKebY6v7(c95fC1hZ)<(xIi~nuTXQhlBJqKoB|{2*T^5RI04K z4qDT!C%I_;w43{Up&~$DJ;aZD9dIZxOjW+Y^2c%>uYdC-r`_kfkj+C#ky8DV^evC3 zl<;?tOXl6EMVUzHC6DP=BOzRavsd?gu1EHbbkRD)>a!p`z@d;{j%%36 z32O!<-yVdnc~uy5FDq0HxElVp9LC*=fnGk7eD$??gXfTTKNl+Pz(R#CuY>7qp;Dkt z3gkR>vH}YgbxLirfQC-avj9)D7KNuw7w=hs=bk3jwT3RiGlznMCXJ0ux9FKep;m*= zvY}fN2=Jt6i)8$4CX+GnE5Nhl)y)YZ*X!uschg{X86dzDlcLG0)6jzia-J~mocLV$ zK!7KCYzpKmw+Im6$?cuY2r1-I)6isyHVi8kEaW$pZ8tI;xnB;(9JR56hbIm;W;_@Pa7Z{5GQbG$M#!Q{8jb; zA=WrbCc^43UJ8wS*T*1c994t8zop;lJT&w9@SAVTq%Y4K;9Zui@2M4~ z9-ke;MBFB2@M}-^2Ju95Xl*=b@c7i5E^#gXXd!BLkjyt4SEuRxV)pb!`FT93irYj_ zqW{`E|Hy&vZJ;sy*lJTlqT4L9#Ma_XYcnLj6HPx1#Di9(>4H|pR-qHti5I_a_E%b+ zUd8$uYs_%!qXNVlOE%U<>b+D@7hYRm{ph*f58wHL!<(aYLi``a8W)}2N{IeB*4W-q zd<e^tewUW$ce{hzVM=5~oDKfM&cRYlTA@Grmnwu*F|TF$GY>mu6h!=HRxF3I#n zzhaFwf`nIo^KI!)xD+OoqWHokGpf$k%r~bB^M1vH^2Zib{2mYbweH+Y@z3#~f4-Q# zcsX~>F$%+~FdTp)2V`4g?Z+fH+3zR7 z2apoPVxy3e;b#YSs=~tP0ro1H0Z|UUwj6MchTvz2sE!25X@tkqFSsaDwg%DvL)&{r zHT|}G-U$gQB$CjJNJol=C?H7D(0lJyKtQ^HAYDW68amQMr1##D(0d2z7?h%bhzg1z zGV$M@XZFnAduG=Ap0Ki5$w3Z&cdq;TmJi7_gudS}{;HsdI*#*bBKUp-&)pQ4+mjj|7C=^t#!2hdjq6WgL*voMRcqmz|fYB1=Egv z>Zm=vq=W_h%Owi{Tm+;8x&P~jHwM^Z`9D3pgHeha|DY=?Sl-FA)5nQc+l(xP6)HUY zbEL6XW4-MyAo7=sjkPUN=TCIyg&#J5uzg);`Tt;&nq#%@`)6y#( z2ysy;jIeq&a@ak7OI6DYC~Q7;0ij5@?z0=ij-6~Df9&)&S^TA=R?>Rg>@|FJy|g#5kSpmi zz-GR4z44Ob(B9D1jNux^(W_=!Wk^NIiO%m|kO$qOk7tBr#x5pRR@~+_KTr;&R86SX z{KxJNE!p)NF)Ljc908 zSG`g_Q}cPlxga6d`Iv24SUQf2l6rutd*#~mB-N{5TKpepHMXVSmuuYOOJxyPjNkhC zY2lX!%a0F5s>q|Ub2lr*b{TEQwy=TBGZNC;J5MC!MG{>l2fJzB{P--udp~~LLGjK0 z?wBgL?qHt5B2b>*bnkR;$*`wwi{z61%fq|msT(4Bd@96lq*Q=#!J8T`I1*{n>kda z?@ZHNdoL=0Q)P(OQtN&2V~xiozpNEQv^jHQwz>p1j!pns!53-TNLcB(&(L-y^C+6R zKCw0bZq*a)CS{gpo^C|T;r4tvqO79L-}LcncjDQhVm9xOueYAT)~Ru-jGy=a2-dth z?KW!)_~G#nMO+fDEf3Jwk|qW_XahPyC^G^v)V3ZQ6iRDHid+gXO@!S(LPtu289iVr zK(Y_A_~>8qB#InQ`jP%^Qrp(MII+#5fBg6kxBa-_V z{icXZDZ~GrBCgFuB+qc8Oj5Y*-qmcI<&+!An|bWky!DqKpZ>2gAvgBMqQN7#Q>wjHz1mz@>lKd&6}aU}WiP3TJNwn-FmrBRBq z@J31!Mf~>X=-nDoPVeVcBb1&p0OkWj=el{j;e?vShdWo4CmuPysVAw?6>`hjqhWcxSlSqpA79{OEovzA@ZHm)%cztmw~vdA9*p>{y+dI#CRnh( zVjZ)Zw|=2PSl)KX$CNRJMyhjhz=`5I6WJ4ze*L70YkcN@P@$&e2JyPaltdUoL``HT zWc>BLR{584KM2bYO@*hLzAXF1$NdxUriqp&jR~v=L@F=_hyAsG_s9?hChos8w?g}Z z&uWxz8pdnBy17Mu^VdxS!Hc)F-o131{gIJgXraH3vixNiU2&)0@1teZlYdvEvFYmn z_+|eL*8Dvt{38^-@<;y5FPr)Kk1^qIzwCbyiVmE)NkY+osz%Sm9I+QwBmX*SeqWw` ztI@P-up5L|w4}%-hUE=~DdWHUW&b{D&VHXX!T4|*;Vi0i8=O4bvfcol+zK;Vz_f3< zm-az2brg3!x$>l8c47{-2&DH{kA2i<-E+)ykvv5!alsBnRJYzflnxjn-J^CRF5FjO z=iYXFY7{^OytP*p50|&~AZ-~LqLf0la@ebnXWx=liTLW(BsdM{NeT}Rs{4^B;y?5F zWCxWK^%4>|rUn-I28VQA6XLQtWH6qb`1ld`R{IvaXwB0Q>38)!hQ|=D{(~hT4qx zvAm*Oyl6j)_1IUkSir$E1g-ydH{h{kq1<12r9Xu93#9Wg^uIqJL80?a@tpl}0y5zv zO8*H&{GapDc)M0i_)my<*n7=8lTk-xME{n$-;k@MOeT;PdXjK!!)9StvO63e~-XdukhJM65sGb2d#7v%3MTuufPi337x zx0U#CHD#4ARiA3O`Fz>ITfI|~#h9us-H5O}W4rTZ5dB%a_bUhd{1g3y^>@#EsBph% zSiT!lzBq$gT?jcny#~JsLn=krk?Gbj7(FV`aSLFg7T0=&LP)AMAR zF8-}#%T4&jRKIT|w~oK{B$x{1-r1X|K_(5Ryi%qmOMx$`>dK3&(E5;fDGgT)zZk05 z4HpbO4yM4TIF=N1V8>}+X>Ttp*Ks-hY1hP;jt%Ocm8}~I8CWt95)VLrzWU;?Yn1DyYH+W~ zy>hRnD^6KBl*ya3_J?TbC62~LF~!M-Q8(U4O|Qw4J|3;;-Ys+K*S`y`p){Hs^?sB2 z;Mb>l8>b7QYc4b{B)1LOHC&94fI8Z@hQ56_$nlq%9QUm%j5p9UP zJ3{$Qf^bFJO<@Ko9f}6r(6FLV&O8T#SmVfXmIxv6%MSwcvbRb!V|Rw%vZX>4uohbQ zNVz;JMa&I|*mVF^Bo}F=20++zJT(?JKmJv8L)!Ivd=4_7Pf>YDC;dxOk=#1t&1P~m zmI!2s%u~3^uDl|bkdV^DO%HV#_${RGo?n47?&C~2w}4G;>z{A~f2uRF1$#+oa%!{? zfEKroMc!3=J#ih7!~$du`Yoi>;9u5ml3}nx&erUJ^Dt>qW11jS18OG$Nm3-e`D~nG z3J<0=D#UW;1l=D?6j?xS(FeFy=#e7ne+cOUDpd|vX}x(o(&zlNCg+7xGu8{06ivps zojcQ+;_@Kk%;#-Z6JNYZEKvKc&iH+L$g55O%@?buRBUDp+HfdGsOVwSlfVc*I|?tB^{X){l1}G9hwM^LOjlQ;KPWDRJIeB_ysk+x|-1w#JYkHej45};JCXFx3)v*#g&DvYyeKlR?@7?=V z_1a}DfwWCH3E3U)qO0f9H?MIiK*K%$h^=!@Th%~BNQTK0j zeW0$2z2`jSN&OYLz)~G^XZOz1)KNe7*UM-jKjMY2X~6C)SEEw{dM{VZHa-&hVrD66 zPHFmM==Q-rJ;p?>K;`CD;-O$-zq1mLGA7(8&^!v)V6ha$k^Y%i z(HVoIdo|RI{cRfGbyiy~TOF4s>`5h+3|Bt+D$YT*Y#M5zuC}P1^Ut2`HR_Z}k(I5S ztYO}L!_Hhb2?K?#20AzPaXH?#$z6Io^y_<{JpW#N$d{GAv%RYWAs%a%Pkrr7uvXIs z-v%M)=LRQP2kv~V@pwLQ5{thm_T4T8eD2|x?IjxV{KOasLB#r!)E2y3(Ab{Y@rA2v zB$(fm3Tea6#Yn;ea3A0r`RreWqi)oSD_-z=sdj;AqbD+%OAwVx%VpZcKyMvSqGn)V zwv!@7;ouh$rG~pPCD~v5K>)8s_7mlUhc_+An?s-dz@kPl5pO_uP^7jq*6d0}DGeIH zV>vEr!!v2xIz@|m8r{V^8@@|kQywzs8_jOzoTs(4jG2zKIB@zLv7eEP3W#LgcY3D4 z4Jg2_xX@3&);p-a_a?CsWKJA=Vu-fPA=fdJq66X;&!mpVygig&GL8Bu+*rSc4rsc= zdh#B6eHj4iwmMrVb8RUoex8WoT3Dl0P{$AlW#$_?C)+voJ-+ezArpfQ6b$mQqzs0V!*dY831mDw1Y>#Q z3P|$xO90%G+y{*$3u5jwM5SZRlo@P(Y`It31>dCdZSXcU5yl0C_m6Zw3~*^!L>wY3k>~WxX)_FQF`qfJx$2!&HE4 z4q~#(_b|t|^ZU655>`9}zDYzCRilp1aBvJkSgXi3TO`okhvxN`)pu{(O-?aP4irf6 z_HXhx$w8#gp`I(EvQvX{8oggA`INnc&QGBBBbbwN0NPlE1c*y(LujfP&96B(1by(W z9P)#R2sq<8!$RmX`thDx|Yv#$PL(Pk({T@Szbaz+0 ztCk3`76lBvM@{1a@t80iZ@?xF*@Aia7)xT7BH!V0hgIIEIf#IFkOf@yc^LAJuE%vd z*PS|_r`2RU0N1mNzFc%+u9lRIkr8ClAzzwER0axHOR0N83HE6C0w3KW5!IO^@&Fx> zzZH~a^MFglh7)2RY{hu-jGaXJh`7$LvvpkvgGL_iL!a{n0I`uT833J@Atqcw@o0Dw z5z?9pxNS+{WEJo;2T>+VG0=#bB!WKa>i;l^(pGpPe9h~&TVSGsw?&Sx96TCC<#UP# zWN3*##v#+Uf=?|eN6>Inf_Rc8C6L|k2Q~>afrK=pSeyLf?cDfgZBOo{TW*BJa{MINq z;R7{8N-%Kq>XYQSll_#e!AM}Sh#!Ws=vr9OVC38H&tAix>ZT<)!9XK9aVNM)MMldD z(EHO6`f39K;2EBb@-u)Lo4sBPyhG04|4;xV4cz3cC9(UO=HlF1hV(!{381Rax?&e1H3anpBDre;C_jy z0`Ta75Ly6cEx>zy5G^53(+|jB1yrI?-PQ*T)B(hB8xJVWiSyA)Qm+mQMMp7g`~I3hCRvi3zJzuXP(h8TP3&Xys>uDVAn+jF z$Qb~1%~;QIF2NNo|uOc(of;#L&>i|$EGz^G=x#6IXalp_Ch=V1?+aN$l72L>; zD-;irWv2*XhkNA!Loi?w9Qma~K&T}}A_n2J52%eUNXjd)ERM<)6E_$@=Kn}}To_?O z10OC8_<6^G%VK6r>j z6+{dNyyS+yR0VLcq{yg(d!k`pXc&MUZp03MvJVZzk!Rpx&(P%-XF2(o0MIZDq8JOy z+K1-i5MCH~7zXaS4=u)#dtzWtcz7fMn(GD>u>?fsJPpG_3*6voZlw3X901VBeMBS% z>{$g!3?`4l!ioVD?^|eIE0DeO)DH#;nh=BEi56xyd$(W!x6tRZwon5(B3hQP@O=tb z90UWS@GwUC5uPv(RKcs@h~cJs{*-%t51WnMEnfgdw4mk_knC16&j|=y1{y^q&&9)n z@Dz{Hu#5@vIxT1jJB1G(9*Tx(U}2GHghQ2XB7njRjkp|BQoUcBMTCXA)%&mmg4jtP zK}6y}&v4`%I6x49B1j8XpapZlK_e&NL1%98Cpc)W7E}WZ?ac!|nSi?ypmh_iQq>hk zLU;FceQ&wNv&^HA0s+C%k$zQ?AyJWc_bJA-2;^<#$^g)`7HV$-l@0(|{G-(I^}OYGiA$%lxLrN{%fqA~({ z2g$4$Nu|X)DuYXPgA7%GFi9Focrlq0EJ&2;#MEyH21@%t`6~xOVF^n@_d}dv6lmDv zCFI&$#4p05JYq!o!Z3XQx}29DJ?<{!ewJ0Worsn@b566RmzAS~?WT2DpJbfR`Dmdg z|ArjY=bUgjpufwE(1VQjpF=+WfS_+fjmAQPZ_+iOqm1aQ)p;2iyGj#fUdmRH4Fe7B zeGSz?pd@y>^GcZ{b`o3?aZ2cG*&pj<8IO#t1jJNfaO3;m39>o9Ux=tPr0{fr&Q@46 z^NS3tHL%E;8(VV?n-P&bA7M0k2)g|(@$%7AfA2y+H_EO#q$ zJ9FrtWkTj&K_Yv{XCfmTzgES}8sq7J3H2G*Cnr2q)$a==;UeZ;9Q>5a=XTI|I1Vz6 z^>HOa{M;z!(LVmE!>+{GQ(}-ZVQG&KW55$^zp1}}Zg}u?+JHB!Z;N2UwK_^HZ11N$ ztqS*Q_5LzJ2>AZgpDBSWE{HYy>d(tXofyE<%{zRJ<_uS9?n~+2b_la3Q2HJv!*LOl z_?g#nE9c9}N7JT$;ZfsEfN5OhK40i@CLpzE>BKEYQ!ifTn@xgCuEZ*JX1Q@T47ny6 z_Ub~?CPCCMYf<%T+T=iFi<_6_2%Wx>pnXne<&PkPUg>g!#7fCc1}c52K!vfh2LIE~ zzCvjPR|4|!vvpwAdOQv}jrX3#A@eX$KN?u@2k*yte+~yw`aO!nIUxf(+1Vb0W!uEi z3hMeoW3Ibd1;%f4qaYXz;slL4Zd+UyCEDkN1^ZKc77hC~F@j#1@nuN3#ycvT@3$SQ zPXBA$CVS28#tzAU|C2}=*(C0F0oCsylf{*uk&`-pG#+r5(mw`rR5d9?lgJz(0ad&= zGe#|?p@&EUE60((9^K@As)0S?7nU+H8(bKmAUNsiJ6@rf9m`w&}nN*mNXS?yN1L7??sAIFw zNq`g$?#7hxJ8q0$c!HK4x2K0!obNL~oxT~;^yEf*&fb~%IplKm=bSLnDiUUxu`6{@X785 znczxi@N=qr_j3%AuLf}K6B_B~bKno3h@yq|ZeiiiM2oa1kt;=?2!Z++!?Z)qj(OZa z`Gj4?5Rw^-P=ttcE&I?FKB?uoutySU9fe7TqF0#;j0ckeTxWO>(2K+_L8^fjx1n;+ zYhG6|`%u5eOyy?O0s(oq2%b^pmGX+-{iffER;qoX|N2{Jz>D<=dNe(~Wh5R$=%PVf zxb^Q4@plSOE=WBZIU)i>s7wN|($91@R8mL~@z7`2m1!C6eLn8Yq1bNuo&>yJg3|J8 z1RiZ)FdtAG$0_+)%4z3vE2)*}mqHe}!(D8NIT*}XC8|4J<%rloa6{-@Bv~2K$`H}`fg7w?psHb1$m4UIv zn0-tZ3y+e^@~jASQpS3xs}gDY7|Lc5a5U$ltx%tC5vX>cokPF@jubda&MtpdEcfX{Jn(<@s=Zkq&G6;$2oVNL-oN`&zZSXZYDn)Lp z9`<0ZE~!_RVuR;I4<@?h6Nz6rB6$iB!57s%qiky0RKVAj*uO6ZgCPp4MXiWbn;PZM z!p;~Ke&a4A#dp?_Pf)h2Uok?9%S$o{^UUbr2L5ri4-uUFM#P{B41t}TcPp=UtXjD4 zs;1P&@jjG1k(i(=WSj0fd_^nM^-NQKlFK8MOA!GGL3GvB>Zl6FDakH)n%3!#s!3kc zL%%tmh(Jk|yK0HV#ZFvOyAw96!6&3krfxc3Mwc&byN#a{xF7c=f=|g(cS=blQpDKy z(u`iohtSX)CJw3rH=-O1dvBNug`EOqkbG`l#_s)IE_n$WWH-#c=4=g(te3zH8Y+YN zjTY7Waw2yEzt1x8>|PeD5$5^G(?rCNxH#! zOG#Q5&r>flyoq=ozG(G02AOsy5#eJezGEno<+4`P0g)IljtT^rWoc>{JJs(bRlPHd z3YXXuQqFF&uAA#KHE6iu>1)?<29exPZ)|GbbpsK^@AqDc1=xo^#!Gk%z7#%QfhP1> zuJ(#H?tiYj4Q+3!W~*Nm9@Bh2@pZ!R-UaIxE--^}l6GNMJ%Z)UNn0cDR=aoddkdU( zrA9@&&)heQt_4Esy;r{WP*G}&thhqf`aY1)viHYEw)Rm`p~_o7YxVB8|9q{;5LKt# zd+*HR%V@-H&xD0Mv2Wi#eIIby`<}YA(h||n_zUb4pJG1j3zcL4`tADV`$0~YpirV* zaNlhT>QQs&>zPxWP0~-=1m02pXAi~Kj4$JaLoIr_(5 z@K8LT8_+GRCh(5*Jd3yYkowzrAfhR|*KF_>2jx_1$4~sQV*$BhzUEW?Wu9%un`DYp zQ_uLHu}yK3zp|l6C5oQqy%XYy%5s&aNSYP4U>v@oVC*>k#370C{0dBCu~$1RUznF$ z&Iv7cglz`#o!x0vG>9ImDy?-Y8!sXCd2U8W*ta{|`ER~{)^%7_c$$F;x@YJg zZBXmK;Y=R1by2Xzpz7_2xs`V7QiuDsK>GUfAy!25KwpZtjV+zw9Ftj`%j>58(OF5J zWP?wbM$5dgbL!s*P4_fP?U0@{nmly|JBx^-@s&4{=b-anqMfSn(=Of{G38dPYT<9x z%=|xym?h;JdawlwNZnJiIDInQ{44pq2MA(PPoHKn?-KKHOJdFb+*nyzZ)r#d#1wqu zT9i_n7yjYULQs3YNBZqsX?iDds`E|GD(9Rcq6#d#&xuL?7*LEE_ON6^#r4s?ylUsg zatYSjTgR(#J@Wlo%XI4#?}1_Q`%ihd=7#wX28TG^6Y5!Vd0HKMBU?RcjxO1LEFUsW zadAtt3X{Ly|FOT!xjg-vz7707(_o1dbGW&{JyrSUQFoAqgYdvTRojKJ2n}~boa*~q z9gH=Pv(1E)C9Vd5b1qzYgavDum?_mF2%K?3FL#pgUoz!`9-ChY!7*uud;H-x)oz6dkRpM&D!OO7xyn* zt&e)(__{*)*`lYPSMBX@Yu4JIm(+*68gxI-m_ABq-(uBl>TRzmGr?x@^ZC@ zv*6R6l~dQjN2A|nGk@;t9v`%Ss9>(3G5p}&NMTS6kqG*fb(vz2b>z*X`OKPqc$}U}LZy8^ayb(XCO{rDgtvXk5orRl*^bZ+I#n*#rBT zfz2qvzV{cUT2K45LjWAaQdt*&)a{HC!)iEnCSjx&5j9MCk+6VfYT>fgm*sEXNyCpj z&IiCfUgj+d$V9SBvx5uzPTFWMcX7$dumm)4N=qd;$wU&Q&dbRxa0N{?WnS3rirAMP z2$ESn!JNGbX}h{!eMyhhfm{NB1qpe|Y@Bq82up9tN=xR!E+xrMPv3&}bPN7$J)c*7 zJ*iVjt($GF`w?ftdxzUtIS%P0S^HdOKWiDu06|Izaiz;t$rA_;4 zI8O{_j|@Hs59RC*l3u$HKwioXz0^~A$ugA7t@46aB{yj(FK;M6Y3M#t*_jbqzCKib zpi;3rSoU+MdRHZzTc!H4YGs|u^B$FeA`p`a&cOPz>dZ43BS3Hh>Pv)o6NkIs4|g04 z6Tl;#v?E>IBi+Jk9g@+#HY0tWBmJQx1F>qolF{Axh(|`S<^Wi1nM?#8>T4M>PCGiu zJvt>kIxROkqenW1)xD3@=0eqdBS#mKMi=u&m+D5BW7TIpBOVb#!YpxTCcB+LB~XA{ zgbyCN9t&N!8C|DU-&7mjuo>I%)R+#{m`WO(T8Fm_kA8F>`ve}J6^`|R;of+%3#>~k zeI^UA)X3f++Yiv3i5;KmiI}*o{xEHPd_;5dVC>_8<|$Zfk9OjWWdgu60TP)Q=hocA z(XM4i9@37I2;KLUB68>9T}@hnRayZ}kS@Lm#OyF)bmD#*#GL>QY$DNqaZc4G|k|G@T zr$l&$9N4unaS&&Kt_M*^!d6$}LWG0m^eJ*&PG4`~vL<(VBoG}t=NxXouVb60XJ;91 z55oz%gp0U@lRlyvsH55&;cgGHou9fgs&`8ra-&^OZ3B)y4Ocsyw%eal?wxh^(NT*F z7g^Df4V<#uhXT!Ktkw0ru^ftVu(!goibAG2TG%oPneHtdkZ5-X1Pt z8-5=>tD65>IZnqe4RSdd>bNp{pD^oWKW(W$Yo0Y@&lq9;QP-y(a(BaU|3KX~3#N29 z?&GHE!4CbtK6W1;VSfb4W`ur|oDaDW;W?pt<{=gl%wyEf0u4Tec+W?9D3RVV;iEP0 z<6~rdBzQEDDunsngAw~fhwO9`|zjK?QuPk0T zH+exyJCA1(y`c$`H$u*8hR!aOj4qU}7y~~pMBBeUid`()(5RwYs^VFymNLmtHmOxN zL2gVw@-m%~dmT0}WP1g7)d=QISZb3u@C7Ws+F0s1Tq2M!chW6)ZJ5RoHM$Q?>-Ejr zz0|wH%z7`FEqFp>q#}lUmmgr}M^_f3VA;gu@UeWD3=A-JWhIO~REE!dR()mGYvpyA z`RnABxvZ7>{FSBpmF4o4m3H&U33HX@4f7?bl{G2zDG~F@LzxHwu8kT1#I8nJ0@SP% zh)Ko7W}eSSW)V%RAM025%2z*atbS^b#0)*#I($Y3100Clp_0Sx9!BE+&3;Kv>gmV? zs{d`j6vJfHJN}nF9TyMg@Xra4DAX^?J=5e=iT_Q!_@fL6lYcItPur~SK3Q)*m(LYu zY4;=8_IUxbev+@Y zP#x6fmL;-?WV~u!D?@W4ACr2!wvCMF`uYYyu=bswBCE!4x(<7?Iv0fA^@deMhb_%} zQG#eKS*bwx6Ccc-Ah%wMGs(VE(HlFu@xSYk+dm(G)%Q%J+^@Aas7abk13n_s1 ziGjc9ey239a7^ zcTcep{`LPPrSZ4XJ2s5Ck!ooT-b~|ABZa^13w$r8I{(Y)?MQ0ZLcA{K4Li5@;a=$J z5w*I|tG0u!7j!O|W#L*Pr^>}H4uKD{%-9>RMab527xOar3ZGj0J`~t?KgR2A7ZtJ2 zY2H3zOm|c_!kn%5$ZNJa?kLt%9DwOt#e;gw8X=|n6+lU=GP!!{OS?6U{1RGaBMLFe zwNnNsS~Osw)5iu@b7?9{O`HU{as4fYD}Y!)D&LV$+F7MDgUR(^#bR40Xhev(?nc=e z39Swwz`4@@kbe0SiFgsa-$ikr1>3r}*Dpu)^#*vqdhp3f4`E=NdB1P))_PfkSo!&> zS5zGmXe#Us8hehnD5s0!5>oF0Ky>&ro`ND@s~aZx6d)wWpSK@8$q!4a8y9Gj)S5z- zYlXm7<|c$^1fOeB!O1#*1}pJr5{y-Lvf0ku`w=Nw0;V zKx=0gu+)!2>Kd^Dq6eVWpfjQ@wVUWIDxz{vc|0mwkXCNpb=;r4&8{?#1#NOf{6-Dp ze<24@;dU3NE#w8u(iWAj`T?r^!C^}X`Cs1Xq?5R2Y@=Xx&&NhZZGZKqcYA0w*!M(! zFz7oN7(!%^>na3mh*4Ce`9I# z_U6YS?W4dWnH2=!8|+I6Puf*DY-UA~mJiLie+3BSyYrnI&tqPBM|_=i<7WX#a6HUV%Bg&u~>fE9x$#}LRUIaqg!VB~B1)zNX) zZ~Q`=!T?AB5KRl?Adg}>c%jMBd483X4K(;RDS=clLI&p}04U6`?94^9yyrZJ&bwe- zO{%bDeCQz92zA7Tp8#;6G7yQ(Q|s_deM7yEgSK6NHfg#E3gE{h2B_0Fj)MduZlay6 zADA}ovQJQd8M&XZ1Jx1(g6PqJJIvFW3o~7?*GxE%u0*q2ktDV&?hNSY_ci-9H7^KE z4WyX)nhpqy5)@U=cN@~>_@-8*2Jz!*%ohUuv`AOuIkcn8 zKVdj>H6@(Z>z=06@Wnz17Ex+*&sy1(w{&W@x-2a5!&{Ywpfj@@4X#tW4qFRqK}h;W zH}PF824h0B7_8%S*>sFMx!5O8(=f6!<$PEWMq`se));p+wM21Y%#lGOaW>ttW9Q6YVfF)V@NTL*pQpVIocRN6^QMZQq8TAAiO=!?zZMAH*O`dD@bpO z9$>A)1D09%^dX|%Fs=g6u$+B`K%l?Jq;%10KZLiT|Ex`m=Y81A6RTe{uU#-j>)35h zMwLh)1XFi+$87jr8T0q$^=Tr7PNdMhCOAL zek5VLu9POT)@y%TFu-!kZgGY|`~xD?(dwv0$T_AQ`s~+0 z;O6>=chpOC6(>0CBZ+Ke`w5n}=jSA+6pO&tPktand&XQN8@2nB7j0>mx+i6XHOgJW z)V3Cx;SZDRyNq?XlzVB6ajyrM5@?*UDMqqX+=p1|B-oM09+#3nbMRC5OFSIC4bigw zQRcSO#j|v9u~^HT7{37!k4`o$gFF|Nbij2Rc;*)J5*`dG0AqPfXFjQ`F#=+0Veg>P zSPq@)4Tf?Q(<#2c@B&!~&x9mE7KIc1DUG6bw5{yEa6Q(M$U_m91F0r8`ObWOTMCQP40yX2eNtPWEpH5STZ}X$cPvbc+}z{^eZ|ZPw2&2!I{*N zw61JlCi*Y3bfE%rLhtL;si3h-OBX-x>~S;$2Dxj35c8^3SH#WN_ST6ui%M*h*!IB{_9=eHYdRIdcDkA(t0f=^gADBN6gu{lzJV}k6!1x`db0f%0- zQ&>BuLd|@4TNN|DNS=KjC!VNu&v^UzOh26u@2+XeIcf;wAyLWZHxyWvnQ-SVG@kY* zRmI%sJU`)g`H*hblAPt;RWBOYD#Qc*0stf;5mqpmy^9hrT?~WE&k0Ympuh!Q^n-f6 zD{lqOv0l2Ik8Ze2JP47X_PRBG)ac` zuMDEasCZBq#Wdw-6M`wzeXK_{xXgx<+Mc8D#JRn`L{yF_Lax7IkPy6~pciv~+2~pkD!)@U-M? z_@FieN81P%TvNcwSrtl_kFHoz43$DV+|M|sZ`hagbYug>qRgUNgchzt&CbRCkhbP& zO5jdPvS>8?u4Jabl+djmhl~dV$jX)_pz}f=--t9x?@9i7&DXWTXZ!~G4UQU-0M>Hz zyvJ{#LLQ}Skhu5ao-+F*L5P3h4He@c-Si$O`Fso1560^$Xw!YEjR)d|#Ha5XP~Waa zc=XVD)GJeIX|#GL9Z#n5UZdPP@_YB1n%jyZKqvw}!`O5eh|bZQ6-GZVPB95W@U6KV z5Pj}4SvjYn{ek%Rc}hS`gH&-12so>Gnv zU8kJ(PeaGAgLEGjWF{5R1{0#!3dLe+8$t9Y- z&M5LMmUmvgbYvNM+9Myo*TuhK1dFG!^nY5Qn}3zDcpyWEPn58Qp0@3 zPY++vy#-lgVewcBuEod)qK>98GnH*t<0LT26_|uC^yDuztbXbKFvk1XZuX@p#x2KS z=xN~@NFr0;owkJI&_{X%#?)1(+-Q*Tkb=|aZov&kfI|uT4Ln`{ZSjp39vd&UFVA>r z^U>+ireVii?6z7UWoNndiQ)b%@|jy$a`makfhb*;r~{rti1rDf!0 zlGI{p%*Fa&qYiB7+eu&!&Ub?9q<3hz#aXBMj_cbY{l?^*@ zj<{GaCgc6Hry|t0Zdtby1D9rRu3%KE*3pqKrY*TtS~WOZIYYq%iAnKnNv=LrG4toj zFs@hXcvG zkR>6EMd4fy>(ISt=VfQ9iE2B@A zQ|sAqU(KSq&4|f^Hf|$<4DMY5M|}$=OV7xUN;*ixIK_a7Y2Dr77J-p&owMs$MqFQ& zO2f+g0TZ(lakZZ6`nE#>^r310Q)iwf?!hc1kMnr|7tuhHu2*fh7As@{<>__H{Q9ndBd{hCxkoiT($)YilrtM78Yty8T%84|blACW7q$v}56a~kAVRQfm5 zGK_S^@?g6MU+i{bGWrb?@{PhAc4J25zKoDNXKXHWw#*EJ(+Aftb9>!wSaWW9$8zU= zS!I{aXm;|LfQ&e(n7Qpu+i@E?F@MyoT^;46@PQBQmwz}Hs-Oh&D zD#%C9-LQ${G6TeEkmXMRTe;ECOis&-qp!;P>CC6Ry{7nODz3Iqa-5MFabFpzH5+#U z6(Qs0Mc1b3fHSllGc?jOvYyU2B&WsHA~-lT;Q*jYxdCQpT5^SIF%eBs%uy6(&Ml?S zP-cK6h>Y)IZOm&}gGCQj(KQFN4)Q=(f1YIp910`heY?eP50Q%g*O+o-lQbt zo?7OsFFuc3d~v!^c+M)vWwGqzB78E@gk$MtIhsW1c-2PVrv^+=2JxTF|2^J>GrTo25UPge>NG&aVMn^W$u|}X|Ts2DQ6<&G6Ui0LKFSqu`H%z%JpeLq&lgJS? zKRBDq?K9W$3Xv|}hnkXO-+S!{N4oK?F|DpK@2#=_T01|s%2lz-LFN8cor-@9%_XAa zW4dyiIlhFknOLGQhISU4wyu-ruQr`mH(h^ix~)>3 z&nf=*4r~h2+AA5T^w-)8X<43L9|Ze9tf&3pzDTgY{P)^Rj7A~k$K}7E($O_0xGb_# zWv>5cO3#}PlIQk!>iGXVsPzBR6JMuM;pCkb*yM20+L68q(Ucu5Wi^L%SFK=a-3 zO@{Xf7)HgyP1dH=d8apEM;Ug|tp}or)C$s}OY6aD|NKrvWhBpGMXM!OEr(XUJjqV0 z`GXh|q9*^@%77d~1wg{JcmR>IaZ1T3OlA`r2?FEaYO3&25dfDcXSiZgdEB^yu@@Qc z0xm*`*71YNjFtdpH`qp^I?rI9ou0)Xpx3|4No@WFdi~eh>o*0=*(8TN-lw2IS_W>E zWAnWB!yxaAa(Ii4BO|*w{>2joidlLf28{)S%-M?_w0>fXv1zX9>4iY8Dl8y9+AqD3 z3m5J1vLxZ`TL?WUEPDHS^=3(_I%=1cIwn9a{bx{V#67Zhlh*kci&sy1Bk^_A!%EoE` z&it(jdvMb&Nh&qFz_d#2HZ$Z>%T0%w4FWAG zw}ZR&pGwAwdL9`9c4&Uc+QrOj0*;6@0OnLf`7wnb$eE}7@%Gi$w|^>y1+7S3LdI{P zXK8S(WN7Nho3VyJ9A>LJGQr6ivR5bKbH;0$We32-K14h?M;UPPe)>d<<(GxXY+^@- zT*5FL8&`hA#Og#M{Cz?+|H;6+X5Ef^tj!XBgq$8+q1l<%#Z5UHq|^b7a5;dX1#lV2 zafEp;KVl`}joG8ch*3ZB=O$5lio=kh z9L`~PIV_I4wm^I~@NkRI5oA;zvMlNO5w|WQ2G4?(Qb<2+k#g(NS6OR1x$SJ_x)EBm zSx0mU##B-2dAa%(N;NDSd{%0Mub1lhIIhZc#;7o6)7M|`5fbQ(*7<3zaZ8R&_w+K^ zimEm3cQJYPDKN#g(iyUc4ecV=Cu5Zkl-aM?HqbIAaM;J@G0-^(drE!bNJ!$=2)7r` z1FE~GvcTwRe$c!Gy7=cHH)Qg}XjMyUE>-&TT$bh`)ze;AV`}5k=R=E`o8+gyLT=ic zUHqe-wwLVU_5Z=$TmLovfB*m6*v1$&Mhb|dLqI@4Kw_htfpjP>EhtLs=!Su`NOwqs zln$g31wleY>9PP(36<|apY?vfUhlYkzTeLeU;YDr*yG&Kxt(*pM%!XkSG_XDf)x=v z%>W8zRQl*s;;ygAfT&{w&v?}YLF!g8W#D;U{liJ=XpY+4YFfVS{uA#U>+?{}6Q9v>33rwsGY@kP3_V#>*YxPSN5i7M@yoIsSkmhgVZtxj z=^Y3t_XEQSx8Tc0#p>UyGL53}01MW46{bpyLv_TfIw#`TYiek+xsAv?{1U4@D^qEF zf71wa>8!;4m`Uem_X-d0?DOLSYQc>Yzuhz_v`Pcdk?hV|d z-l>L|lr*M+v*!0=#;Tre))>0F@=lpgJAyt{^P){^ax!P`bqd_AzS4`coy$5CZPU<9 zpnTvNsr7o1`P;)`c!h<+y;n^+#uebgP17gQ*o~~FyZ0qrgFWs|jw_;3k6(Jcnb)*> zDE6(|?^4yx-h&GX;XYNfUxch^LQMDIMXsN8TyKxHy{*%%c5UA&bf|9(Z`~A#O;0ii z1>tjzzcA_>FH<1ZL_#1~>&~k|BG)fGU7!lsdxD}8#lL1>L_R;yb|`*X(XfMtL7}IY zC!sFxs`e7|>|URgaQU3S(UqrQ@L$B9V~TGc@cbV^&cDWO#WEdxEl()EqRe0-#TTB$ z_kZTK{F~L`Z|0MCTV#su$hy(FVV}y&!KOLjzQyHhZ=XbsF!yy&=U;vjO(gcf{ZMa? zaa%VF{sOLhzhGC=Rui{VB|-?r2Jyi<7acbNbr~kBfmMm8<1f3nqB!ci^9gh3`;oN;v|~R<|3&4GZfOSYOx;%pO)wlCNyL1Uam zK_u5E`SA>AxUAQ5z?p-*dJImYmqXR5me+E{GcyTUSjmTg0t`fkugFA9b0a zx2|l?_DyIl zCUPsJIr{3WUZU0E?#ggY^yllQHEks1+;)Fd;zw+nUe{sIk}p#~yJ#0BLIM54 zx*IkQ#?^v0>jN6qWysgV(J*oK2DEYu{TH0OIFky-mkX^Sr*~!-7XI_Q*UcGWqvY%{ z%v3Gz@(T&N8vuU3A{LB~&k?l6+~QisH#G3G9De-%k8R_5x1|YcHfYeC)GMI9oOFa_ zF3Ii+(glg5H^1@5xW}BQ_u)ErLlHr=HipWCji~G18mTeiOGGPZTV4!xLJN-ah(tLb zd{h*Arv=z6ql>~A$E`hiqk3QWyXIk|{qEFV-NXzewMk89*df>BI_jA_HS=#BG_L(r zNq$oN^FUVu{y5~yq0D0(cKXgy`lnAvW=FrhbBDlM+*#><^iy_(h3N|M2{y>U;mfwK zza@dm$oR;NtR#0_RiHIvFhH$$HCx7N&k5wa78G~CN_lQCBuGhqW|W7*GS5@=eH>C* z3PGWa3zJqJW;jwOlz2hL#GlC&xUd0~xl4*8bmJDsv-ni%x$0taYzXvq>zP8=w`1RO z6yy`s`^1hRgj^`tVM^bl@75tIZgy8D`P6zk>JpM@*w{psdgTtb6Nx+aD65Hn%rS&e zyNF}9X+V_-A;iZOaq<2WxUN}`&pEymCsV*C6Ys>ei4elUA>&8k8j$URv#FpbW;`ls z&2%vgJsHDA?~xXr%0nQw-fC+O2nn6Ys=f&EWL$tq@r^5~uICzYF+ZmGu5w~ZbUrs0 z{-XH)0bIW-tyBK&R@>+MH*9`UeE$Tl|4m)aJZg{p3%DK=oRK;(E{soo-$(5!13wQf;Rl3Gl})5a3=)(s`^O+?O63h_p@{Nq;R zIrs7UxAyKIi{9*Fm+t{ucpt_`T1{1AYu`|xfyc!Ltf?i0h}+eWMMsF$FD8ue zi#0;^uemv&wJxJGP1-}eRas@{+xcC z1>(#CzLQV4F2>~PB18LLuK+U-iT(GoQ>27G0tMgw>l90Dhr~N^s(QShUkC?d>mQW* z6AlUh00tBT^?uhkI;IaZgkJ*oe|nqGyZn<#clWrymDkNQIKD9blM^KqcM4?=aFzLG zEz-Xyn|O?qEI$#7+}CXSMWj2S)E{$DPQ1+xe-nxf-PdY)FxUQz6Gikk|8F}sNtOa) zePc8l$k8DJDrX(v@gCG={1dpG|i_K49UsAK;#(d;#K5v&II zmi3rIup#Gc0L?k`cx0kgDDy0ryYybtvx;5Yf26o2!XDTKaXJmAN zUGck__mz;-x+&I*N+~V$jFuG3Z|?wYrHshPGDj83$%?l^;lC#!EEH;PhGYTtG;g%I<6mm6%)b z2Q;Rrq87d3AN}dd+|RtQ{2e$AZt#*eyO%ChkeD==OVZW$oAA7wDw>1SomZp*BQVd; zQafxvqbAF$?F-b|MATr;H$id-BtLAx^f(Xd9QBv^ZazLEGQTq^rH=+GhVjIDUp<2h znxNLKj9(ZBHGOFIx2Qe6@fu`spLx`G_Q>!;0rR!jEq+Ey7p43?m4bZz@2L5IS)AO6 zXMW4<2Jq92zmo89F6-WfZs*H(1fMm5F6}no+;_v74CaTj*p<>y@iyoD{se=~kXa9_ z``53fHGj-FOV#1+Z)g5$`bnap@6Nc_Gg*>?;k-`ywK2yF~>dfm?USgnI4Cv)?gtN5Lx!Tqj1<<9_$J#7*|$G{Pi zk8YXLF_?l&x0Az^bzFZd#6r{>jEMS^NT;UGK$)HRmseGUgL!$LJYKPJe9$vOsxc-% zq&AE-tq&`wolSkD^Q5sMgE~m5QKSFXmn0poZ4vnem;$&ykvFDZI4EjfPz~!4$}0NrOE`^p?)9+mT-lj=azZGUa|=*G0T$ThFpnmbTNC#YB*DG&{}Q|K;Z zQ(rA22k`?m3_OD&MP1QRgG;RZ5248u1VET)53{E}>E7u+(qcGTj&G(*Bf}m-y&l3z zfhM1@dl1@&1b0DQ1Yl&~WMuh9ViLw3Y18G2DFBYWusnwOPKTNM{D0;b!2m0;_6ppSSS zUw=iCK(7k<#iqBA$)U-3yuOh6Jlpq2<|e7@Kxiw8*5&rK&PN43$xL#?x?=+PR%S^q z4?=;_{#5E@ybuTw^j6kxUDZL%T4B ze>g?Wi}5T8x6MpZB^?H0O(r@1Kyy`aI-aFM%qdHjGz$0dBF^&Gf7`;?It)E=o;%5qWQ~hmS|Z z?h-45UHx7!VP^ii&F_v)mF&umr%P;0Bf;{-`WC6Z%)zoh5E~7^Cp}%}xwt=wO{h;v ztY79Qa!?*+il((Zb$Ee(I4r&|meF682EA*>V=I3{^F`I_-P+cp5zaBOY%SYW>Gplp z{=khK=Va=b_tO2>ns2Csgw_@Hil0R=kmb{ktgBu$KVK5$Z8OTgq50geKkZp#NvG{h zo%1~CXii+|I{0x;kiNKEa_@lG z>$)v%QzIX5wIA}Ir6N?n)%oN<+urxNc`=uXJ}Kz#lwRCHO9AK&U&y!FdDfY)ofZ$Z zBE$pPsZG>-XvMY#-N8<4KbxQ=d7jpZ!ukET(W!Umw!`lQ4mBIdOSANgQd%Z1osa#Q z$8GUuCsaH1l*sc1sUe%e&<@L$NQ`&WHTXZgsyD#5g>SVPXi~io)SA0x`1nAwN&e~# zYXFHg=|$DwxU~~k0hsvAxDV9$^~{isWys6x`X4_t{I<**u8#lp%wUe=7Xe88X8Aj5 z=BS=ftN*V(Gyd?FvF!4;-!cnobbt4=;#$kKst&m1@Q?OAL+c?t&4p**`9;l#?`fID z=)Ku}r{%2H|4eTE(Z}Ow#u>d|)asLc$ir_ZILbTz@eBf+@2Iy57495iwj!}e1%Qz? z5(u4tVgM0-_|{N^SSo|DQikkw^gK)pI!v|$hDd6Imsf(J!BJQc37vADKE{xV!$Cwj z6%8V@$p}NTJ>ttm!lcy=LGpC#1xVS=bw(PXGL3QwX|E~%E_B<;mQJ(Fx*%2+uDX~^ zyUG+E57GDI4B^>KS;9E1(t)GRgtKL>y(aP@I<=<2AwACv26IpD?J%_vV8NvJ zcTBC8x@F2rHI0Zlk>RKb?=PpA{GwJ%+f?6f+h5y}hRc|TypugJPiI)(-#C#Y*7j40 z4AtNH68flV?UBU;OPY;JO@>vwK9$Y0N30K;nc7K#6@5tnchjTsGEV!XcZInM?+4#>B6*2FjNmp!q^V2 z;b+9UPw^~=Nj_arH7`S*=24EQ4$kkdaVcYFH>L=e7k>s<>U*-9-xozcZjEGABx+#1 zVoU?oX&e4E_;#RAlF0J+j4NbaQ}35~^&5OU&@cbHjV9F?Q2gCSGyXeoS-EB5UH#yK znUXOIH!jr_$5>KZFmE4s2u*6<-@Ik7DM&!I!IL6Jl!Fq8rGwtiq#zlU0JW_)vP~ux=Rx*Bj#7KeOLb=?_1a)FaV}9vi1BcLI?s$1jldkelVIr=1-)q zOVNF-zrbc$(Fu9~tC4eId2`zf=!4&aS91iEB-n-MBl&t9Ze_((qT8SsT`Bv_eTg7l zu6OSnMyVv+0KKZN?yBU10Uv@d!@>y7q|HDNT;jC(2YhPWyG*FAh;mljH3{-h9lJyR z9-Ubnl|qklGEwIq14sprg{Kj#}edE8bF8D zhTfWI6Uo84L4ytv8R=^8zgflE=>PA@`^WCZB_Fn9q1U;fYoABe&UHSm(YyAid+`oC z)Rgw!kGxm+$GthF&BQ6};rp6T@=9A54Il5%OR^^YL~I}7kEnpwO5i;NT-F-( z^2wDMgePG#o|6S)h6ewXZ1V@B*+4V|2y>K-4{VwBC!acqTdg&C%LYZKeVPqcFR{x{ zMC!)n|4Vqc?G?z+n+3nGJ$?^SNC5dj$v?jgcxy@5m+=4KK&vJiZ{fnCbvJitp^P;JsM#mTar2eQwkA1#OB) zuJxU7{x@4lf_%KLq8N0o^YcR9@i(Gy0dfncgJ8z%Vb)0aZchYEk;ybNNSb{yg4{hL zKa#IPnInj|glRfFta_cpLglGbp{6B;;S%D)S6_p8@Btr}8gX=jK+tcOA*f^*QKJZL zRWj}rAXZ}q-_5R}e^-wp-(K~y?TkeN&=LbiNED%x;4US^y9Wqy9+S-l7Ez?+m0Dg! z-=Hcg$*4P}fuN&-(1f8QWm3Y>3VXPuLf{^NUs(Z+-6+6Cd?hJi!6YdcVCF9NcCB{;SKbvK#GS-9}@hebu1!anvuk+s|T&s z7)xIgskli}r#Vo`)JbmB<_y4e2w+>*e%fy~0hRUL=^h;%jF*D$yxdZpM?$=M>O8XR zY$*^afPyP?6}7sj-)>$fa9(MGIG*m0dkLYLKGvg?dt;uXNl$-#E=_)7D*Een^QV); zB7(>~rw~`1eDcFmaJt)F2m!Gt_rXkogQ~B+A_RR1?e!$SZmy`jt^NbH9hc;J{S9tb zRdJA-F2@2CefGA+{e&f`-yg3VDuYFGCp3OKD^j@a8bjR2tl5&%U#h=U~4mL3se?q2eXZ80M4qtz zEQoe-#GlLlY%3Ux=!|3PVxkV7Yl}L_9g# z=v>x?FwI?{*$*e~npfJgzA4mHe}Bat2fFuw|LrU8Sj$Rd2S{L-WgrH+_G8?N4vFtWtbS~zIpmrpnKv^ zD*VpAMe6#pmXp^^kp-R-tbhI85u{kK&P?%-6&CJ*2EWtF?D8RHzDbsXsWJOEVqvlx~F zOAC?S0+)U?UBHIg-aOJY<4p?(zYH!nhPgg)nlXPF(oxW~dFgPsFs&+u>MVPGm*nv) zE}==0Z0w+?%B(ocQ?Y6CI&t7VA5m#sz9{c4bOVA8@MwMC?7G5Tvi-S=)EIipqx`Sm z(*op`V*&U0_8F-Sl zTpNj|C_tQu5ss~Le^anzYr_iFdj*cIa!>!Ag2mnUo}_$F{DX@y*0)T63o`ZzK2?Qm zQ%r5&YI$x^Y})|fo^XCNjNk*Wuh%zhTRd z1{ni_jv|qn+SY7$GkYdhE<9QgKDSOJ1UJAWNevR+;YIgmxL{JP8zTVkan#axN9hqW zygSv0`|pXaxg`xfzv~S-yR5Le^|ZL!VC9_~A7QwQAQ@~hQalfoe-BONG8(~Pm$}K#dNh>zqN)E-*3NPy zonblJQwHOgA|5Tntu7GEl*kKBEtUNHx7s$n#N|cVBVmxG7tYDxEleCS<1H$Hk|B`CRasVLg_mz{u12j6zCTI@@7|> z5(RfdO(%}5|MwHg|LQS)aytE=c1Yh%H@Loi*4h58Pab@51Um}y!E>$MP}N{JAMq2UY~|u;<-woAb#<@0FA027Yc@vkuf(4xV?XT8+d; zz`cAIB2f{1i&0$vY_p#x;Rz(vgohS%ToiP{@vSP`7=ZZB^im>7A64Y80LF91tFoD~ zB%tL-i|#gYqyH=I=RbEy|7x>wP=WQlu)mpW{uJC9yZqT^6F<;-$L5-wIi46eqZ7I- zr6{5a16QIu5($HbA?gX_{EY{xa7OS84ODcLZ4948Ro+=snu#RX>0q!y|2a=$j8NC_ zVe|x4f_ecJx;c-~;$bp8G@?|RKnp{H=P{TEi`SdF&~(|g==cv2#UXIu1VXX%``34$ z9_Mb*;+O!8fv@Cu=vG1*SD6Bh6o3zDlmT5*Zm9~wUBsaD@I5Dj-`MKv2q}zJ#U>h!}oR4mzD~(K+D{Xy=ao#r)lMX>=ia%Tt#a~gXF_Hu(L!u z8&S0djx3E;B-xp3(GwLB&qGF%e2MR8qn^0Fq#z-Pm`dS&>9wl;s|UWB*pzEdQD?9l?qzkbqb#~qzHY8a;3Dap0m{n;3M_Zu)f z?|D_ukMD;PGXed!M+>)0^vWX7I2}=PS*!n`EX&iB0uxBjfVdk_*LC)a-XP%Yg-jf5KA{V3dPZN;QI_yUA5cZgFBXC{mOW8Y!m;)Cyc)CTzS;@$V`8|NYl7fZoeZ|=ZFS6;t^Ip0i-7KGjdf%USQ>6aY zj(XdxoC`7^*Ht@dN39qpi~}P6Fwa*u-keU2*ZDf*q{N{3D%$E))=Wtkr3oBNiRp4= z5ftxc@O^e?WQ_{m5rXsoCo01p(b~(Gbkk4iVSJ1`k^2Q{s!6E-ZGstX# z`Ur`D-Pj{Ja{#k}1ns3N^6PU7jfV(tjwN!!mm{?4hUK^Fk~FpL&K!F7M=*8w0^DrK z%qHOQbGC4MFfL{XAE~g8Ad_npWYVL+F+r~jXYX#^JSWJh@>QQ&0E%Was)}R;*OFZT zqtB2Br|JD!fs>%gDO zF&w+TaEh!;O%|LC=o>LO+msFS*`!en8b~^|V*%%8FCo-;jU--6>!jW$6c9G zQ#hc(1uZMFo5NPm2}v-(#fr2SSxeEi<+`2U3F+l#ju+cGp8FAZ)}WUZYqm6w(&gdB zIo~_1(WJ-b`CS*%`?3Av8KceU2lA#v%8qx|lC!*R zd3DM)kK55^t|H;%b`+j&H%2GG;7O@Xo;H5Zn7dT+i}NLa0mE#DRO^d!|7b@`HD6Yk zADia|)SHH0KJdROtMQ}4wEx&`l6sjz&Q<+I#bmR*LxBf`%wnl6sr7{f=dI4l%hy0t zoi5AZeVChdu9#`&>dP8hX+c}Yo%-IGqMC&2C|l0sE$lSGw;gU*Uggg`^Z(kAM_KKp zruFJY76YG+T(ygd#mq$g*QVO|YPYLev#*Yh&GRGG9zMgfZw@5$V-BnT*uoyrd2l_Q znCZ)WYaNY$;9Yv`Hu=^zy`r7je39nk$Isco`3K4!vvXTnJ{_w+KB^!cTi+)LVu9+s zfh(?;4+?H@eD1v#B)9k~aUTFZsy0*xQOxH_h7mv!un2l;A^+l-d98)BK| zIMY9$9q$%M!gA(kMC1kSMXE@q9!{RR2ptMrx=Pd5HR|IXTTTFYzS8L<@lPGB> z?cyW9Z=;vlm%|aK2GrPg$jOuKgT-eCAv9v}(!c?M^I=1#&Gku@*$ybR&*47^PXJ|8 zZS$0^XydvQ{WoB$Qf*EuWpw`Bt?if9cd+pcE+tf_@|xEBH)z zyIyBGI8nNvfx14t(VbGrNLx|HhMd0o;&&i>g!W`jyFF}QId(k)Jz0%j`+qCQqvjH> z|0NCRAIXtT<6i|CT-X`-M?uyxJ1NM;zYDVb|HXn_OO%cMr}?nSYlznN!axueoWP4t zUmgv&jn@6aleY2FSs~N^hd=JaY{S)~KH*0lLm$Qm1HR;pM*9uVza7riJL8npp|r`e zDzeWcwsK#wZ0=+UoUkOf`ipEk3m5nMUvXs{<0)!CCptxEqbp#y=WLpV= zLF_6aiSt|sO$B>DZZ&z7^Gpg*P!x;Q@J#7JIw^J)q4gU#9Phb3+Hh3Um!dCD*9yw# zQW8<#;8JrcD92~tq*8WLGZCOk0r)C%+i6BZ(R|s-x)mjvz?AY5WX#V-he8Ff{Hsbn zw~JPb$?mtUCYL6M31EvujyA`S=eb}SQ1k|Z!aPXEFufk6QmLX}W>!+vHA&iAM=8|h zoImK;55SNqyMAbzcC7sHYsqdt;_OG_S(NL?*7Xu%`u)E7-N$x06%jm?h45!VhV#~- zcfX$fogBf)RWZi}+4B*n_95X(Z4mauW4iV}0tjebg@Ju>bbAHkFtOYjJWDWN}-mcOAQfx(d}(WZ(sK{ecIlK1z_Q0dHZ z(>d6hDo`v%^)@1{5My`1#pwO+sBq5Db0iB=qciZA?ZL~z=^iqgvRw{)8|0#FJnwwn zy(Z3&c6%H))xEi#Aw0f*J6-;8Po7D>TW>`R(39)!MhVhyP}#nK$;8VtZ!D@RYvi$G z1x61I15`D*2$krG_BTP6JN6_r#cNYVm8wNBy1<>xjK#jaLGq%YL#u_*#Qo(%5&*{- z_Z^WHAT@#Yh)1!*mkZ2z83v{hAB(#^%IOQN1zi$pCd3i|(4r_XFR>Pedsl?oMuX4e z^%Z@Vsl)B^!D3LwPJpYa3Yq$UFOh2(GM~(c|8x2sRZogfNEBgbMUf7sWs4@A zERi!h=cS1fm&n0!AkIIQ$hlgHBR(Dfox3NpvB7(~$4lgvL+qD`OXNdEu@5X^$1{i6 zu)H+tOm1PHL9N)T`gFo~4f(HST9ypwGrBss#S~gjWMfo*?BdTu5}eH&d=olKBz>HR z+$Y8Ey&+B)`u|uW|IhPb+MLREqHJt1S+9DfAs0YdhIWQN3ugXniM*mG@$>cL`LOzFf#@5ntoC{Ld7D{fgX7J7oQQly^ zQ8AvAmEg@t90rfw(l%$fS!QqOcs?=a&-pO1AivZmzs_z$AZe7T_AvfZX-#=n_vgc` zzeC&h0A~T^0Qx^;yxM;(DV@0$tzK8qdmQ7j`f?HOo;Y(`#|F{7d>Y5j+!c%uUAhd5B2v&a&rUQin??Ef87*oD;+Po zOA^)V|6u5ITXZ>Czy1FM3s8^lHABRAdCfu8}ZmDIB59t91q znGkgf{sK@eKQXE3vu-vQB80>p5ki3R9yi5D5^hfh^sO;~#uC+9G*roL31?LeDfyD6<75LZo(W14@BT+diz5wh zLHm;mds0T6Q{|nAzVOj^Fq9O#x8!gR&ASrKjw5bwEL~{5;(6UjW6e+0BPlsPyy43V zyzUwH^$qB}%m&$P0riL5+jIo}pN(InKf>>ix1&YCo)@=#%tYhSW4qE?3frj1Q}yJn zG&sR)Oh_E)MT<(OV(+j3R-|*PLGRlQeK7?8+-@lKfp_b8qU^?=ox=CM7E*1%j&_*p zPrJ-X^g26DA`mM$Ad?4b-<3;svkAT`{ZHbiqu}A>WoB=&GY?>5#Uz6`z z4=v02km}M2uLOF(dDkJs#!EspiI?|->!uBa(Zmfj(q&E##zFPut_MlhG@M+#gUlKR z*Uu()6!Bab9Mt`z2LBd*{yyYt+esxW1VF53Xfwuk(gHNhdAxpQw4fU-B9R)}1F(jS z0qqj8^uec&<{v=K-X-Ft8YhQb-(q+qTLyLNP3!;4XwOTv%dRQCD1R0n*l?f9k5`ty z9vC=1o+C!KAp31_?az!>%b+*7t@t!lXPqpud^Fs*8Df>l_Rc|JhO>_01M^4g}G=^=G_KyI2rUw_L zOs;gbI;OI#oNVqLA34q3`t-_)t6`zn)l+yWhwAE3LueW>%5fTje(II$_QwA zlg)sO66x>4&Q~ZAAn9%mn1NK2ahN>7Bvs`md=~5Hyr0lAM%J< zx#QofBggNtG=DoT>_;szOm!QMV>x7j3;;RXkQw20!Dm16L~NhF;-zB%On>;^^ZFK6 zj4YE8r8w2I#Cn4))i@55JbHcJ_ZN*dZGyt!;+*3f15)72=MLy5Bu@5)C@rHfDNxB; ztOxPr3ZMgwWjWtHYKssZ+!NDM><7=ss*lCdzPJvhzx0+%hQZJ>0(-o;E*H?CT1a7)-? zemp!+8IuM<=vf}(@0MW>aa^YzNC!z@NRdMk8<=~N8TJ?gc+cAA&dKIpv$6|dqG!$Q zI-&EZG28oKLguVvU5q_raz=2^B@FfCRf~!q2G{p>?3XWOY2IC>M`sVHp8e1mqG2bb zJtdXps@0M3<>lR}>CBOb6UY6RQGA)O!b$)2UO>&JrE?Mf`j3I=$+!QH&AngW{$B%8 zL9ec~$=OdMNZZ_h;ssy}Wv$1sC0goAb02^E1zX-9Z|RL5m9TvXg!0zQHQ{zO6Q3 zjr{D$&f2AP?D-D$&#{VRAwB$Sk=m%$>Z$gMUg+1bbHl6^Y`XnLDDpGX?V+&Kt z9K}Z17P2dPI4K>77T=bN%X@$1YnsAxocVIuDhl(Z`cIIY(UVQ0yRX#CFT5Ue>8UM! zgDH`MOYFbmUI5EEs0H8X3hc}n0VW3eB--lYJp&6_m(=^EU)3e}rYxQQmeDW2vz>UG zf(u1DqjqQg2|i4_2*p@FpenYL6eiBa!G20z!@wXZ&AW)lhd%Ki-~JbO9e#cL#oCnE zX6CN|Ch>U5>7BHPPm78D*YL6InLtrO{Pv$s^Bi2`&be7XyYIukWV>MedV^R~7l*Zl)>J17E2Yx=dG7gp$a zfrZV28!Qvc9eu81jj=Ku$8(8N17;lXszO(yBAYl6y$@<*KjKzCcOR_`5C|si8bI<2 zc$T@+CWkDRST_&oeAG5D!Rvqttw5BrBBG9Ll)i{I6h^poXxo$pp5nSB0W^#cuw2RE zdbqAr<4IX?`Ahw+CT+iKu9O^C_OmX?He|f@An#!mJB90nw4!kqEWmVPV$1vxM<$F8 zrm?gJ)1fc`Rcr`()z|iK67+%RDKc(9g~)v5Q!mOW<8RnoVqw>XK`25XVMR9GoZE^3 z&3PnM84AKAY3xOwJX7v8e{#edZkbQ%`A}k>bKAI$1;7eML%eZHfL90{V{B2&E7>S8 z#fwn9TPuoQ>O-Jj(*i;nKmwB22sQ~Bk!;^T8u6q;gD11`(zE-|d?kmo$wSuU&iD!X z1{>K;noju7t(^OQcny>NdJ#Xt4q#OOj9ItFO9;-RWck$7$?I33VAMG20vaP3Sj7$| zOempm0&+Yz4Qmc2YWsrA@3YcgBJG>3l_#sdCy3-c+E?__ug9buAbH4rrhrc3>IDLp z+fV|8W**?if&!I8^N8e`>&-0KV4_$Pl$L7DTxN+E&uB+kWjLgc%|+a32^caKhP7UK z0TGxAcq8nn*+y%-!uahT*H1}x!jCzqIkVr>$54v8!Nn{1jJ&2~-GK}mHUMRuH8}JB zCR7}4M``#Sb*Xm~t{z|E+mP`Rc!X1C#Pu?O<38c7F{=<8Ka8h4o_)Oo zb>X>Ry;1$A0v4`0)lZ<|`&a~p8)1s9RMUyNJJzu_>blR_sM|{Q{9->oqHZJ)Mqgr0 zWlgv5FA)nSGiJqcvf5JtACho=^hykQ510VfK4EGbb;@1}BJj-1q~F%(T##eCQ@o9;6&k1Iva^{R7~F3Cb+)?VEu$^_^g$pHVy81?CIX@ zJ5J2k@%W2Gk$T`-K&-{nZ~5t5G{GWKpFxPg2?%Z@6fd?M|NOP$dNZm`B5?C(Etw*M zqaDH@_K7{w!JJlcRii)X2=F!jFfWvAZs?6%o2Wv_v;sH19_3|BNXi*UbteX|gWi{v zV&tD|!*o=VoLHMLL%b}7pp=kpCm}5PEEXY4Ai3y?;7bosZ~(=F1ckQ+RVRz$%obO9Ef7X;iQO~AsY)5##gLF~SWb6-h)QC2wR4L$?8J-@HEh(0c__Z-dSb22+!pAk>$rJ2BzfV^+1?7LJTW%K+l?sI8}u z%SHr=7l4e?I-shV6#dPIPZS*Ad~Mwku?!_OF!oz%c2V^~Nce;d_PGc~l2~D*c!Iq* zF5D&?3-F$f6gz@OXb)Tl?_uvwhbikDCbGMkjIj>VTRNrNd6&3d#9cSVk|&P^u*^Vg3Aub-eeG{+3uL2AJVo7+>msg6-7L2{vc&#Nw!fK$A1Sap* zbhqfT*bh-ihP?!&Zw$;U?oR3LZ6+k&)mW*1@6{IHniAjJrM^4s0aCR9GGjA{y5)G3 zFi6CLi4X_tiX(c1ZOdYT8wtUCvAcUN4W`Kre2GVU*G=ca8xg+G`$O;G-DF9TqS9b( zHDA#qKi|l2q)}?Io2AJyj49B;7;?YBA)XXPzd-G)E@x{2EY67ZTL>FpXTwtfBfnJR z%v96XRP&is%l*{Lr_!vY(`?Ps?ETUlGt->N(n>kN5PdKj0q}B0c$$HM*6F@}>HeAN zfvxGcXVP)|=^>{w!lW}I%rc_r~?)X?ScZgAV#BLs8=Q#d$Q6Rm`$2ifj65Y2^!T;iUc900HiXo5a3Z>kZIbD zYNzDrHE_MzJwSQpyUd&|exxA)>4?n*=0OS0!gB~fJ_2Bku=wH(9WX;&AwW26?!pH% zIk$73^V4=3oq0{jidqW|Bye21iU>xN-mA^3Fw6Pqocx689+0e{eIPSW1L={8a6mx& z&7fa1b0?5cfO)RHH9{-~p=h060Y#Qakm$`9%E!>kuh|FUd|%_vc!l_uMEE{kp(JcM z0kNb?(WL2l)Sm#z_J>YS_UQPTk^N+at2?RP|1fbx{?)@OE6yoX%}NrAh0|%MmQf;XpPOa z7Rj^qN5r@k+PYN2yefg7h5fcASK11O%S-V4_v)K()JlTu9bL0FOUfn-NzJQAHmfeG zxt{9_I3FDvqaNujlJeZIU@3;SKJCHVp+eo&Y%*XuiA?3hPOhU!6)8Jur#~Vd0Q+u^ z=z$|+vT90fs|NOKNNF6?WO>-HH#u3iUi$Ki)N1@ABJtP=@`v_gb6%4n@tKwK7ZJ)2%%M<`> zA(e3?AJjnSuq5a3jT!-HU&Jm`d!-tmiC%}_8P5r4QzXBZ2P0bb^=RBXF&Ud*>>O-2^Q7fKHIJ^+5r)5 zCrxVawLr87bi4@Yd>Pw5uGLY^(mq1o*>)6=9?t?WK~?_LY)B3e2p1?jr&WUUM66rn zUdJLn1(di5R6=DQ51S#@wFD*n3lq%|@hqA0*bXcLFc?6<))Gi95tP{oeH?)zkkD<> zMX%k3!GkGS0s81JECNE~hJbf;acFmIj}cx5Am(PjVExo*fxSwK}~mmTZVZoxi? z=pb}~q)5Ay6f-1W+o2)ybd+_(jum_=ZU`pY{@CmhDGd~7Ib3Y}sJ^#g)irO41)y7n z)F8Aab#!Qs((zM}C|D2nza#X@4!O9E=qGi`rbt3Tr7t2TSfZqnCX(EKg~ibpz_krLVN-8jNf2jLMp z!|Bd$U>;a&i$wEio&-DE4Ff)7_`y36inxTb`0R}EkWPn=wLK5)bC>NerRXl9pg$wj z^??Fn6WC$=dct~aqJ8$6rFQ1sXoL|K0>nZti9iex07H@7tL~Fdos%welg>XT-6*F# zPEUEuP2Ccj^0k`s3!3u(MPofp#IH`47XXArESPaXno&pNXaK9(Q)8hnQqis}?_Yd~ zLnNJ^F&dk24;&hK4I;w>U<3dV{ff!+)h8o_Qgc{k^(&>-SIQ9yb#t%kPuthJ&o)uo zw^Yxz{;+HRFxxrus^;|T$3m|ghFS3v$JVDS`$KWbho~tb1t{IO7;R zcUAOd{}Dy%2$M5#{`LPu+?~fm{q~LD{|qx@>|;3yDGtN!;`8{GPw-ynes)x~}_i-;euo|LGrpc^uxy=Qxhn z6H*i<7COIvcYfpP{N}s)&%fulPrlzh{r;QV`yX-dH-n|itl%mR8LJO{&n$GzF&je6 zXgE=Cv$(^cVHw(P()aCCs)}e{ukwqYhkH1^d->A&tvL;S{WNSb?19*I=0fCsKH%3$ zfc3K*$3vPCQULPla?wi7ZktM0v9+WS9;Bj403t62#uQ1(sz_He{axuYiCLbPYsgE09_K$U1)U z#`O_+DTF=AJp7igU&zX}@FhBHx}8Z#G>+Zs>U~fsJv2V9)ONl4_~UyzWT8Ne8)%yp zzwNoi2NVM&WKkS3ggxmJd^BRstO24eKT}}vmaW5`A!990xFDtwuIcY{+JXHp1vJ{7 zuppfU=@fps78Z+2fWdDh7czk0F@5TVN7nFD3qcU{r^EB`oEG|E)G7$!QxkDf>BokK z^@io=Rh!y(`DN69JxLWA($!btZuL-oU{xGRpD~&^YY)G1H8ymV{uw?ZPo7?`FRN7l z{6#$7T|C`Khr*lNq-G*W3Uyut?XR8zzY7%Jxf*H1eN!FjA2Ph<9yt>(__@bsY1!hO zB#Xb&(W1Fy7~JxlH6M)t9}EecVK}>De-UnR*?flcCeQI@bE!-?Lk1u?zY`AKUFbQ# zknvfgXu+0g4KuMEA%DK?XovTd*okxa{=_ILkF9IgXZyIa+|eLk!3DOO36F_oI>qz% zpMA4y+?Xt+VGC<}SZisJqWyymRTx2aED=dm{eqx4>+hdj>*)5$lg< z)K^XykmlE1L>|%Hc<$^XG|qXv_YV9mEBb&B^JDL(FFlIp!G(7vM=Ks7zc|Bn=*C#+ zZ!gSX-<_#{*<`ThF@4Z=%zrl$z74R$1<#~En0fyEYs9h8@47H0#MrkNiCbl-X(%jR zl;_UwLNxsD2lHP}_FY)gxwbZXiar0HkLuN9zFqQ+5CkZ~8Uq9fvmiFtY7vvf{0Dm$ z?xtgf1$5MVEd9Zr!F)C=xNI@nQq%MBvyXr>rT~Nn7@5e)W*bRQDKcj!oYInNSK#QU zzhQ7)ZEjb@gp*)J5lG~>-@s7MF~F@r#D+ti+taI%E2C##63^01AX}j@r&q=hdf@~Hq2#xutZ;>No!kH!$!SY;;K&g_RSU4LV3IGrew0dTA9 zqH)RYXA+RGc{etI@hzYs;(h9BP8c2nek6K1K;tkbLyv~s+NMDW`tg11y^wPrbq3TQFct(;A^LoiEslueR!GFcPBIe?f`r6CR@=0|IvX;ekvPj94&SGo*d`0@ugU`tpRl*R ze5ie~36&+$00;QErICo&;0yETUE7t!)x+iq ztpr)WG8}!jbsylWdQ)K*1~Hp(+FJ@WlD+WZyRq=sO|HiMA;#kIc*48E@m0JiVw<*P5g_sPVXcVc*uoV6z& zByp{p+hQ0p6Za}Y*xstTC(w(G+0PINZ$wTqnjoK@UhKfo7Q=Z}i#+IE0CV{AnWkw% zh)!;4m2Y>I_svesO$xH?W>Zm%v^6O+LE$46CswKiaS%L_E7G+Uj0iT3jzf`VVsy5} z3${a-0H2DQoVMeDTSzxp*7a=-$p^2Q+C+gNh6Dd1J8#eH6fFThg1jq3R|>h+W!bTZ zjmCV>#72?xIM5fyD6joma471O=HpltzC; zQMO0T#C(Si{YKmvpjQ7aa!Q{-&BybJjJ8ek1jNPH$i^VFY3NPL&?fYaDw5lN7c$!6 z!lAF)rVAcbB+Z7kpQ*fd?)|`p%}2)-9{@Y^Tncla#J%BUcfuR5nb-FQmXqRQ-yW0) zeGn`@`KkY2$vMWQJ@D7BQ@Lmpx{efuG(4RvuG#w%TmW^Saa^Br`RYQ>(~}Ao&tEu! zRh{6Mk)_9>i7$oPpsi@4-zjTN`p#nFiYe*|L5gQA(8VEhUR^Q< zYv-un7uR%a z=`2}hUY8|(&#~u?XXgZiM?Wicosn!7@UZmBhsa8orFW z40|ms$Okq!@zS_YXR;?{AX}tc*i%S|){xDbywsv6o$&?tgFIfQYqFPJ6-rAtUzl?gL6Lerv)*xiLq{J6JixZoJ^kwn*#D!EzbG)4K3w#|^zM@x_dqHj}h=8~O!<*B0r4ig~5Dk)NF7LZHVS<($&Y3y z3gOdj*DDd{ykzcmslZa~de4EG8Eso5Y7;0(K%w=O1P72HTK}*J{89AkckaGA;_Dhd zu>69wEx|EPM&pYqiG!CCPXYUQv679=&vJs+5EY##E?1@u@!Y$uTM9gkwN436c?INl zNLQs>(gY|YPZ*X9(jg5*>o1ahL*F3iw>ty(7BgeP?m~CX@Z62Z-)B1gzFehWJwxux ze&_gf9SlE!5qr8DWO@FhwuPH~Ud2TN#ww2AlEEJ^8Cdxa{g(e@1dGF^vI7ckUT=IMUye4}wzX1os_^z@TUI?gn*#SRWb;38bH2PIE^G5P`z5BV*8p->Er8C;b&UX4Z78D zYFk2^=Yy^MCQW4zvcls8@WsPku$unZ;CL>Cx*yt{Tn0yewTnIXKVJrj8j%rq~T zdDZ=Ob^bTBdpl-30hcjb$?DKmO)FSD04q?|BpIry=~8MekkUuwB+E+j7b6FCPNPEy zc?-Bnddv(YC8?r-! zm_E6Kz#olg5K))d7dj`6Pa9CE#w&2yC_+2R2+{HE^uRrS@DG=)PJmCks`UYhoq$Mu z?O8n{Lb}vc1(4!}tZIR6NWd&z#3=29@Z{Iw2^a7sv!0K<*vfkSnxU>dIUV^mX)JeB zU{>yR!1R5fLI67;(QF0c!qZ!$(q1W$j-CAy)Od-U`}wF*{8Prl*-jb-KBB5S3#Pt$ z$PaMdMcH`%5%K;HsEQu}wNHSM} ziT~1mzYh{Sk(;KVA)~^xb*F<9PurwGQtJRQ0myy^;73=w-bw;?o#xeUo`pNJV%8l% zl4u44>oeg;Tfv`UH7z)zo&qFoy&6~tV=HJ|VJF7I7(-%dKI7?)oYK(vnq8;nT3%K@ znPUEeXLB$bu`>^S$4f8Cz$O_0_2|S|9AG_7XHiY3zWy}28>+~w7V9K=8V`yFr`fLX z2A|<{V7e`jCe1oCIujF)&&ZNs>om4j{3G;u=MGxTIx+Jg;dCCPsTFUspW?iZOCVFp zSi{@{$vl{B3qxVQCMolv3kFXdMae=hzge>QS=w zYF)HRN=ox-Ja6o=>>cjV*~|!iL{Pj+9f=Sq13TW(a~T^> zR3Iji#DDR>n%&l}s1T7vrKeKb5HXeknx=`8x7|c2kxb>_0tOl{9fDP3dj~o&D>2cD zIOqk-qv&85(ll%==NVGR)2yN!EDQYf4j-qUY(mc|m5!(=O@z~0d`k9nPjw=zUv9bu zGJvV$6v8dID%9x*&TiNzb4V)2hl>yl#Aj+xK9NL(Y{AL*Jz1D9Nt} zpB|f=NG2c>i9@XkqlEO5WJ3L^Yugr3fANXeG$jS8+}H6Z!+1`e=G{dOGlyFgj5F?` z%2l2|@L+t6Jc+tCnh2^VB;dM!2}2WLngq#4fMi>AqvxwAeK+YD0WeLdH^un8QGaYU zFrBQ$42X@_AbyWFnm)ObE@Ij~D29T1OOI5CzZOmfsWIaWURmoC++czSbAtuN$Eyn3KvV9N)?$XR>KLjNX^i}U&%e-CCR#t>{L)`2sypf^^( zy%~Hda)kOy4F=6#ujJPRf(N6fA}?m)aYLUz2|UnB=E%9K%D`J%l(Mk)DbMNY5#dZ^Y>of^l zD(1T`@+uAwQp?}ADVi}7#}!EC9S=l@M(T5CP(BUz%>LP`>6w+e<9FFlKg<#+ozJ%z$`LtN zE2KB(9!)f!C2GuE;(!#1%+Y_eCB0*K&l_LGoB1BOhzv>Jxcs)>i6G|A5I80(`CXlO z04l?|_)5Y|TI~{0N$0lu1x3pbzcZw6k!g@iibo6w16Evx49D@fCH`>fIKTGeSunk| zoLPI5_6fDrfF4k!cAb{JfxuvOg|ia(N(rTGCbw0&v#g`Yeb}uriTMs1cKbSF@XPVR?P?pLfoGtuEp*wEpT2{%SBX`Bp zt7?X?lGS}&%0qq2!z>nvWU@>!lW;LU=HrJz@eKc9(G(ey``|m9)zoj%6NGy8Z7l3t znWS7Q!ApF8#OC}_Ezc!i)-NAhcuOA4HlBYRJnj{RIra{xYe}fRvRN#)uqdw2XBlNl zZ@ zJ51T?(Ehv#+mZ~}ihTKr)^p&wMc(9ogw%I`aUfOAK-EaF)ogHXCVqu0px*?cas|T>jHJ8Lt;*b^-qW5UNc;< z4pFWOJ-NHdeLMYv%tw&ANMqp+S9Ug@!4BFVR!)UIGAYysrpCq7?<&)dsdD>;_z z%)oX6lETre3j=-kxca}y8m-gPQTV@XO3+0dXD)={Y?S2J3Z;th7wbCMbR)8@{9N?2 zN~43t4gk(l->t%klF`u3?qG0N(Yv!>^wd+>)k%BvB?%qYf-y$ly~D6;sXWPzLYczD zS4ZW`BFR8t0xqKN&YE#)SdY`%=I3t}8oS`Mr=_@X=5TgSvp04^%TK}_yC*5%jxNaF z|DNR@sf@Y3;qmq0@t2(nm;2lwy&r5n@n=6cnjO5)Fxkvy3p>3 zZt{iWsJ@Vk^b(Zqz7WmlAH5y-E}q|uy0mvG`BKy)jIYo)+EnS@XQUI!li>?{SNHa= z(e2~c_TI8Y>8O{ySgrLx#c)Jhr*5?P#kJ^odl=`>K#y5J|Rmh_%<)l2Qh{h#@dF5kK4N$^Wdh`4xu?T)1TkKWeV zKnrMH=zPWWPw*8f=}cjY(VJNHuTYiBg@*OVozGuW5(x?rmkx-FU%nn3;v-6`IYlZ~ zCV90IAH4t@BYs)Prj&kZ`Kcyy|6ZipJDR_*P27%VZ;J?jkKo{sY3-x? z(!5`|rI8r@6WQXU+=#zU@44_jS@_-6&tHx{@2PL|T>El-Bq4abMQ6EteDwYN@sD%Y z=JYg1OiG^b}Ic4H++-cQzh_J<3w;r-!_0T(QotsY7zG4iw2)dubf z7Xu%-8O(VlJH(9`^L#k&Z#&_S{k_h-3)abrp8-q?wCZXag5MCpauJ^ktQ5K|5;(<` z$`r;a&*^s%b1OepgOWJG-03x<#+!32%B-?DNA>N78(LgCJP2-#?gT@=Aqi)V)`e&X z)0F-2+TLV-b(C9k`clpS$nV_m5M2qiAf|Vk1(Q?JEfj`+2oQ60b#m8qXRVGO?R)u< zzQV>4!Zi(da(C{V#=mtA<>q8|@dZKJ4HoVY`2tEUjSfO9kR*LK64^#7vDLvv$f^Sc z@UVZIO;H?NXTvGisouf(FZzl&XhXN-&n$oUg=b1Iytz%>JHdMQ;@is-g_k!TpTElh z?eM-6Si~i1fiAVT%C{2(ixeI9o_E5eYW6Iuwk6K2TZ>Fa-MW;!np1vFKZf5^;;M8) zrUK&_Plsabp^~W*44G_IB@_TzuP|K9wYsFcT9uu*MBmI;@|@k}C+cuQhjtoA!-+5B8;y6+-2{ec!O(VTwon|B&a z@}b+52cj2BA>?BwySWp6(l2$sx;^1;HelBrPak8IeIhH`pv`z%#aTtHtlzRh{bvXR?*84Ias>@Am z$SVHQjT7nyCr~Pq?^(=0sJVtyAA-OCE&Po9SWdcmqAg8g!hxKv{o~c7$Ek1TTA-ei zTT8brC+@COsdwkmvI}ogL@qO9(qb5pe2fo46Y*BkiHL7gjRC54ZT6z!T6uZ5SS=K9 zhSFZJYk_f5?+()&JCXyMxWxPiaP&0vsUN41| zT{4fQmrAgTJs#?rH$z{=a2@<)-$f+FS$a03NsBbR+{Xsk3%|V+9TJS$Z=#S??7z;NFc zqZefo=z*6>63Vty&Vfq^hir|+Q0jLhnzUre?0%gnGbH`4dvecuw;XPjlxyo~|LuCpN4td$el96U2w{@$N>K<>~22KMW}POtEk8^6J1 zgI*pJ+%tI87wPmvBr!{TN}+|aI93B^4r{nk3}kUqv?hU!UO=-~?(0)`dQbe8Iyp(? z9$j${hL1tT>~%l&&uV$_%X++s=Pv5Ts7Q7G4h=OAXY)08y#Wv5ljQEPe%;P4oI)5- z25yGpWD9PRoxuRFSjtV0Ap1IaDW0TtAehLmRBYA7AtKoA&1@~jCK@LXn1rv0DoU}7 zKXiv+n-}(MO3@4s6XIF2Frm|ZMj50?k#CYDEwTO44|hYIf`g=r_T%f5*Ol+dSZZidN*)Q2_Rr$5=-uRlr#jzhxy znE>A!rQ21FfkhoM8?V~NU-tIitW&w0bCOnOx|6-7KIycqC&!6t-6hV#(u56u^hd{Q zi}vBk%VisLi5)NAk|f|@5qXZ+b}yBPcR}AQIW$ic$L)VSQ7t{7F~9~~-Cjm923N3- zRJ3t4X5p%CjwV0bu}+dS6lyWR8FS&#Ir5fevYsC=C=)eFuCz8VJ~@A$;@Q{VbIduf z%VUb~ODFf#3GG)1{YqNO3~L=hebFB{U*TvzfLp@pe=lI6alKDi55PT8Bk~ zn0g=5C_c-TPdGh@G9A3o#rPAZPdo6sMfh`V{`Zh%2Z4iI7w$OdY3i0rS2{=p6?7kr_#{Q$((z#Y5ShQ zr?($1hZ*(|XnV!{_@u zzb9r5!m2(4!S?%h8UtV5e?`YD<>9z)|egR~NJj~Z18TZI}NF6!a zJj`bEjkFo4Kh+KE;$lzpE;>w6yYh7}Bf0IKZ=C%yA{5wnlqwoM-^ut4cI(KEY{KT% zHtr_GL4%;P+b=@&$itKlJY;r+!Sh#F7a-BfIs?*!qt5Ck&yTV=3o5E?KmQzzC=2Md_X~c9~qI$~*jt zk)L&)55M(??PVVEUBJbSTvGc!bpqEBbo%fj^pQ38W6H3x>p6NKUI0qLE4=fkr>C)* z!|+m1aikU?GAk=;#W##=Y_6*qM?vtUsmf!s8i?sP;gOgmu)q0z< z0)1J@Zdtff`~pVVDRX$y5fE57Kw2}%yHD`{pXmoJ{^+sb<+hE>|fRMmT+xv)y`>EwnH>TgIH zW4HFEtQR0IInR=;+$VbxhOzmW%`@g23%h;{Z*v!yHeulUF<%m*f1Qm$B*Ti{zd{Kw zmG&g8-1debIzXS8`Pu^t#+dQrMP{0=HL=?;1{Y&$Tb<_Y}V_S`xj?i8?AlL04?t z@Z~6$0?6=3yA*ywe)!!vs}+5zXY_J}B5eKWyWc6@a;%dL#%Cc`!bq>Z9ipT+R>GUs za)=!RKqMt^T*PCHg^2@CGj$%*-rA-S2LoZ7r4~O#EqA>!H8ZNh!xeWeiLFDg*o6Dy zSgwcle8XYSmL{yaE?`mTydXfv;^f{sKhCB%aiE8RFtz5I03!9$l4+AE;}7n-0pNH# zPjJZk5~iojVARK8TFhYK19rX4Ky>hJoY%85R?M6Qb{pi;2&PF-xb2Qc;OK;O#JvrD z0Wbzn?tXN-U}Zgd!wkxa#c`640UIUny)sJ>7y#N4^PFHl5A0W2tTKQCM9Xgv(cELA z1dLjjR>IB6Y~3nmoQJCy48fr+5+7hJVNeOIfJC@1F`WCnzRLYj>HDF=gLXk6KS3*q zg}#56xG)rTa92cMW#Ue=uRa2GTa?JvmY@mA!g#M(?V8(|C9>|LfKiFK$+g(k`&T#4 z$NiAF`dI@1_Wm`fAO6Q$9J?f*-w%ygzbd_cO{oGeC`lZ?A5Yzr;sJ1t?@gjuv;k|7 z68AB29TR(=nl?l0xPFbit1&c|tmA>E*chR2=*uqe$pYS-MBbH(jL(vpKPobhB+1Z9 zGK*9ecV(7fCAsZ5p3!gJ*IhjKvL80r4j|K}D1l{87o0+XgMEdqCr|A_J$gTP8FLD%~NZ*~4 zxyiG&la2a-PMI%IKKv%gH0MJ<*7~FywqF;keRTv-5O_9eUC-ytsf!)Z$c_~ia@y>j z5$;jnu5pXrDvrEY8e7?{3+|N$pXLG!RQLcDrLBnc&4$fURji?jRcl7|=_E%0+pTVO z+^s^II+$S1ku!q#I>u@)&Z`P$SJ3?i12Iph!b{~bbBlpM2r%eiYtpkgU#b7?&Sm;u z-HJ`w^&qr&AeQJq7v0&XlE4ulUHZ}gu+{Rd@cfnDcjdxh)mFdH+}I!TSe4LEPB^1x zx3i85b@$C{^x+q<^~LeH5dC^~EaJipCw^B8yj;nytdh_t4OYhL>zQ@`#?Pe*6Z zH5T+${5X}{Z+SYgZ$PUs70Fkepi#q{7q)tT7oV373I+U-SV>zz6hmb@M58_Q5g1`_ z!fSD`q|+j%XLv-sCw6Rok1RJKj9nW*IG8*BuAkB*b?X)+=#cewV2K)%$F;u(CiS2l z8nMHK$9FN2cB@A+ZM(H?oxVq6}pCr8u}9b%BdvdHxC(aEvp z$xf8p>*I%*Wx!8j?5@Zu4z^_q7zJAqy);aMF|d<@nTpP?Oow@=jCk_|Tx2l3r?9{d z&ea$2NPmObLiskH(Y?=LQJ`qxVD-7i?+e2W~CerC+o0PzXV&L$J z@Q2gkfJS^R8(UvAT5p|Cfv!n`RaudzNl{2yNuo*Vl(MpNlRj8E4woD~)FWl-Anipw zIH=Ll!kX!RNcIdsGojQ>!2|NyD{_{xqWBj*O1VA_IP!Tw=U5=HzCqX%%)DIum6P}x z+@Y(UsdtSLMc1Ln7>QzSM)Rm(IGQm+-!Kv?`Z8dBqh@`_9srB-6~L-mI)KqP?FWP+x!I-JqoqK4fr>gIC(czM+qaHW|)$)xqoWGEd0>lj`H2-rxwQfulN8Rr?3c= z^1d<4Il%s4GRk5zg~9@n#MmF8qooguV|32X(XTOV9#nLC2OQ!Yduq;k-FS}?)aS2S&zBX zi*SXWy>MgY3JF~RLiFlPQ~QExZp3g#8SWobrbyXP9cKJ_Xqw7p1C7TRjmOj*2{)Ty zQHGi~^@ur)^v-sWn^+Orz677yvs3G|x}}PS(|h7iLKj~LYb6E&@jZ!NUa^jpTvMW{ zDR{=7D3#LGB5r53(4A}BddP77vAfwDr1Y3%jA4TFS~{)DhdpCD)GhHxSYleu0{ZH# zJSMX9!pmD`a$v!^RqXcO&-HI#MzNiKgGmo#sz->`O=-nbk72_57|Bb93o$XqSdcqQ z`;3vU>L-o4R|WmApc+a|o*Jq=L@(t9)idB73tQ?zvXv=TZk6_mofclXhvK;F>ZhSU zl-QbirKF!!J&tX1bYGjhz$eqAD|3vsa4buguGJRkWs%9XXrX9Iv$q9ROG@cV~T=b-U^aU320v84au01Tpucchh_H>B zu4l;kFl$VlfBEhGxo1hP$6s$JU60qS0%WtE=Q#qrhw;`#d3Ed;otI0>*r{tWtIv<{ z1qneup~SSS=yh4%qbu^Kh@>)I>>OkEfX*hX9;xHIF3ww@6Hvn^-r{X;udH9(_kSc3SF1+5$#0_2oSxep&z*{E10WHw#> z=C5}&i_@77H7d|Sfnf+scXR?Bn>f??`kNixNK7eCBg@kujYrXUqBYCQC{qZX#HpF> zZG1z*y4>#Z>!k;TBQt6C0Y+peaFL067Jmx=65wZ{sh?Irk+@}?#O>R1{B7@B78%~u zx>G^Wrg&l5GBb?)3$j6{b4`eV8x%R}E;+q59o?O~lee>k@h4*Q{ z6;ktYb<2-aK5y@UYpm~`>(4|Q-O|ZZ8jprPAgEkaVD75nJ#oIru;B)(3nt{?@HGEo z;M9Yg<=VM1CEVLd(7aDM7p z+(YdITFHC}|3WjmGw_pJ4~I>K;itL9{@Z%@j_jH^B@aI1p6~&nW(gWp2k=%ICb4W* zZP^Lo3nF*+f)AKD(gchl3ItKj&#mStzAiG!5kO~+Wjg%Wz{7qypsiNfsh3!DHeh1IVJ1#0xCer@FjMVWXU>%?I@bw4c-OR zv3;~!XUbnK*2B;+mB)oLHI5{#O52T_YbFLOeles8YH-fiQYkWHuxT2%cMi5!l{T{B zD)Lv5#P^evR4N+!dW^rJ?4(Ryz41tq<1mQNmdW4}}3H6iz_y z`qt#^1zVbjBAWJYlNJKzaZ>o!XAA(S8%q-<080Z;Q8VPVu=xbeJCZ_aL(CobuI?Vk z`?nL1-falKm1m|fa!n07E~Q8vS`UA*3#CwE%?MI|^Kl40-#};l^EQm14)YEm{c< z(+eMKAJ>g}-i&3y^Jv+~l6d0}K90*~a*uC``-W++k8rou&4%bZ3$IY}II_7!1>|G6 z$5CJ8=e9pR6R(6P%yn8@q}x4P2aU2kmxd-uy)t@bh(9Y-Dm%9a z4z_`^&CS7#&|IG_U4c|4fzc$keV>3tRqVY>^@^G|@DhLyCvHV|sXOKHv#@&8BHQg` zkvr~QDk3kEQ27H`@v9>K6EU8cLO+f!(W(@hoqnF@xfFuvmL&*>WFN~ltaC4w38sIK z?b_=rs>sS1yu12@P3X(Ywhn2Uau zxXrjC_Lv(EAb)}(e~3aKDh%-zB>i91zeG$5sP!*{1ZgEI;i)gbwbdza5KEYtIbW(t9Vdr<V9JZ7y+xEff%CT6^f`xw2 zv~85!s*?jFs2vVus;0wN$PyD)rDRODf(I{%T(o?{?)Nq|(kPJAgSNeu^FiMcit@Rw z@79S0Ttjzyc}~W_KI9vVEsA5T;G71WU^n`5vq)*5cU+E4MBn5fsI(t&25Mi1GW&M9 z_a3-XbG;--s)*?H?&Qw8H9wp{RJCZ*j`KlDu*gCphiT1%2$Lwqs6d zYzlwQy{cCJALZ;;J<>PfkD;?OHD?c`HyZ{*rd$GF{DC3GRN?+y#+2KB zf0n@?qVTNsa{i^yk6+)oCV#MAdi$CDT6s6~tTE9hf@iSh@A;NQl>{yhvaM1d*}JZBdEbPc>HblA7n z>5i`XhlISZ32#(zmWchsdo`xJGoGzN=4eTh_ryGGwPNia920mY1!%HJmZ^d)v=jx= z7Mz=2P%+1S-Y4K5@_zwCcs=3ee;CoDs$`U6Z&PwY!V4=k+@Os1TRy2xYjFDWPUe{= zVZ_6TZcFBDWtV|vq}1{=gQz4>MtZ5J#9xs{n+V7g(e`G9k$IaBW9Qcu2lh~XYnqYF za^g$4E&XlXw^=tmK|T^5d0b*jJ2#s*2mcr1gH2&fFg6Q&yzQ|q^N&E(Uy+cZN%@i# zPCFY8DZitm}ibOps=yuz#-*T}0aOu|F+S0;`!|5^VojP41ng zZww&UhTlY-rB;&_l^o)U4{L0HC!umu?PYm^+E6!NP)_PWtKJV* zJ#ptg1vsY2<3Ws0w;r?Hahe3HA=B+;r~Xbs{aNJ!>MCCbI`!YK@_#iRxtTf}N{mtk z^;0Ks{~mFKtFKR_{N2X?FA&Fc%eudGi9mC0ulB!m30bTxs6G;{9a=j>UF9*as&3WJ zQN4R;aJ>%fSyOcwrPjixf#8vA?sud}fPE10DX__bGQAcz5;J z=T8tg<%-6)sk83T@Z0YRa*5VSDA(99gD4s{wlNMmPZD3;mdE*S=$lex8;R zOjrycGBN5&J?Y)qNV5UQD??Qf)OHnxSu+nS^O?tK* z%eHUbSs+xN*bSzSs8OzSp=?mJ4;i$Q;*oy|!eIc0C*A_1k>>$(@p#d@VccM&ro2x8(_c=!Oas{%y-NoPnZDI*+yp(tqO<9%nRko@Z<+rmH8+wTm@^~>h;op>3fY>jwu zX7W}Hrx-cj7%xA50y4|4Dj5Y8oH-0qHDGq+8$>-S0CpE{#2T$ANw zYdvqvS<{FFb>5$$eoj;y3hu8R9SQ#nqK#fNXQz$XJKoxRkLP&UY4Wl74rYOMIX?QG zbTbGNN0{6DLF2o-VscU0S2-9J|Ozxkg(tNb7SNBzHoXuDTJ_LvdjVq$dnP|H{whYyR|5xteKqU6)Vk9XjeOnck0N>M>Kn{G9J^?s@=P z&mpoEyQb|i@F+$X587kuQ26pf)H0Tuf?Cs>LLa?&cScEKa9uJh4W<9^gu&NfBOH6@%UlYoBz!6TwyciY4jWSr7CIkXC8(w z%lmxlq3>#o`mpiP`4UyXMcvZ@>C|7CZBL??IjgCG^6C%f`QxVflyB+fM*SXL0-5kefGuTa{cGlCxc^4Aejm1oIyDT5viOv3H@aoBg zrQV}oM?eO|fD`nuaa?zEq>khwk(0X>oyZHlh)xoSTL1Sf&!0H%JpBqg-?Aj_yxSgXumZdO(JH+D8-SS_} z``0)w9~(J5)ye2CvK%l15*I$M-TU_}&!FVp?0>`Z{6oJjuiB`pY1!DQuK!!V4fs?W z*oFV6ehYn>!`fBOg=_G?o4naL^l!%FGjBLLbmzl=<(!CVUF>6DVqv6h0J-OdSij2p z`T76sr~d20`A<|tcBhB)f1x7O@%W$p)W7uGKmFAIzM)4QkN>ma{lARM^M8%UfBLC^ z^xMDtsXyKZ{jJ~rEqMP!zuj~EYvH7m|08(sFVfS~4!x2{FZoKZt)H>qB8}D6Y@UIM zmcDXh3Z*Wbw23I7gzz_@XrsEA8T(uea`uh zt>_;w00KY&TN;Z$L&`maKyf*IX9A4lfAVApd}+&klwUOdr(UJD;md#7imrDD82%x! zD#!0z{r^m0(K4gkTX&ZG6J^c~w?B?Z;V(A2X7NrkiR(>MV82EuVh5163py6EJnNAF zyw?ws94Y)wpCF+^#Kk{-8n@fyIPrYs`Sasr04n*95OoAnpkjf*bSt@+!%5&r50O*L z1Bqb-JWRY9Ar4;dU(o(8)%fM2ad>?E%U1<`xd|gmYV>S`w#R{8*v+h!n=s}EG6xfAM&zuOU{5I;!yDO)aqz4x z$LRa{!&%PiMwO#IYK#{Od`u>M0T&jK1dGcOg%=JD%d+D0$n{vukAoic6w;yJ^4?5? zMkf|Q+0fSa2tV?~C=}s7gS#Li+OX{CRV8f^aMPQxEB^R zAyd`S(gUt$$lAsL)ESG=2z^84Yem7^m_|@K9N%zC=hvn||0F^V(=Yg~tMOgZ6?pTg z;kUwvn+~5so@_spxzIl883`%t{IS=Y7ZH#;$_f%?3k87VKyn8Nh2HL@N<^WZLcg~a zFfhvkVmB{GK?8>8glI!Q9&yy zYeCO2bj!7goBqR)9UDj?Y_vjlcCYs(vlMa+pcmjIn!+Vk67+SwpH2*d7G_oO5D@`3 zCVIQz(MhGwjvr{C`t;4`USB1mFutbEM6_M^F&sQ93u4j-E{ND^U>t>Fcb3xCKkqM- z^$Xc}tfsck&2vl1s+!T0%yuve?jb+d`j##8aM#1S+=gHo0YY(FuKGwa`_LTv{l>ry4-NmGl42lj3ybB-?=1;V|a9~YQRiEA?&_ul% znK*i}@{;+0+o$|VFD3U{{O@XaTGQ$0P&|ka6NKT$Pcz9;>d6;ny%q<#np+;`1-+8> zrjwcOj%jHGMFS9d@+9LzeI?uUN&kB>@sn+8HPxr(q7?b_$T5n(Ti&1^a;g$X`;@&bW?tM)bZRkcC>qdeH4Z(wJkj7mCB*AIi3GN|{ zJ2V>H-GW;nH0}ff!D0lr-~oX%Q%&+Id^*V!}o&bjw9&(ojyzrT8`-m1dvaWznF z*+rEp;Lx>@F){- z(TD&HJEQL0H=t!u>7&QF%PLQe7`?+3E#Pq`!&?n&HqNl4lhiqQ$yvyQGcDVBKE!Ke zGX9;-tIC=wBeXr83wi1kE33>3#$^aF zWH(!7GTvJIo5vl?RcovJgx>If^SEfBiVk}=jW)-Kz`-Qsd@$kLur`FGS4&X$Yup&i z;BlOq@N3$dD!_@AiYfK9k15l7dXK-eWp9Ch5`_->_m+R~^v&Yu$=4S$4~zrx>7}k! z5j?%%bVl^!Y5K7s6}9Ndodce@^X7&_TstB>fiwN0pUD@ zDCW&iic|0#UpJhz4FShhU$;pxeev|tY><~SNv{q5Mz;NWdg}1 zs@(B2cDLIU`;hH<9~3Gh?K`TA383|~AjWbdj>wBsyAK(Fb1E%PA?t`;bj^Uio*R>Zb$St8L$``U9wPKBC4Y>w7iuof-oj7+Bw1KPX)7 zSWhF$$z4mK{_i~Q9|gbvxoqd3ZTJgMIH6eNc7-e`+^6BeD2e;~^?DS%KaU2U#Mfh` zk=cIK>s869`VCYi3^B>0ocJGs^8Xh0oC)swGwitu7KL?$0*m}x*z^AZs6KzxIH^)2 zG&vJw(u8O6(pmV8RlbSGqQgH0s()~84!#CeQVw9^yhogx8@p#Jl z%^^7%?RxP(Eq?DW3qu$v{6oR-Ki}{PEFTZB4&^wR2UzQ=e4olt%uMCM-Ew4Btr|uo zkMi9oz(w??y8bsG&*X54>w7Y??5e@Y##DPwYk-cym~PCwwEVDAjz?nSfRV=Zc26rt z+y=E^f&%{zt_@6Rihw#3ieZqTjEn*bu;EW(z}1HdCaOTuWjhSBsb&1X+5y;HsLZ!| z2CzR@^FP)F5%k1!_?Mg}NX~99>i5L^pIpuVZQ^}6iZ)`^WU%NZY0NQs?eq^5Pf9gH zJ(C~Q<4QHr&ez))2@E41*@#^m4`pPgtDtP!>d9i&y>Z`YvhU6UItA%l$`g_RRpxwq zmxTtGFdX9Ma*qaJUoeAlpqhccM<07|5^w?6o=^C5fcmDFYf6AUP%SHa``xdJ_dfLF z+(Na2y8Oab>XmAOy1UOW7GA%g5S5mCe)aXVjXwXg*wP?|aj!fvt_%j23=TSgHw5o4 zF5Qb21@vl8%rs}>16A?OQ_}^4SMyZ_x~>!HPrw4`k3G9u@Ap=fz_n5X;<`ekWQETaY_X3= z)+4$5V8~={q7}L45*lDEU$K)^c`|v=B|Ym>uzna3Uhh#T#OD4zIyLnKw7Eyd&3;P{ zbTYgap$HG5DD_1(b98l~L;c7B4lnV;LCZ?q6!=AEvsE0X(=Na6( zf_KNceI3sl12~pm{XmO3?)AZIvFCt)Qf=}dS94yqp{Y&B-Fv_wUbjKc!*M_@AC82_pYitP(G$Px#k%XT7ya)!*RbQ(p1m_G z4GzUtUwEzfyV~R&9dG~NTFq|>>s^C@*ex)HQ+b({KPKJ?<`jBeQ2N{^m0W$tZo^R{ z?#d8#+2m)K8TdcIX)5oS_K?g)LQ>tzm#a(oCcehbIbZRqbTR(m41Rl~EY;JagV{6o z|72Z|SrsD+rSF2{a#w^9r6WU`_Y3fzj{I3^t_PPA-6rxGIQrYf>;L<@up6m7z=V#s ze>J{{ZQB}tIKUn{f3=9kcP@|5(GYWoEOW^9PH%6=v?aNO8P2ox-hIa7xS4*+zp5Ae z-`9o4B)ZFjNC|=vWd&g!y2LmuCPpz874gR840N>#d!k)gR7uR|U)c^~&+_a1-_5U7kKgWQHSwCS-VugW=*qp&8nRFnR z&ze!++?o!r14u9g@m-PQ42n$!`##Ek^U(GIDak*;VIlPRbHZT#SCS4S;=ja98feqM z&4-2J-F28j`!D7Hfi2P4<^)Ka|0+XEIzkRyW=#(mzp0`DUv5{z*BGDQfRFpvX!viy z7kha|)%_drg&5r8(V>O=ul+2!Anl*);MHLyGn$zcvsfF;5ODlF(a~hvWHW(eltYfc zd|RO_Kp-g&qY5@_ugKE~U~qf~)L8hO`{TRgqOsK}-J2_K1n)pf@y&AygzLt%SUwSI z9WQBn5wb?kmV=+Nze3M^d+R><`W#@`SA9#P*w%Y*Z|zGw_iOQ_y_3`1J512A>3c^z ztOfEg03(u!--&M}#FiV1z`)fVY-9PjSS5_b-Z z6wg~eWok#j>8^PidA`K@1VYWXdO7n?H?QEOoBl();y(j?0G$6g{(jdT|KDLITTqu)e~v$|`SUo1Mu`*S zKbxKYikbW`1HOd2l9$uWknJpF{04z zieaW{{B&3)m7#u^Fh@CL%A3 zNZ2^jG!S%TQ2-@MLL2q|h*>!H($oxrgR3@TR$CFELm6+=9{OT&`wLZZ(i;F=j%r=N z66Z8y2*A4*tX{Grx)POY*ToB17d020del|!IisrG%tYR>C`0q0F=1kHScsop2}6;Y zDren_$jf(7V9b(sY}*W{SVo>k*pk{>!curwB;h%4C>56kqwu8S!ChWm#_ zSIsruyVf!`*l?D{3XLV*~oVPlW+CNRx3rQ$W_m!?gx1?;p6I4;$0bvg4Fr zuO*#=`OE2L=hUL{*Pk%EJJO(bI~jc*pUIz6r-o{lW`1LeROft&0%)T=L?`W6Y1a$d zK%jr$uq6Nw0LB=U|7zf}OZlx1j1K*y6eQ(Y^mlsNAelueUGT3rZ0X1qB*&fKQc$)O zRl892!YjDf8(i0-p~XfXht#`|Lb;=*{oSw%Y9No9^q2qcwD$ExIT1`ttP8p2UBr zr~kV>iEPtgOcU4O*m6c~IYPm7>@oUg5Wh-7G2@96W7yAQd}O{P6mie~UWf`sr4thp zukLHp*EmeE<36Ym156nJK}D6=SoF2a;59!A9m*)N@4avL1bbyOJG<9)n(No}&Qgxw z?q5nl96Kd{->`Sea=dqU$_pYmb}Rl`3i|toz4r=*&ADIyN1f8h{px=%1%34X%MCl$ zMe1)=dXBH^589c3SLywa4BThbwtyca%-m8^N~aovn1qrVVw0CYoA_ti<%k5+J&PLU1zy4Z$1veu9?El2gKIw_#?;w53^q58&jI zxl5q!#%1qN3=4}6))Tc=bGf?C&OQw!2sDIYU};Fr0spar(jLv*@nSIii|+}3eMR}d1cFA0Tl zVBBMhVJ`yJV}?C_&kMRA{gY4mF0E+`3XhR21kBhl$0yH~2|6mUIOl51!=@&Xk-^i~ z=2Zq@rR%35*o|F#!AK3}_2iNrW^FQcmr?~l!zJm)V{L5sMw+o9x#fSQU-UOn`3nj4 z|F`evKUGj#o=k^ABr(=V5fT^#wDmIhG;#I)V0zl)eiAt+w?RtXn&Sal2rW!{u2$|X z44+=2aTGJH=46x;BFNvziUWPyD}YZ1k=!3?(v&zJ5fJFb#JG!?mS>h|o>9PwKYOPt zBIz!!mhkfwb~(47@bEhocjElXN+{$Z4%Gy2pQ0KURO-h{)AL%4AKE)TO03y6l(quhmWXat6#qLE@o0R=E^OT6@n4BhH$9PTa z>y7A+mheK9K$|FreCQ9MlXlWcwEvUzt>8%@P$*E}vOjKp0WP3%I3t)ME;IqZJ1I8F zCNL>DDKDpq4!LOZ0n7%T#>2kwlE$A;!e=KAXFv!-z5`^jy1i-59`|NR7Zt|s3Ca0>#YbV7Ep%B4u2EMyngYCs<2*dS1y4-V zVP_wAtt5r|Ed`kDZZE{Su|1=n$iTks66qyKD5f8$!8vufkh=Lc6)-uT9S}AwyZQVX z^3101%^QZ>oE4>HGyvNJ?EO2Ier|bx_m)q&GUI*Xf@2 z%87-`c697(jdQ}QFq-%7>8jC5@eEkCs#-_|c_i&+P!y_Q)vN=0eIe)qmuC&fEzVDA zoX+rvCxREVBd~Wn)9P>u^?Y7YQd>xtRt|{+o07OX*}{}lOU&!?Kb^+Ug`6?f^T;0n z8v<@sNV_BkzqWh4=&(2f6I}#@gEaTj-=IdE>0hT`UKf10I20o@lLcnk!U6qQupC*Q zE?5YRd5%{$6eEYhobaCUWk@)LMDS}Ek35-0lu#TcEQ&dY4I0i-MQH(ms47p#@(`WD zV<4NjmZ7v3+m>Ne*jL4gvg9fyaX5+!if$PDPqayRFBwYF^6{}8K=%e#3X%3)+DL_C zyKZEd{&9km$6of*(S?2ErR4*`(hL{X=#4b}kWA}bbN9-ve1krOZL&@+IqHr&86z^! z`p2mCOGgLxX~>f@`<>DZe=2#B9Ct$-5^c}j$}$;HgFMv4Fxr8nv}l*5x~lWm(5AXE z*{~`Ls9XNPr)?l{S1>r!S=It@cgYy^@tddO^G+Kz26tw+_idmR$L9sQF@=unne8U2ilJ7%IH*tA)n;jiVx<{#sq$0|JH)b zykA$+L6?eX!s>9W>L4i(I2iaw7uV299Xq~3q6R_&060`euevp!n;Xk$|E%Wj#c;xJ z%FxEtGPwYHgmKW`^TxxkxS25Rm*Zy-ig%;+WA+~Wpjp905bA= z7=W!ns!SUJG6YZ@#toye#gBq7bQf+bUIH-j!WpVSvK5RQR? zj(K8o?Ij@JkeMg_<3fAy7Y_on0|nHhL=c9d!etB5f_^K!Z2H?_lroyxZ}VXxEkYuQ zQ4H9@mnpas2uvR36_U1*!3W;Nk44BBFxXMD97HS_j2sq(3nPj+$xu9udH`@JDwsWs zm`%213G)M*=i2=iFRK0(?~rmpW%6xel=}Lwz9`wd4uDYUdsbT072#j0W@3NK;zI8S zM5Wxqy;JXL>68p=WSyjD%RdIYi4O6{G_r!`La6Vks3~CTBzO{RaC*p&a(t~!N0pSO zt1rF@-gbW}!e~YiIyxaN%!h~%L}2?;s#qmhXRu2mi8iH0NJ_nm!B9 z(Qx4ig+B2~IA`&Kv0J67nW+1>*6wGstLp$F0c5g8thv?CII9f1q(s`7cJ`cxX|z8S zJ!J{s;0`Fq`}kV%tn2XCh-dY87n@N}(aBseP6FgQy0s zcXga3(^KL^(G21zg^IDSEh8%0+NA5s17d$BUH%Xq?W;Moh*VD@+}C-jb@x+zTiku8 z$KOlTy`vs5!`@IUwfY-x(t9jr!M{Zq+%mF~FU79oTO0lo7+VlJ4Ew^Bv?kRt)w|D| zPeZar=SVp{m3rc!A+a4s*_>~u=8@G+u;wF7&17Y&7dyjcFN95=pU@>JPj{r(&(sl* zp>0+5i_&T+W|^_%r$CW?$NE#Hdx_<_LcD7G4n{nnY>mCMc=qSADL<&^v&dUX#Nt&! z!*i3vicy7HlKl^HW|sw=&RvV+kz8Yj3sGc(Z4?%|;;ioPS2oXEgWH2ibKpSvAaHPK ztrNNBUY$jn72X5XGuO{0apXtd-J=5=5{Z1D4P%Sg=NZ7-+n}PmKZQXJlj@$cNAU~@ z4AV-dAwmQb`OF459>Ogf8+!dj<@PQHsDyP4r=kEmxP8FKhY6LYbG`0JMn?t%1mj;U z$6@IMuI;4U{UKdF7p5E;hZ!Mc+a+;IQvSUy1M^X)faSIOQCM&!%%gaD{f;d&7>IO} zv=rLIGys5N5NsZZvx;07kGYl)}4@jg?ss;i;teyPTFRdW3_b6SF#>=nRS_ga$j$+wX?m-&Px=} zKiRbvyv&s}?YJTx(TSA07RBp2qxl}#>eGpZuLsSch+;bAeiqEAC^7m@mJW7}g^AH9 z0l;)f%u3Bty9qAIYT+2M(PCw#d5? zq=E)Xz+i1~2>_@Kz#?XoQ+fQHZ9vw)#UF}*ZHt&CH@;vK<#=6Y$2KS1jpIh7Xrx<& zQ-Z+eUGb07Gli!Ir(fumFnKMKu!xb`r`$n&e;j@j| zn3Qw*ULf-(aBx`fiLamVg})N6vC(t{_SaApP9&lHV~isV48=%{NMl1gI9wqT_*E52 z9`(J|2C9JYZ1d8;wTO_8hn4}GPto?>Tfps|GrPDiolY42tVRo@}8F84UvF5ljJ{O@YY{6A?(fQkv({^E7 zQ3*}$p51NFmn!087GvhyWrJ;%&!YmG79*c*$0uJV49Y!z&6e1-6}zd7M0+H5m1Bo5 zV+pQc2+x=&mvM;2#B2qFwZ(vij3jC*gAcgK(r%H-3Ym&N{Yz|vW zScNx#J5qO4SBt8njNaFUTJm1${} zx_qNAov32s#SD&>W4TGPOw%$-*!9bHGO7pSJ=;^WcOJe3#~AD+XYU}Ns3cgoXECv4 z00lEX4uy3sWy6+YeZ+F2Dp}IxvubR4Q>n6pM~%~(LylFS#1(;JwrjClEamZZH z^oCwB%#0M^3>j~zWKnh$aQMr^TXHJd3tJ5`y-V|(GYWxXMOR|^+U!NlW0{WR1<>Vy zjEo|_PU*d{0?*61wC0lBb2GPv*m#jb8dX_}&f@c>Vgo#5qcPd{R}Of7#R!$h8{iUU z!)%>h1(vZKZMwst%}#J8`f>^5*ksm+S>2`2khAckyc}uF|_6H!NG$5}~V}_ACOHYMXcJxIYMtvA=qCo7q6! z*>Gp<)wNi?c)$ZZ-+G`!qd;~eA$}6XsQEodgAhlPYOJNgSk75SlXP`WH*RC0c-q_D zT3+R5Ewv_=^#-l1X0vJ=^AA$SCLN zw)joX?QK6VI~3Mi>aS37dcWVfxQca-h5RjR&T``#I9)EsVa=N?9N1>66Rl*eMZ^hFRSaHr|{8u339n(?tCSkF#g?bxnwf_>NjQ zhGEsmfbNm;1Tbwkkwg2p<<|n$s`vfVP~Us<)!qzbx1_1C$Uf{$cIH;u$i58)N&FSISdW4%$0A>Nkl%wA@6tHp|135#DTrxl|(dJ>= z(G;#xq|<0>;AmRcXx7Kk%%7tfv|~90W5rIR7=Y0e*RjN!vC6oynxA8JwByxWeVlkl zFnNX|n*TU9G%<;aoBTvDIg~Rw=QOptKe3!Mws+KrHI4OC8`?fWR!KWmo-?*mHNw+H ziVdLCOd3n7fgB?sKNuj$8c2EEbaL19bs+jrZ*Sw!H7`V83Pu*D36MVtCy_*}(*&4q zgeOOYX@R5n?vAq5j|tmYWL8V%R^lI)~#z0Ufy?G>D;p-ZK5+&%^})0os@ve{ek2kMW_X zETNEpZG9L`VbiTL{s-&B{eGLbn9BIPlVyL3`KrwoGx=|`6dsN>|IPZ4bqv=Gdsz9~ zpZQx`VyC+&D*P|6H~$p#|G(wP|2J*P2l$7!l>g%%V+a5r8YY7PS}?3&Vlh>~LkJ#h z!$YA`Z02EPns(;ll%^HtzpppH1`V7?LW%Krpa3XCS%m>PM{D~MRE|wAEcOpEpK~WbQ_shO3epK>_mylf;QiFqX=S zve|DYTO^ZNzOXdZD|_i0q6Y-?K;^gaS?8cILY}!L+k6k~Binq>1ntm5>TXndo$FWR(d{Mot$eGI?UkGJ~df$|EBjwkwL#Rd*{3lX-2cyoSW+$fSPWqV4}p*vNs} z#&^`Hnzm(sw6?Uo%Zb*OuB+<@Nj$k4Ums-c)u}MhI5$tMs!l_u#+LV68ojHzTR(e$ zsA+3{M}1HurM3M|We1-a(n4c2{0S{I=lkJ6E0Ea;A$Neao618uQU=Y$Bs@lANGR`~9B`|Tas|p># z!zzT1$lRN095{c%bvBK)u%}(4ja+o|xvILJ9tIJ@paeT_)X&}ndtQf4iSRUoWY{^^ zT_%Jqoxh_gcm{wRC1-cD_c6(U7bfpLJrUXK)qPGf0kl7}Z34Iz;4#KKT`MB%^*Uhh zOPq+52UJq-7}@vC^0zT|yC8fPWA0o3mRCT~VYAol_34uB>~83`k0n9>FmEcY_>fGo z%frEg2YQ!V((*D)q)$Q6z>Rl8#4s{u&Kb_WwgVd8x^I|Vzs?3_=>Q9dboAfesFD#L zqA!|wf-c9Dsv97xfxlYT@t(^Bdh%}ruwJRws|)m=eXe^kqsG?oY=mD8bDf~I2UC+k zpNEuIR{iYF7N|m3#&=zE40njqZ9aNLB$SU5p3<*>3MueVkVw0@P`C_`a`wjow4u9$YqPMDn^6+;yFa)bFAnfmZLDP$KZ*$BA47D4IPlaXQ1_)`xYLrt%RS{e~o@IuRBZ zoKuz#?a%BoVN!7&##!gXOeC;&)4?7-Njpw&NBc8}eH9sG5e$y08*U)KZawPLjJ76b zI`c|dX*>bZXL0a(q{^g2mQH4z=ej_&z?jav`p_(ba?#;R70t$XDWK>L;X*2aXwYod zk>DnW(Uq!K-K@y7u9qaKEw|%AKTh*I_F2F|9ZK4tNks=zZ6qjEHJmn&!$5AEGF~Zf zi;_-@C@0z0=prWJ4lp3;w|Is&*eJCF+J!$@A!d|0g~W_ZWwEYM-w}Oly*yjmVGdwV zY+i(Rb|;yW3#1Sq9F)ofyp zz1pbfMf~rh`T$O_@US!u1st3CF~f8x#Sc|VGSmi3o=rZ7T{U*xvGZE*TAFIj_a2gt zFE_o{i>jCBc0Tw~*L8bx-r9br*o*O_v!l?@rx=$ zN!F))EAQ8RavR2PXrDiQUH6DXhT7)C$Igpxzz1$>499}r zA`zho7WS@@akC=x(>D!_z2pfLuQuH;Q0sB%6dL@Mxj6o4!s>e=tX!Ih)Xlw>nN~*E z<6jr@DEcdx*aHHvzmQ~KJ~{cu&AfzbF}vNIO1M@Z$Nc>Zx!KFqes11ypBxpeYQB15 zVGT@VhKcLR<%rl>9XNE~;;W1A(3;Spai%);IUNM=n`A@!v+UL2cTekcN*irY_Ub6* zsK$iIJ?ug1D}#(zx051g$1%M%n{VTqM=Zme@_yNTot>u=_<9a^e2#VsSx-)11yn~` zUfVuwBQ-bpe4>5TB2KB_`7XW8@URH3rUI-U@5yoTqIsTaM?1F$&%IZOIqs7Q&qS{J`L%TH4Wk!Zy%nj3{O4{5bA?)XMU zaPREHdt=&Rc!7ga2@U<*p-8Epy+;vyp`SLTE(DnxK=cESh2_^@#Wu$5f`I;2Ei4V? zcd&un$dKjM+anxF@~NXBBs2AlwyN;%%#p297yXDUkN|sM_wwM$S|PfMn_J)=?f98( zm3O~jz4@WR$OrnhBZb;e^__1E&54rG6^84dARdSP^yg6^0;djbQ^?)vM4JPTozh+L zjAHspSch~5F<4MP%Y|3lmZvoz8h`^RPd2xb| z+7N4{(BQ!y4+$}(d45D zm4c7M(HYRFz@sM;a$4r#?;7~)D2Q+iqP5_9xP>sk0P-?mFS)wjz|oEmw?JJDo2Q86 zV@DSogL_Jj;AzAuHZaN6W#s;|O$0%wwqr09oDC&dV|aF0?$lW??!rri+CucL00TXo z*~5LaSoA?rAxX!+tJccgO+35^>`fRL4-h&D1#d?{(rk&!U|!$?fM=+W1r$6x4H4dg zwAYJ!Fg*LQ0I|T4dQ7QAwV;xJFFa*N<6UZ`;D&Tn8U76dXLT6zYlUbm9ddFzgzv2+ z1O=xS;HbgvA2Hx(hyDV_Mh7wYGs0XyW(Qig3$QbG0ckgI1m0H1i zc7gsCr=Lit8yH^tcVH@lU=8kZ4kwx@0MDfZQsG39r;sZs?yFgXaUYj(7#j9#`QJg9 z3fsmF$HWH9TVrcgk>k7A#rBlHxIS{dL4eaYu}4r&*9gb~(rHSVFm(lp$BUE33i+i? z=zW2M6X}6x88R{$pHvv49;I{A$7fXUbzOkNV;3B=jVRa-kdA`vBO!O%A%{K*v2c5V zillry`^uM2zY1_v^`)L{guQ#L4N@V?CIRrUlPzModd^8yDT068!aUaPg10FN+cwcf z)sVd**I5L?0F-dMENMy+x4Ivnv>mcp;74!ZS6hyilm5&jRha<=AgEVrSx6Rg!xVMJ z4CBScM`B7P0mxT0Lnic%+MvhaG{Vin!_6@uypmNf?+93h3X&AB%9^EWkIltH5fii0h*)FqGgD3b{cLR09ciu+x}F_#|2Ny2$_!tuxhwaqQuE zFBr%iui}U2B=|g?h}u(Rmmpo+z?mbL?kh3F73^2HM|ds>Y!xIRhcfki1$!haVG-`1 zjdZ!1MuMJ(RFcV&qs5}49ED??4D=FM4>m>Off_LFR7iVL<;fMEOs)Y_MPjZIxuZ52 z{;n=RwILB;tf~4!T2&ri*Fc#LFy2b=LRt=dJLt=6RQ9VK;20vy zLIh`%A@v51Hy4%WUXsS|PbO5)PF-J|yJID7sQeTc7<`nlz#c@YLg>w!AXABt2glXM zD~$jE!&Y)9pdj8A{3R7U;0m@$mQ%s4Z(3xkG6n#{#}k9=Nm&?Q$}8NU;WeO}c#J1| z5D{A-FC6~|G_}?iw{g0h#sSwPDr>U9LDL|swmjU_0Uu-=A2?_{&#FR)Eyn^9Mcc$9470*SK$}MiH}Go0Qmm_v{4NK|D59hJ>nA`_cpLZh34{D906!EVBxkGAEU#gS#ID-KHiT85tw1ayu@$$SB2=nJ?|Z*u zEpr)FNsF$JBDQN_b+MQ(CAoF1<^>Q?&?Kl;;RE4VQqa6927G@wZnYeNngfx=bROkZ zo)ow7_In0r7vAU+1mPiNs`VarJXLDakr>~R_YE&$gZuM~N-PGLLY!WEFtNj` zcs=VKEW`S&5yiCh?>^RQReML#bv{le3#9~GxtlB4v}_qN_C(u2tY-i0a9i=G8;#A5 zl#bE1G1uutyRUF>ZDUqht5!w3x+<{V7bH!TyKJ>~MzDuYMYwiR@@Rj67>`Ikj#Z{3 zlS|6#4lUF@u+nHtZZh$4(G6(ZM1oSQTVFl|7+!i!EV!N*;Pb)l{ima=1NhEPQ14fY zN5Y^#c6x#f)Af3<*9oUW0&rM~SobSTYZ*ZnTM(Gdp^r1Zm3P*aG|! zS0`$!qA~<_ZgF;0m8bXC$fv!=!tZHGKgp@dwRV_YOpd&Fhx+nUuqP2N8AeT0$Ju^(wll8x-BiyiU%(jd6WB9^A;}Vh~9%f+A>W z1*hJ^u@LJ0eJf6lhTZo}o*)U{`8T9LeKKm9C8dVG1Wa+Cpm_Ga9{jy^x)Cg%kq%1L zcA>s<`Gq2|h3CcD8dcw?SL%8{L64gGHtMOapGMrowmsd z<~Bzh1C__5jPH@#G;*Kj;~ zOXp-^Y1r9G*!c$dKy*sACMFvPOYH7bqLBIfSi-pImNs~JTLT*ih zSDcC7z`&X9yq%6#kxzM^Yd~>~J~=d4VZboxVLFyg3qK;lAC}`(LJ4MhiK?GM*0obR zk8r-Xfv(->Tn2mgzkQxJVPzI@pS4^WNwHU{AM~H@a4B$jNuFs2{EEB2L_kN82$DO~ zFcqfadCZ!9VPTh?sV{AX5i*d>_=cQ7o3*FWmXDNAH1D~<4SAyHC!jEI`|GuUO*zBq zH5VEAt2tv^VavAo^-hV$^QV(^rW@9Ru)NxVIl>M2Bke^6JB@>NrKt^PH~DG)b$Qcu zgEuQybmY>X*=JHV-4FN`6QJKdZJHJ8^6Sl;AFLWqvtzh!`5xSPXw9SNvJrJlq^N%* zcO$WF%lGd2152KRZM$QOC7~@3mvwq1KfmUV4&$PHnW$aD&cm`Dr-L2CV1=7jT}rZ@ zwe$7hgk4kf&DK7l=%78T=4}|6aO3AY`3iG&Qo1~OIo)sW*l0?ZJlM*b+8KOvCx7F^ zXx(O9(C*|7nQ9PsAl<$O)?SF|HwDJUQ%Ujg_`UT9lAQ+&pEd8mrrs~#?0!_;-IPBBB(V?izZbRPTmmu>Lto?5;8Xq4VY4XX22k~#*9L;$gbk!XJ zwV-4x&Nzn$S1QN&w;ON29X|6u%$+)x={@>vbwp)0?nrlZPm2t~YxU!O8T&1dF8IsI zgTx%X-6Lqv=@8Sg@C&jG@zWZied%XpANLg)ZVwHn_7%)du%3O9J$%2k_4d=}Gl7|w zTDtQ-sZFkD=Z?!rYF=?c&;hb*&ST}TKYkE| zb2B5aJHL=<9bUf&?e+JN)X=ZzKKsdiEi?LsWIU0#?(ipe7_^W67kk4x=B?*;Oa6A- zt6v;^hx;zShCO*!wSLw@&NsivP)(Wuwu_6 z(*gK&_Y|_9d^2oy{`6*&jUNSJ5&iagF#GADY1*UVJ}g@OBY0mpAx;6Ws}+DHzBnSB z*5JfyESW~_o1gxv%~Y=B3&jx>rfTI&&V0pOL!qa$>M}hMca6U9CurOPVeHY#hc2JH zpTC|PP5JJ+IvD>}lh=RCVRJIK`pt9WAD+AKlN6&0e8-<1eCj?tcQpCwd$PfEpOtX% z%;WpFPcMUL8Dji?oPUdbO9yjNJx}~{ivw+$$L@Ru1481Q`95m?sFT5=CwL$LVlAnc zZA&L%3ntFNtCxf5UXOF(E8T05FBDuqlDYHrY>KB*J&aG0id~fpK=y3!Q0}hJ#F!x1 z7R0a2D5patMVBb=4*L~h)i_GxY@{thUS4uihMPOUKMtNTB2wY$iPKc$8?GUG_^nD_ zU^2Upxk*DLQ4TVE{-)%#dww%OKugjr6fT!aTP>h{k$TTgOAc~}>$Yb`n_op$h+gAV zRi3r@zuV}RfUq@Htj*H5pr`G4iYE(c^U4!iFhQ~(FT5!AR z<8oS_j^Pdp>6_EUzy!IyC%@@g8>D*b+vam`V}yvFwJgsS43Zn+w|aOQJbSEuKI=4W z^0@h|M!|>QeWAsxCzoGC#I!oq7-15?c~^x6yJzF&LzTg95ja1elfzR#$oDE;1eT4y zI-VjvW?K;J_Xi&%c<5$7MiFo7R~zzScc?t@`$lQ*FQ;fQV$t@#%_zpKb?-~6ZQjhM zZ?ex^n7YVvgBXWu1zn}>HR8c9^Ez3+6+4$*w*vg%;`aK3Tlm%dB4J!jVX>*55h0(6R(v9O1c z_d~apkVW>UaQw)?rjXkMQTK5(wFIL`ju{(2wKWp104I+rGw%Ym0ANg?!J_M5xs4i8gS7qk$VH8 zB>w(u$Nu)=JA|hQ44Ys6DF!O**K+!6>?gd8XR&mc)^{ZEh3jv9J7x1gq-|Y9!qdj} z;sw}VdfgDp-2eA%cytx6s`XdYm%p zOaxJ#`e{%##xB8jS0@J}8OpyvH4&m*<8i1LuNqc7>1Rlk_IhBl_6$53H1>cG@Hj-~ zXf)5CT+f#|Dg-h#i1;a*>PpFmi*;%LC?RVLgNzpe>mo)x3oI^XWr0L&69fELt;>Ol?e^*Xn1Am<{iwHOJeP6h2zbo*O8Sb38cW{I`#bOn=8+J9rSX=A6H;A z(4E0?9+w(Eu5)=`ZHVRgc%ebZ51CeT3{}@n#Op+E%GJ{MMjDQFKIzP}2G}DLB+kCR z1FQh)?MfY$a8|cdy*6APn{RC!bawH2ZS?v3d|MBei);8p<5lv7 z_F)AV_snK=bO55`+@a3BG#1&U_Y&h>-+@<4w#k9Z!s}01ue^zikw>bIU9$?${NKMe z{ocCJefa7A;)+_*Kc)Zz0JH#o%m;tSbHBi3lm!LQ1VJ7oD5FMZTcMD7F2q&Py%ID7% zz(Ip}xA>;tUfZ`DQn7Rz;`LIfQr&9P?sSH|1$Q}=R2L8I+fsY6IJ&_OzYm|<9iLwF zZoAlY>%?u@$J;}*B1vXJ+ZeCbkxAr$@bf7t+zqHE?1A< zTVzVVVD|Vj3}oY}U}j7L+zzt-nM@XptCRXg2H%?)0R=1mP62$vmPKWQlo^sS4m3BH zw+>{pFsF1tpI~DI_6|mIwYKX=(@@V9qUAX@$~d;Nk-->^uiDe3q7r-qN>a;qCE>i- z&4A zqB4CY2ax`#!kXuMKS>_&0^1N-fFK89$@vidU@eIKQMp|lC%bD`;__rSGZG!%rGSvU z>i{Jy2oblF)s{c5tibSf;HbjqcG#)L8oJeoCK~g)rRJ-$B|!eMk~o?#*g;OFzg=b)nQ>JvDIUs5akd;4MSv|3T^d%J1~NeS??n?D6|!=sR3Ho zhd7I3I2}|6UdZrb_2&aGISzY-@h}Pt6|oE*0M-7x_EnWk_(%QdYdBElDs_vioa$UA z&j2k&J4!ZE=V9tdP2L@oVYYxf3L}GMXnF270R{6SMme2MQh&0?0AeYW%Xl_^May&e zpTt72=y4FeSgJTs!5MA2Uox-3nb7n1vR|%(Wr&SoGBQsrxxbGeB{;WEqUHnt&1-wt zY{`AWg#DBEmNWC`zs09QhJ04Sm_>cRMnQaiSK~dv(K8KpGT@-Ep$jW zD*h+V_?48_=BwZFsc)%n ze?Dl@y8RWn`bt{)`{D0ovQ*{UMv9zE-db580fV)00Sa4D9*Zch0K^(a{M&1bYtDcz zBFY4X!7&`x3U0gZ0H9>|!k9oSx#}6RfS4KvI(0+*J0pEm!n_e|&E`LUu5*xYYDbKeeARB!f=|05ApsF$%U&bSd@pIow8{0QFXIMB(B& zag24z7h-(=Awk)2HOK5F@=v~Rl7nFhhG-MYjL#77eYeD|J!XclZ9`@D@R-oEJlgL0 z0eQo>3GfLE=DSytyyWYcDJ53lL6xJYCVX+u`z6`U3NIf@t@ve z5X;*+{`@$O!G{9iEALr&-~(Vljtt@wQW>LbYB^wWI0J(o3_rKRlnwBfexF~8>b;#Q zy7xG?kF|tpFt*uHks-A#^}##$MKxR1*{o$U+Xvn3hFROwpbfopdvlnUHQwClPD2H{ z3`j>zX{uD!CFcDOyL|3$dL-R;te(&~Efp-plSD`=f5O4AhU3ZTUF`}hZq5zmBdwOA z@DgZgxe*V=e8=*6o$s9uty5~znv*;3Ug%^p9JNKlgO+;lQ%(yY#p2-q;_WTGqJG=8 z@0no+h90`ROKB-#hE54-X%XoXC8fK&ySrOJx;vCm=|)5ZrFlnx_r34mz2Cj|e)hB8 z_5KI5)~xltuJbyNuSr@CdYRa%8IH2*tKB}|Q;?daBib``sE_RirT*dqG_z$*> zVs`V(uhka9Rr1STf1NI6Uio+*UEVBZQ%G#~EEBvzOpks6x4|?oU!B|v>3D766!nZ? zncA{#JP3Wx41H=#_SXwzs%VFrvCqdIzuv83JM8si^6kZwm`QMdbEhf(a^9}vU_~_j zrf+QFmtF3&c9Lbau^~1(e6{lhyL3OUm&8og<$X6Ko(?N{~2iu zURSL(d8H{aTWg=(26yNbM~wgQWU`aY0?jsw0c1(Myxjf}8PN zU#*{AFE36uH@8fDJ^p^OvWC;rI;3*!oN@hW?@3Gh%;&Ff-mScF^L}I`N$TLfLScWA zizdER_s#pq_39mtP&e9x6Mur6HB?ohUXtpQV7{AmoGI5ZVJ=(`aP9_4i_qYs>hIAn zZ#GYLLxzNLPUA8#r`8S zyz9k}U(#YmYK5VWlPf5&U+oOi$4)QbeL>&)3E?(5F2scXsiOZuA0d#HS|cFE|5OR% z!{~RG{_iSbD)CQ1LL+5!BMB^zkn9h|#=ZV530HE%-*KU2iJbqcQhSXz1Z%JuLBihN z&_(+>tc+%f{*?A5XR-eD)~{s{`d&aDjH~>8`~Lg6SSr zSGG3n7A0|9UnsXX?$4DX?;{hxVQ;n1$B?kM=C3QQuMUy0x0Y|K-2uq^$Zt~WaKax_ z>W|&&fHKIl&@*MmqcO7jAVka3|9+F;g=P{w3SGij>qQlzw_d2b`)50&^ovp@WY zyHRk#WEAMcoF;{~Qi84s0J$xU9<0dzQU{w2d{P)I&8!muOauE$v8S5HkA`SIAd#dG zBAitKcwN*NS_=fi;7p;6_&b?pkJ}K~y0pHKoGLpwB3T2!d@nyz@L;bXRu);Q6_b?R zF9I@?ViRVXmTS|VpE1OgxD3$8O59Nv28k9%58(2hFW!StUZO|Vsa6;-5CAIb3K0q* zFp#2~7$oCoqkTS{z%CdEg@;l%Q=0GB>1^|wsc+Sl_1Hjm4Ydr!ijlZ8Q$Uy_Zg5>SC+dlf}OQ8h3mq{%T3 z#WdEkAGFTLu64i*0}POQ%5V?U85c?Sq2L+t>dZxV)DMH=Zg{oXr)-IygBNW1v{-gK z_;eoJdlA*~V7^V7lzkNRYLtfMtLBulsGZidhJ;Mz5KMY@P682%?e&W|^@isP+N=&iqx*j^lE%n;aQ zc?)n?2vN0f(}^(7R^J9npS14eQb1mpmwY+>a1^g)WqGrJsgSMm@$w~H)q5M)yGn!d_Hdx=#jOM{aHHPJjgTO z&bNp!0Y2UUSZU?ki+UgLu8YIJU~f72w^v9~s^kUqFKGu(E%i=2<^7#&oHs2e0LPs6 zF{ykHM)Hs+qID8PCS6O@;UJhD%vARKqm;4GBKJ9N_f$ zj*JU!hP5w>acac8!uqsv(?2{Y*#14r@poKEen@2bZ#Z`z`03&z4VsmlGxrGvC=WnK zG9r(fhDZ1JPXF(`ViHj9&j+YV4-=NF|G&s9YM3`7O%{;Y5B0x0{l7b@1f~s^Qy%}Y z2C?DFD#>I2l~*M4h&7oj`^y^iJFoa(4@5}#(7(|p|6?Hf|GLx9Fo^Ffat=_fRa&j) z@dU7}^}M>Lx##If2>duwQF6if?h?tu2r*V&-Hg2|8;NCm%DhhU;0d-9jd$_>kTJj% z);~a^`q&S}uZV1sM)F=bsLvM`&1~wA;q4R@^o1^wDwxcS*%Uw^tA&CP=%_Ud%Z)>r z0|-;f3YywV{-5b56aqJj2_s>KDocLwojg1F0X2L z3b(N2!gykZS#3EV zjhWuC6HaW`o|8280O^K%m)3gv!RA|MioNecc?Nhbp#J&^u|s!KRJU&>_^DuTJG$JC z6yR9!Xt59Tn!TG>Ih&!yi1C>! zGH!jFi1Gsfr=s2hOfgs%$DfaFsVK5chm@Vb=^9OdA*@NIVf?NFYw^Pjb)gzV50y!R zf%IuG-cU9vq?rnXJ&GIiyW0xj?CI;uD_ytT_85E~{tn|3Ng-P}C z4VXK6*~&a0^J`PhK$~RTP0zSEkXBXgpr>LRl^(fR6GP~mEOqGnNheGQVbQtY>g}98 zof1Dk>r)1FdOK)KT+_bC-IeHuK?n~@AYzD6>p1X_^M>uWNK~`QZZ2E`*u3q8`o|gs z2k~-qLA}=W8UgI+`f37-p|l8AM?|$yZNN)Bax}yq5ysuPC1Zbhk$G}&fq89^(IqX` zOI>n|S>y+(KL!iM#E;S<2%P_8UHzVQQHl=9UK?Ga!%w*&rQrP@rnWVK6G1AI52y>5 zqN689c2YmE)6VG>Ov?J9hs6IFD5AMipE-=tn$g7Z%o;YIoCt_aZ_1v;z&OH zfnJ}I36DusnecW4`T5v~N?t$}I2m$ALZN#c4jj{*;AF5G56-R6#J6G=q0$(CEh(LK zYycJ8M6U;^`38MYWPZ%#d_Q4(oIv;GW>@pcfHI z!ZXjdvNHU^-L4uv%V++}wp0=xu8PbLV-mZS%9rh`yXLzTp(6+tO!b9RmtE+Aon=p4 z+W}b`YDFAb49Y?5vu86dCGvLiPZCDwqpQyf+0M(Ry%c5i1qs#ZIrl|umgfr}G*y^j z+pzf@JS~i#DF+E0D7LX{XLvVNIes=*`WU8>JNqL5G2N@_a5XDREbv_9g^hs>`EU>U z&)QHG&Q~{Oi-RJ`5s_~z%~_O|M)kEFc-ty1T81A74nIc@M0V;T9Qq1oJ%Az=t|<&P z-z-{q6Q~$v@(W%Ax&MdDDu$Hh zr(wMR?y~xiv*N#Z5B#VT72!m6q((+}0`YGc} z4&=n0=R6sRAWue+R3iLcq$f)sRUBugy|x~$eQ^g9@@(#r?H3$wA&=+#~%hXQl z8}|FIUS`P1E*5@2?d9c9Na^$|5V0GP?-g0;+HcN0z!g(=IFT4%JCzU>1!$RvO8h33 zFoZhzf*_bS+%jL4B=h%WwHyhs#1->3jo@$QUx5;H(!#=kfohvEEN^4G5zGLqLIqrD zxLTZ?;3XaylXZV9QB&Ir$tAEzBSz7Gvp)@0^I)@(r0KrsPPN1b7e`w)Um`LbQEM$S zExQ!{c~*D~zsS*Ky!sysjnR^lX4%C9^tNTWas>OCzHvqG2ednDA3o^VHJ`_I10p{SCQAF5d?vMM{dOB}@7`Zcu~K(DDEKTdcrb$s z{b%y7UFRipi^KZ_JfTD;RH!)L3It_X z!hb{aP)^J-=kY>;8AAR`<#;5eJ?Lym#r%W->j)Zz<>8wXRC0svLzGFugEbH-tMK!w z!0&RfE|CWljb@B$-8=Jvi95`1M zP*^Fa;6V7?UYqZBEnte7TY5cUuDC%Yg7l#ERWv zG2Wa2<+B#V&q=A_ryzB=cWN?H>1N?5!mUZ)(U5NwzThF<>7MZdq9DjFMj~|A{cE zB!)t;G^RO;&(=IC3wvQiL3gT zdq|cZn9&tHW_0DO{NcKYI|S(-dJ=B}MHKMZ@G0vfzI;J8l)-Z}$O-^>0BZ zuvIKgkGh(}y?Rs?=!=wd)h1j>x;&9zw+N;3-zg;Zt#L}1&yLM!dAnwHpZA7(6tRUL z`v|fzh47iKjZ1TF4baI=&W@?BjBcg82C& zktDVg=LN(o)?Ag@QC}V|T)9^e5W3!Z8Pk$=73;L-#ag4Lm=vq7+-xq?4v_*{-$q4{ z1LCR|7z{A-{QC7P@J<%QkJYV;O09FapxWxlxVB!?5AE&|Yk3a=m;u^`nEHe|W?)c^ zXO}+5cjy`ID-JCX93!jpjht3qQ)Pe{M{Wxa(jF$STLyT7%Q>TQ)zK@q4gDV~zZf31KTyyh)%j{vSmy+(b{*nK zcpslapYi(0oyBbN+zi}t+%#;y$q_d(n?nDi-9g5_Vl|NS5y1KDL#Yc6lYrKrtq>!5 zCxV;UdtNs>9Pe65Ar4cNr>(scJ+;B_DSRQMiXHen$HCb7U+^+6`VTcI!hKv8ubWe! zj0ns`Z1St)nKt%5(k6U-Quo|_t#1f^R~H+gyhTURHY_h*AD@8iOo+CPsCm~XW^_FF z;4~j}%?}X+<-T~}&^BgrSD)IcyyG?G9-~k?#RSog1>ES2MBEjfE^K`-;yzkRv=mMbXQuV}EZ> z82B1N>*a{dez0I5+Yn z2a643-uS+vzW}=3&+oBnI&UOdz&WKl?>}C0JnFdfyo%ZzDRIcD>Un2nG^GlQX%&%(&-1oeR+pa3JZD#T^_9#90nU9&9CM0yK~auhKRko7Whcxj1-#{u$w zc_5Xi8g@?#AkcxS6A~iPg*K9L8;WX#m@+_HK$|ytd3pcxnKfXH7sEzf7{8E_M7jTU zS>3SYcTQ6SZzo7o6KXC*8)50fR-kZH{4>K7S)++!w z;4wNF=Kj~PmrB+&f(xAw|c?KVHP9+Iyc^J%|=@p#;RQ$xWx5^R_#Ks@7ZRVCt z7H;?Qy&oMm#W28s(Kf^&j|_1yPs>Id&IDxOHq&P=macWI{Oi5wf`nebV_3LChn=n9$K-5~u|9VQ3KhjRA3EUAr~EIPfuc(#ay z0&@ir_hsLl7p;A8h1TW5C6v|2iKP%MllVPw2k zn%1()mRas+s)C{-AEP(_mOvd_wZffq23eRdj9`Dv!T%LQ*x8QoWBUH5yiQqrnp9#^ zrva{$1Po&xEOLrV_pF}rs7X$IC03QgFrkAV^r(+5WtL0TBDfp#2o+eRSrli&^9j&X_cNhD$A@WlJ0zcAh@P z(DG;1sH8vN*V3{c^GOg9BSEtHO~ZHGzK0$p{?LnKLJ8R~L5UyfV~8ApG}i#s#uOGuY&uUAZsXwAUtM1( z9==`h)W`lL&~FKLuy% zjN1dWKM+t9&G2)s-w%eb??A+~MvF*2O>rWLN!c<|Ph&>N{+}NVjrRJ(x_d*>{%Z*6 zj~zOYlNcWMY1r0W2@ELoc$&;M;#( z57k;2q7Gv%{cUZTp`? zVA*!E!JGZ<|5FGk0&%xwM&;k03ZeuOYW#g;@ppJG`z|Uw>H*u!{OEK&Xfe{Gh$yXI z)+<8}fmbs@^&gNP#a3QLo9d3A2R4=Lr6-3bYzDP{_H2w1&jBOWv7m;LV#iI?S&i#T z_yF-CCuCNH;%ieMaT5TC+(4}l1Ql}x;gHap*aLx_CjiK1bSwxWQ0NN)eKg`mCOZmi zeF-q;htpAlhXHLMKEB8bb9mp;M&AJBdTZ$tA3JBu|>}Mx!YeSA%jn zn)r{<=7J?dS>3QC<;cB!*<)+5b~OWl(c}0%OooKc=yb@7z`(;$gN z5KjD>2?q0P+FH=V1lX($dxANy5>5Fp*=j0|n4`F*`C zyFm#elr0oIt3Zos=^Mo6GmVg=!jv{~p-ZCG7~%{lJPjH5A>>se@sR6o_#|NHD2c(6 zsfN;Ax(Oi10g^s*tiM;Zal|GB1FYM0Ik~}~1%xOZ8;`218?jYhILFmj@bLD7EdJ(p11phj{Y(z!G~A6k-4W_@}Jyp%2r0OTiD<6ZBAg(d7!2H# zOhMQx!qOjb7Q>716+_Zz12WG_vEbI~F@HBk005-_kzzxE{%3(2gJP!qe-@|_>Z%%d z#{D~FBEdBMfzYcD|4Olm5cU9oDA72y{{fjO=jr!{K&$C<|AI{Pg;$jV{rnnU4*f$B z#wkFUszmbF(#Gx?v7hmK&p#LgqBlP#V?eFMkBc&)5XS8 zE#N^_r18(fD{xrlLLEM}D+)mqtpI8E`mjtN zS}+<7_&cH;QMiG4DVc|J85pa8dcPJ}**IxkLGYwo#Js9wdD*5~F<%%)VmxmZCoz0g zpjtmd92(PbCsx7PFvlD*)c|3yz-^v#wxMkvv&Xb+noqWQ&~$4nN*4)?ohfyRktOfW z2f{pK;~7TSN{SUd*wreaFGl4`y$mGPDx@kskm`z&uo@*e)J3MqVA`fqdgAH_w(!T$ zS9Wbn4|nC>#Rae4(YOeg&#Oj4Kn5F&olzp2Ez>r`FAUUL8h>6q}&j#O0g0_<>2;*nf(~bGOzz#vH(3 zpuE{=vN0v}-XH**?~0N@Wj|D|U|gu|1QaRMyNBc`j~C)|O}4UR*ysO%p{smE z1X)L7>w%OxUf6?tK3+ejB_4MEn5S{LJzsq3bAz$+vHS6_j{*0czt)}`d;glVk$8J{ zU_5nqy^M>H2K3|F)P2Ei`q=WY7`7o#dq*(93|9}83o!TV%s|kQ=gUpO6 z=xQeU_;=_;1i(_Xl0eArF23UN2Q0A z!Gd`A;LxXQ^aM$vGISPrn5O-b)VxSuo7I>=cI zoN$0jk=?=2xYF^k4Y>Q9kY4nM={!-+lN%Y`-M!4!JrOqWSCk#T7J_a)kv5c@X^j`M z{EK1t5i8#{QZml)(w4PiA7Z(PB<0f(xTq=Gyui|9MPWhl(iWOHbUjF7z6aS3)Q)!Eim@=EC)&P|q4Qpkse51#E4Cb@ zxh!3%YHvc^g$6TZI}$u}%fl>#q1A`GL%5vj@>pJn%GLzYI@(n@Y$$TBLJuo#={V}5 zUTe3|+o(r-@Eh`O!-pi`K{ zJvf?J@O*C~Sti;TMo&KBTf&;!6XI=T?{A3w5zOnVpGAJvIei5IFf^bR^OdP*1*@zm z?_j@bdG#u9;uFvKjU>`i9`7dMd!5q7cr=D29T;vWPAeH*TAYfDa?DvY{D9AT~B#W<8GbI zzkhHZMtrG@*zFrR#Zt|a7GUC%p20HEbWWQw`6Qe~*YNhN3a4W)M6@_^z14{Ro_O&> zmK}8+)A@paViXX}r@(<_DjhN58yv${(i1^Q?m^s3J7n}44oTS2t(|^>`XJp&!CWSQ zlI^LBV7hv}vvOb2MJlTJmU^^Bm#rQ}fF++?RHaj-ehoRnd9$jo70V;>aFJ1IhlS1lK-ijWHlhd!BuIzg`@xB?~Ajw|~;toY%8L$TAXIT!` zhxSBT#J(n8B$pG5mBD)I)t6NqD$DuPJxZCokFd2WlMU_{YTkHWg}VH?>M~&SQE0`p zgj;QM;N(ew($DqC$F0rePn?GQE8%gv!-Uy}u@AjH$s5(!g&o&1m7xV>@%N!}Lf4sL zB3({7btgldgLFz}!^+fUK|4IvS)tAZBE(s#LHRG8u(|~ThWxx^#F?eT0sU)0E+`zm z_XofaixwO86iwm*WSd?6u@OD6$HDb>mQRTe zN!dB8C-go@nY!8WY@xne3ji#71D80=YiBo}nKy~(?M;fb1Yy6wf9`Ilx4Yr8wo~Q} zeqiD|L$b1X67&9M{XM5RmI)Bg_uV<3#`nAHRYX4tAcusSG}ecl8(_%obl>8Owdf1@ z_-Gc*^^ygKoNy^>eGb>X$lXjwH{7pHz4BRJPzd=m?!C4kehZp@Lpc40R2TN~)SsI) zfLADhUpGL|EkGzW;M~N52jp)^>(4|QDCuSl69Qnt03>Q}K~8>LsqR}RfvTbI8he3H zb%QkBg0xeEbX$Y;7lRDkg49BBmess~YXNYfK+Du%_1Q;mvHmYo1Gy|=V}c1e zLfleAJX%A%pp1tv0q7UrKOTh!>V^tE^-;nDIF@O+{0pdf#Is4Ja`Ulc2B*Ab^;k&uJbzoIa>Q8$8x^)36bfB8jt z$1tIVP(%}Hq@`}4oTV2^Phe+iB>a2CC`;tzuouf>FyRSca42-tElMmd0_qk#wHP&) zV%n-3%vlN?4vpG@5@dw}bL7L17Nc==13~JqNgaW7wZJmB=!*;d%MdSr%h0=vnA1l# zctS8mx0p+}SdN~^FRiiTXnyvVkx;TY&b(MGy*M-12wC~4g_lwIOL0_n{&g1t-Ij5T zX)bFQvF&?t>`QnMQsCiUG&flSmQJ7+OUzkoywH6a-u0gMHd?IsWy1TN*sG90ay36; z_e3H@98+83)1BBk%Sg(wM2&rz;z*))nnM3Yu)1)PK^aUG-4ITeY__j{&H|9qi#1G3 zhQ|3Er26t+COcX&ob0`Ea!s&yPl0?-x)nLuy8r=G1RI>@I+ z3d4fKQe!Wv`%B~G7gGb=>LtI_OH58n-oJ=<(n~LPr{z~j`5}~=C!CZz zl8{N3k;#?_Mo+I=N{S&%Yu`^yY)fiMOK2<0h)qjU*vohymT*lPn$DInei@Tp<}>J? zNyX+GE}vfFp5-Wfnjl;x#I29g&wrTS@L&?vU2R+L9pS;vKh(;UZDeCw&`l`opNENWT~ zjVdpiKrf?uT@JS{Ba|=cYxkMIEaY1*o4@k)4ll^Ps_f9MoYSxR;=xe1T)Dg)I;&sW zI!fJDUU9IDyH6h2z+So8?jx5T%+pByRfNXFqoy&n^qj1Qt2AY7BrP_)au}loaZrN7 zU3iC4WvfsuKn{R_>Q>vea>@%ZIXt=2(g-{m@DHoj6$?oy$hR$FY;a;UV12ZE1y)(j z;c~@Ad(B6TQf2b`eqasu{mdKI!=xO`>a)@6cj46%N;I_?G$Et)6vH)wN)3Jk#lUxI zCHl1^pr#JSrn-^JhV@Ft2<7zUDvGf>3;jAho3{tU35M4`R1_)eA{3_AscFZ*t+lVsd%q}xwT(rfxIm}5_?p&)qy1BokMD(U$#pyWXr3Lccnuu%H*vL91Nj{5Vz$91ZE>||GSuoS_bltiw6I2T|oa>!=zAS$FoK* z(MTSS=*fylg=0;%_s^Q?6th0B$N)s^UQ%?GhSegG^V^<0O&PxP5y4mbHN_I9DgdMwvZh*Cn5x4HDLSS1Ogm%G=a!U<4t&ODE6= zb9L3C88a!h#P<x^S9KD$MT!+&<8JY#!n8lHl)Pp4P;+Z8R+O(A}x{+E+E}6ks z86)OG<2?xHse|u z!x$9f+dYl3H|^urt>fdA+Zba{Z}LjSCem+$H7F~T*~VU!PNYXRd_I~WZSU;noLu4= zPqwK&R_0m{Z#wXzn!FiD1_gf@j4jws>bQ^2W=?ghzq1^lQbM0>z?vQd)_&`l?hUTx z3ZFhyZtEYPCd6)sQO(5IP8m{6kf=~)Mvj3y``>(;SzLc#K{-3gItX%_X2hn%P?_O= zD{9p;&UHUQ>G^4rXQGHxKjYM3?!o6?;>sC{h$-<-N*cQfR=d%aigFo4N@na?1-pow z<#|EudAsyET*Y}!70QQE3*Raip54xoam}xe&X_)?RE?USDmAkH8l^Zo`;v>I<y+VS_4$0J__W+Ok;b(N!>%L5 z?l{3Z!ov|rdL8+APV9EE4R48H<&hr%r3a?dle;vxhWXmOZyw`Az8wXv&@_`3{+$Wt z^IS+b9J`epdtnW;6MMnFbH3p#Mbq0^>r{=9e7ANOiU3@64u;j$Jz#S*z+^Q&guUb! zHJ5pxMq6i&vr~)P14G|Y!`*>DxvmYkHF=Ybomb!axdv|uSH$~m0G0;~nrQN6^D{1z zjMWWTTdGw=^DmF$S}jm%8(k`U>b&X!NB4lCFR0-jZ{rNZumI86dri31o@)=n*J|QE z_1i^!{ffJByV_%dQ!o8wZ{o`>WrHL3M$Y#n2I@$%4x#JMSUoW89sm}3bm}tKX5Gxf zHTsuf7;^+s)(x@)I;{e70#%Hmg}nOw}7+Ar1j zW7*utyXB@W1v;B-Q6D$4ja^hC5R-dlbOkzJQ#M^`pWS^qrd&;pCeyh~(x2SkW?7P8 zKPa##BOnFNQp~?t;jG1MKm2%5%v0`1y+Gcv*E+fLYT^*fegFL(87b`WX`KOi_((Oho~%{Z{jERe#eJj4!0&x zs=blF>KND9f4TDnUxIiV^DyRtG6_v2Mdf#j8see5@9jUov9XurJv$BJ@ndl~LAy7u zYJPJ10GD{rXrC^}W6A5s2ct<*n!%@Ee@Hm2AdH7VwS|02XMT7;x(ZLn%EvD!&%S5- zz;Dmga8JT3Pc$V+TfENbza1KWJ9owWX)S;ByoQ9!_PfPu?8-ZT!JMCJJ(IdQ=Nk4t z+V|_uxFr0?o^Ns%&{w~D`jBid|Fj~FQjoatKupRyTrh_I44)#VGX5F;Fpz=f(rfke z>-%4`56(d`mu9BtH(i&R64?T{R}OU3J(`y>t3OKL6Wg&A#7u_VH>h44 zxn8!^5WmeiEt<;YtoikRl_U;h0b(O=XDG6fi_UqXxi)Q27;d|V( zrKukd@6SFxBqCMwJ=*o|()l)iA45~Ivw2ULALCW{{_a=Tx&Qs0=6XQI{q0!D1t4!7 z0r3CtAroSxezZYAqpR~3*Z&Ne2yDa6kq|>+CF}rb`~xzPuDP#KjED5%hCTfYGGW+8 z5CgylvZ_IsHIH=bUrc1nWDqk1qv1Uu-P@R2RcO0ATlfQ+=z4p5_ZMWs)Af`LhH&!5 zByTVO3o?f2cB)=r|!fv|Vnxw_8QBB@S(n zkcoTLYX0Vtm4PUlq4amVQ#qyq5+T%vA}2LK-XWPVgX=fP51Nke4!o|Akco+u*O;!a z-nYBTy$_)=_FnBPMi=z{Mg>|xNU5D&qB(7U^a>bu! zZQ*U7L~G?4Vk#YY1}T5kDX`>pK;b}P(RxJ=Oy!eCNZwYx(nH+#TwjFr!Wgtt?arN4iPH@0sQiGQNiwv!B+ zB(=!;(eIl(p1QzdnHR#`Zdni`D`HiYV$p6@lJlg!G269R|9;+%NM_Nj3O7-Ito*%r zA|sg{GX)c(NA}%x^bFUEvFBXywNje8{j(RDn}ZojSo{I)4)5<##T>k-!AxW1dBt_3$k&Csv&vunTc8_J*(cnHED92+g zal6)D&ZUtv=SKr|C} zlD_0&Z7KCx`5;WkOWsW}pTNsyCc+r}oOA%Wa7vzud@22$e4%xaceF34t=Ei_q_>8j zbtd}ldH}#*gG%@(9$h#BfFtOHu1q)^8zOB^Pt+zaD>xe$6KKxJBs?N(luuyD-3_7N zmV3gh#)GMbG>UL5Y9!AlmPo%~*J@MLZk|o534Fo%Y$=Gmk;yr0YYSvFjry=KFQrQv zg*)g{$qcn2wU6I|H?D2`x!}{ZN%I}PA~F?g$+`5o`!j!%HQxZp30_Jj;Rr}$I{1Nk zL+0)oNMs@H$(!oAtgnH)qN{1auV?wPk2+oo|7cTnKb_0DJpw)cs1^Vbqm}t}$xM97 z`oy{UM<%Wci}X8M^>Eqwe1c9(86NWK2UtMN{lb?dnQBiwo#!!iS*;XU%GHxC=8Guo z*p&H}g9O(AKtg#uUFYO!0+Eos-NKh@!t9#)I18mRG6(8O?3(GQAl&U6OA=@tDraS4 zHtRs2T-oT%gSEUAC5Vm20J(O3a3eOjidc2~!WS~1i>%9+DXfd=4`h0%SDVu4fnM_Hhr+Odo$%R7w}}dQAYafGc6CDHs|J!Evj!8Qxwy5 zp&*jp?f`BKQw+HqAc5C#KPRtxn4-%DZe6!Oo7YU3a^VKPKsUsqZB+k9u}&jS@mHyD z}(=91o|_EBqdhl*0Fpm#LCAHZ0)DLgGVTzAn-bf zWXLsUR+QHKi1SZmH02C7=m^~Vn3#Fuh41yB9us5st=(D)P6%rkYP41A9D}Gnm@Ep) z`{USIqEIqlqe;5Z!Tg5nO^e8(oNIot*VCNbHMTEA5(Kh{nsFp^u(ru7{R&;a9?2F| zETO9M7t$?o%JYeUaZA?GrG&}|)-I7%<@o{%Y^yhTRO^seKYMZ^O_phyyN^YAK&9sm z9xtx-(`WOB4VbL7RIjwqrIPxeO;~8HcR$giATJU!YY8pM*BoUb>(9YD%)Eb#H5IFBhC|{26}_f5FzgCMO{lNHC#h` z;g*$8hNb;9drP|My+BOITq%*9^zHix^7I4&-3VI2I0w#YAZ99@vmq=>LtLmA-O&+D z{Q#lWC)H#q012gfC^>R*<5vo%SLT7%vlt#^b)ztgn7*Rf>>*6O2%winK;3jC3H)G?*++h1 z*i)H16ff#WF?&ywUAaMa=dZFN+Jm30`Qqkx2iiS~3sx2)->~ZfZ#+btD=UL=g{IpX zc>Ro28Mp`voR<^0`2{PJKm)vZ5hDp>HlaGMVebkoHY<3By!Bxr38Q|llt?+AiRAj((-}I z-6(k|L3K)yd;Fk+xe~ZiBU1xgkec81VQxx9n^r~jEB}DL-ts(9S+IY@g9{Kk#awgHL|^tf zR+XwCEWgQIyZ085<0tanvrJTiNEzF0^`v(bF zOHBgva$Ci)NkNpYa(c5vZ?}fL&xU-)hv;koj=1%Wz2GaA@Li zSmAJZ3`;B_9B?V}B?y>%3g5@R%A4K?bGF*w!cf>Ipc4l-N7-gRx>Xw_NrG=qw_&?IiU_IXSe$2-BP4?xG2FB6`u zhwbg2m}nv%FUZSlLOAZjP`1O#f!RtSlZ0rnQH@)!RfR#8tadFI+j|-bZe_p^?&}%B zvd0_=0E5<88Y2twk)M$FjtB>u=CtFRbDcN~FprZA0L_~Y*+^#(j1rFkpHO?93LqQl zz{-Xg>10z&(~waW=nUtD+hUIR52}mlhliK`_etnJS&h{UkePBh85@Q8=AmL6gJS<^n%5O z0Wm55No5J3#w9Bq62djc`~r)C(#%Ma^aIV8)c0216^$RPXN#M6+MkxTYY-ilf!vo4 zYXwx6kXKRsjQN^p7!^ki)3QoLHM82H8i|wo6;-l>&FM$YYvPG^ty{^SL=CDMHV@QD zXv4Njq|C0j+YxP}FIwcx$RyLxmgnsgPMC%5-;3obo%Gn3N7SkUS6ILG!Ztnqk|`|F z>r}9fE58qZARp&xeQ$A7*HjU$jD&lK96F71X1Ga?u~u~yV{m`8c>Z-luXCJF z_U5kAc2bhW?krWBrpk6&@zK|_xj)$gO&z=Q1>Kib=fk`XU)R%=J#V)IT0a=! zGY|vx{ZDl@!Too%r~-=_SkBxG2X%znoEJS2M+J`q%jD1{0&sn3pW{qGeKF9?QV;YT zf=t-3&aV*BR+dA=_R!!r_vud2fX3M1NByRHW(cUo5emsG7(H^y7WS2mC**?^Dib{( z_OpIk(&6b|l3TwR@}I}yW<1Igjil)2w)CXjr3h~Q);zyVyeQ$sJa}qeL{Ah0eowAk z;z8(8?L0SNW;%#I01x0(suna1K;^Baixnky=C~Q&62FR*H*A$8*~*O)_C>%Xjqo|W z%7^&V)nh(DeB(=`F^{fzqD;Wgk*?}NxH6eiZDw6^H>n(bg*vw1UVX|-_27rC>M@p| zoM~pDaI7DG-H@+k3*ufh|uPUo40ZmpF4+2>PWO{HAl z*)*Q#&liy|l&M9PYd#DsFVmK#JsmFBZb3>)ofpbYuq$+jkOGVJ^GZvV3jL2rP+I$W zm19(e!LH)R_TPk@iHd(Ej4OW=a(e$1LXiZSF=QbWNyv#p7D6jZjlZkbjy&Q@m|%`=WL1M%Ehk|FHHJUQxbl-}f~zz`zW{5YjP(goG#{jWcwYNU2D7 zHwZd(h%g8OqS7g-Gzf@vC@Dx8bV*1vgzyad+k5}^zVG{apY^W$4`9h+EzjdT&g=XA ze8RvvlH^x5QIHUP97TzerBjhxXl7as0;UFaD*`lV$PEMs@B$Id0ojhyfN&uQSKI+q zIf9Zxu@j8m_FgJLd^gjrC(yf!4*D7))m(>sf>Py~bjQwKXhov>JpjdCuE^5tUU{K6 z^4BPzFJG_U&s zLSd8^Q12}MF1sYCjaIR6s2ig z3G{+5hA>V7eSQy3hCQn!Bl}4G5ypaeyeD>%wwsM1H-Dk+JQ;klrpd zu0&b(MzegB(VY;pAc+a+tQ7|w`O%IdG;g?nx_J_#$XOQVH-j zl~~FQ)@E3ah@vISrzT)wXU~o`JjB1M%25J&#Fj1gdHRk&+6!S<>x)qjQhuaeFCy;d z3r`7^8Z6rRb>>lwetrMPORMd9$ImaBzBBT_BKS z1)<=d`n@v#sRc2E^*Q;1z=IM+$;!G;tFuz~DG)N$!cBdR~Q ze#~k72HzD#ql)TQ%0$Ix-uMAyPM7I$#HjXI3A|&ggYH&bn5H64lg!)0MMBGD4 z(luTHXB0?`TF)+cXoMh)X)8^^NzjCzbINIP%(Czi<)mZnokTdu06j?KI(7$3M5~Kv zLD8F^Aws`l=)fT;Zm_FA5XSb}AAQfNtYtRV3eimbK*3C$D23@hdhxm6#^F*{l#tX? zTEgoZx`GFd0YH9X#@=^O)<$4IB~19<=$)d#hRT?YctN6?T^ z6dY^)Dwk!kgF3&XgKvKAe?14_O-KE71Al(_zF>YaSMB~0ooxU8bpOVL0(`Ft6MceP zdUJMqa^R-7dRnQ!7f9F4E1QKO;DUfC$GL#3n;~W%nYa%|1s~9xq4YE{L|R-eu*tkI zR#-MfMYWYGeKVX_Gn>q)yOp+nGeS7-w}YIqU@(MusG0Cu%@w9mdr&w|6?`US4zLAw zQ-*D-ZpRg66B=>=Nt@9i+HS?~#sVBX(cMJ67~%Nk*Rge=8FWQjM|d)2oc-V8+rNP` zDv#Q`Wc+)rSY*AsfO$&$d%ajWVzq9Rqy6=8&3PnwOm=rw1%h+e*dz{#Dz;@kf*-o4{@W$gWCiwA$=3q;VqrE3?Gb)`PU zv7HP?UGL?jP$fpPO@#BhZV$(4DRSmfidNWicX6M2*NseYM(C$hOrN%Uw& z-*$wM!7DmKWBbO9*Wr~6^@B=cSV~e`;V`N|6tT{Uu|YSEld-;xNIwxxs*W3xp}zpp zDtUR~TvxOgjlT#v!1a;2tc&hZ+=oLHIgc;!gq11_W6OpVpnxTh7 zLH&5&Yv0M{D>WDamrNZRXFhi;yjM}&F?4vhvH%HuyA-j|dC+9;aryqi>XW1G zgZBWu3`5eJ$4-UgXqR?Zo-CP;$9)U=Vy9%(lsE}!2$o|(RR_|Y6*nHD8I1y6n2W|txyq|j)KD13X?;%4an zoZ{=^r2-3Nk%j`@MkCYZHA!DkomU1(5P_y>AEYT3q2`Q}5>hFER(uh8K`e++C!8GI zBjjYMw@(zRY8hfxBV-;Oq?AIa`-Y`>huT$hA!RoO z9b}J91{PDQP;oAU5T5pLgm16O)3eyij5U1Pt*f3K`{T;e!E zbcfozuc78=fr=R$yTox#^UQleX@*-te!%>lNT`l>0B(DsEE7EV`oc$_5M%SMGc#>j zk%N#Wo`SnS+Ix}?c=vh|j86rFHp@DGy58MW!<~RO>CEpDc+w1nkc`$Eg^*ptjoe#* z$CDjS@NH>2f-d+9HC)FXVtk#RObH+F|J^Wd4ktwGz{+!U6~Kr&g!Z7SRkZgbV@tpS zmX{qn=~MLL;p&WiUOe{^9tdSrYLJ(xdnw#H0hEPPN+JLy>XYmFP9Ppjx3FW=%u;$d z(VE1V1-Xlda|7nqX%+>#YH)8NI?d96^cWlL6+2xUT}j<^O-OrzgKRvGNB90{v2ASA zMTVsu)SjwMx-rKkU3yzh^>nlESI&UdQXU7?sxFO; z`|4|to~~6Z3Pl8lPGx3?Ti*5bN7`#*`s##d&Wm9ba>uF~KSbxi!t2=|7*k46?eHfF z*ZZPp6Uto+Ru={Oz*wQ$Z{HmSuK3hRYF&IbE%J!793a#bX-o?xl{{@`x?BpoxD$m6 z8La5xj_xJ+fP9RTC%OD!FlW7G`zW{UnM?ODjLlz>Q#ZCY9)x0)%Xs`Islbu18%fEI{;=s7H!+ZNG*nu%mwN)i z(X*KOMohxl75r79H;b5LS;p7Dj2U@;RgjSPzzl{DLd{M&Ak-E_(*(rJ1ak1?ChufU zmaV!O++T$_+W}@ot*A z3?Fpy3@f{K)5*uds<%}nwO5Ggn~@+=oQ?1UwO(_Aq_l3$X69b@1fEXL*sl*U(91oK zN%e&=eang>;UN$0MHQ&#nj>T|iDVD*Lg|KZ9imc+Fi%mhu+2CgK-T!JPiY&o1197` zPT5(+MFDm)z0E?@8L2Kto}E-Tx)q&^1k{(?LRr1DHjDVE$xN}{pk^iDF&gUDkI(0K z6ARi>lA8~P(spf<2z7gC;n%{9`I6g`CzLRH0W>KZho*Xr0B0N+30Bd`l&kkDZQqOgkwtj2xP=h^SLM>B80*kN+^3)*Fs+T z>J_Us)S#htn(kC$?Z&MrP-m<4OR@GY#_Igr!Mx(E{Vcf*na||7YWC`PZwcOBNDrS> z4yAI<3TN$PiZNHTpiCT8;O8ih7=!QCMkF{WOmp)r?pR+03?)jpjsdj8a@at z1mCjM`}Bg7?Fl(b1pkf{6hz2$Az7vR>&&$v1Sb=LS{bVU$|JFB!)#N!$^av5hWq-H zR@7bylPa3@(rPHx{h|t1)tN}8#_Tp>lq2Fk)9pib&m6?ltv)!>U~P(a%BaE z#_5Ruw3df=>7OyEG4Tu5@xfkz+St~FryL5k*2N9ASxVnk>E)Uev873o%HcvNvZli> z_U>ms-RINo5rB)77$X^ZH;Cnd)%dcf$Zi+07jMvUCK6J>`#K+B*5i>iqK)poYPv8c z(aD?y#WsfM6tf(H*-l%sj0vyi@!WYUJ6hGMq9sq`tL~Y1ip)|x^Le9Z(HwVQRIGYv z4S)S|53Qdc>i{7-MK=>;9ipGmk7ad8Y`4HHa2$+HK&SOEDJ*YhmTpFL;(dAu^foHJ zM>}#;YThE=j4}C*Igcbwv$k*3h5@ObDu(sP*7d@EqYj7Herl#LRIg-RHxAb+nJ)Rr zYqRaiw)>JqY$JtZnK$#CyNalP&?7hNcReJbT$1}OFj3t0cG^JW;+0H5+#qayDLM)> zC3uiD-%wwbw{e&u{mLHd5$P~LbGUy+ZoxHZPSmyN70g+{`B3Z8hg+*H5+dE zQ8;&~1$>Zg>;8=@w-q%GCr7rT$?<`vec8HrlYJ|;y=Ij&*&jne+YjHLEJ|F*b-Bd{ z8V2J!NV0#QW+FT@A#lXjw z5E**LwV>(HkwT>}V_|Z*FjTbZu2_f^j#5|={ZS!Iy)JxA>FyiDaApq~!Rk;0X0Wa6pZ*_-h)jk@qb#K;9I!0hcl%Zwe(B*FE zNb^nXwSb{!XzM0}kS**KdzV+~+9(QhPyKrLT^y7d-@~UX} zZ|%@=Ou|Ys%+d#+6t(&up2o@mED*-e&;ycbDGS|Ux099Scwnn#@k3bcw9gNpDN#Jj z7k##u{)R89Hw&KG0c{{P{ebn8UD2wGG1k#3J}$&BcF6n%pW0tv-0?Rd*Z~P zbH%tpR$XuoJ)mfxPM3&(2#cmT0`7cJ%6J$}v5Tb`6jPp)6#Vo#Fogcjl4R!aRl!~N zOox%%H7d%VF5KBhQ!ILA4$t1+LEo83${L=Nn}uZ1TEwSRO4{_G=x$1Zy!9?Hq86=E zHmkCUL?6Q)AHyY4wO*K0n;ejT4sU%9F+C>wAV>HE=ISMkuoUL9W3FgmuGj|**?6wZ zQLY?g9!e^Y$Tx*OopRPeuD&RiQ&CR)C{LF$Usqk;z%<`5FyA;m-?ToT!&=@xP41q5 z9?eYDZ7vFKnrpF11&;Lv&XWbMM+NSTg`Q-E)}k7@)iMea@s^Va8tbrn331E}_sb$V z^7=wJDEo;B+}Tn%_{@Vhh6IIlEF!VcVu+OlH5c9A5&#nyKb}Oi%1a+|E6z_V?NZXi zKz5@S3SI;vj1>!P8I>bJ%9SHZ0rfAz9-vGq$>%iwTV)bqAm!{m+X&NGF>%UKFe+pT zZX`nQOeJQ+P+a4PxRX|zs!rd>Xr33AG8BtAG=k@;(-#KDE#hQvv0K=9T{AkuF79s!-XSm^(@(c}MD%ge_&v zQq|_s5iY*v_!fYvMueq*^^iK~byD>$=^6&rvQ70WnP)YQ4K*8N)nIhh6tA4bZvI@7 z>EN&e+MrgWp;k%pwdj{Od7%^n9d{EA1#40>CTHPjoSh(DJ^7|Y*jOCNZ08? zZG5s1Y4AL@*2#IS-qfjPA-2XfoZ|hoeILes0h!d-?AC?#fU20ZPg8WEV4c_O zx2C;X&Ysk$A89&6W3`uSKtOFWcY~%EjFd#rbwve)vO>rCf zmj`e#OhFeCJZ4T*Do0!;B`HCm%T(j{#nC{j!uWZI>DThHELe;#e5yI0qpHLDr2P9) zjlvKBMY1$o z^jsbBUF2;QbGds9_k0;KfFXT=fe@AffZ*VB#*Q0}y~nAsfh`Ce3ZiffxSY9@Q>Y-e zPV&FP8m7LsdCm0Wb*W8Rq8o9;+cK3Q0>vIi0~^BL_sZ}7B7-{yHRIB2?9#7D-r{`A3ycBDO8HmM=Z*?M~=8Q z^cL9_Y&k20zUvCVGaeZ{9{plGc0G@2HSR(0SQ&roglT8;or#p-iL~|dGlll=#+@FQX%`L^4*wZ+DMIQq*mh>P2MqU!HF!E zuMq3%p-J1UOJBQ#(Q=Qf3;MqF2j6RQDXBY>uUG#v8vJcMShhy%o6LIW(wUd^d+P7A zvfmqr%d-#iz39JvA$!SOnr9!zc!qrDt_1Quvc^vrLT zH)Hlv)2zVvS)tQe-c!Or3~X;u;fWXW2g|FTuZ38g=3^R|2J%*b*twKa`To3W#=Lsd zyyo|L?bCVX4UOVyPdWbBTCD*OUbO+_t$A8kmAwUX)Lh`-_fEiG;;13F964QqHg-$KV8DGE{Do3hqD@s-&~G9%UHG%*F7`1wWr(8 z>CpPtMRHC-?3w z*+s%$bK{SM{mV=MWma$5D~(@+u&2ZZUKdu|&DNfNzaxkFkw!<9CVs2(iNm!gMwYf~ zBO5Dir-XQaaHLPCWPfKoQRu?vYQV*{VYBtcrWJK}i$LL9fe4@_i^P!*U%dca5u~6p zh$9`TaPyCa`x}dLYu|`qLL?#ITuU0^Q8V9R0UbBmHh!MU8R=s2KlRgc&?k8i<|<6? zT4oc7fFK0`@Yywdu;{R~MV3Xt&+^5-o7r`OWt(4yUqPzBkVI7zJTJE1qI9Vj{EBqa+^9gmxk(%v&cf4wD(Hkhwx0JTkf|~>~58d znF%-ROf3@nUtIsSaabmFNbtZ|zG^#CN=qhs?iYgG6xd1ldDQ;;M&&8tJgqGnF|R1( zS}C+Xzj6HD&2xgaNn&G?_(h#~lh4w$kKE_|$-9e6XPGC;@h9B1zl<_hUh1^WPy2dK z?XCt7GH;+))X4}DL^-TGvv<$TGghqo_xB&{qOraJWzX{l|E;e*oOG!FL1k$cmo*4& z@?RT&>oxZJg`~J}j$%lT;vbb|`_mgs+8MIJr_bMVk-^wL|9Ih*8h@wJ6NCfTZR-6) zW$9xTj)khFE56mf{oWza{P{msmJv)w8@KBngPZB63ru7^H#BLTk3?S@;#HPx%Fm6h zxVzeMX>g z^ZBgw9z9H_A)QsFs8CmciW% zZxB=N`y^veq@!pY?%`FIQ(c*N&szpNNzW3R!u!u#1{6WOp-{$qrCEDpWb8)rZRSxvVPiEral@>U@QH_?E$&_Q&d!3Fj>X7WIL0Km^}15EGZgz#n747O(M(-7{p#DHks9I=&Q4)4pER;2ybcoY@Mp%ZFKdC-Tuw-RJUt7 z<`HDkPmt*k3T|3Fk79M3yFLb$bjatcPP5L*R4&!ZNHnWIb1d;=W^jDP_99&(>wS}# zS=6=hdgqtO7nRonnr)9KV!E$MyT;dsq_cjC3W&hIai{L0={o^9MEb77VC{>*@XNE^Oed!f;u z?&#j$XW4j}gO?Wyzxoc6v>Ex$JjrOx{t*2Bw)U8X-FLYGhLNetCl5^ZC(B z4n0z*SCUK>7`W&T)p8zP23FMacpr4C>Zfbk6*1>sy2;&Rc(pf}V)+BNWU-RwD3x9P zR~s7Hm5*^TBq0K{(Tm4F( zMr36gMNxs+jYuu8PyES0Zrh1&jcdETqs}0);*otHk>FF+op}bfM-fTshSH8?kto^A zQ%h+EpF-2-ceC(MmFuHONZm+3O3LPY#iRI<0TVMjV$4cDr*`lJmAUvKjqSn@-3618JMXB9)s*;d#8m6Q zsjDh5>Tooy4jg=@?qfvp+2M>!UGI$)**!B5pMg_KQ$+zt_Mobs+#P-$~7hFniarr$DW1hO$CDAHvww03FxFqHl zIMiUa_mZyhXM|hOg7n>^(Xpn3j-L`K_1`X&UrAt}|Cw=BkCed3l8QJ(G4w*CIkEV7 z3q_=R7*xiB%xJuouG2kItkD9_olpkP#Dud_ELY`tw}7oDWAxhm#X{o`e6}9s z1e<{I(>hfiRl*bx8Czu1M6Zpq$WymQ%WEV7T`n0{pWl6ME0sCX@6%Z+?~cJt1WYJG zAgHu}ua@!(6N8${-r3Z__DbSMgNnYP3T3D{6tzGnIv$cM_Rd~gx_a*Bw^xwD-RXETH!|e%*&Ovv9bdMc_+4WKY2=ufHKeMNXzDQXvV$Sqs5z zq@z9BzHefBv7!)Gf?I0knI0Zv8v7D(M}PQBv$uP{!J;veU>PeKb1W0o9#s5H>qTI1@CJdDP02 zQLcqvwx;%}12@vi2RD+KLmYtnfFe3zP-JpkQ2W;p@;m~&_cHsY#2pJv`py}1Gdo>6 z{r~|bMzPzB-GLXZX)f0U1wJT*FAzq2lWuJHs=Y2D_X?Vg<^}tOHE1CsQ1sW-AQ(b} zXmn9{`a?PSIa#w~u{~+T{=I80tDy#I;oA0Lw9g^i_aLUakS|V60FF=|8m@?|Bgku% zYHk6#8$d9OJf!lem6!}NTyb31FSn7|AbQR!T59=vWSOj@FcAYY+H~%kn+ST_{=LaV z*--X((OF@l&7tqCu1Fv&-nM;_c;zL*aa_k#BBSv|I+Zhx`$lxa!>Vh|q54b;nO+bX zRJeXgjj*QJE)+v`+^Q8I`=G5RGOH~f)23<-`Sei=!_+pTQKih4B0OBHd-7h7ruw0A znDDKdm%L)P!Wts%JEHtM5&$JVY9&*y4&z-#g5tN7lO4Aeu}Or_qbNHc`lkWB%6GpC z5gS7;D|Q~E0drC8uw&b@dqOLrkNT*q@;om?L=jjWHBgEF4yeXM;m_1@)M?1husvY9r+J&wObPvq%W6e2a} zKcIC!7~Hn)KW>q>Z_gV^JL#=Xnk=`8>seLr8N!2GXt+0;hBNV z^LC>hN&Km}!;f@AAOAAV;hBN|ZklU6+*$sIX>M~4ANc0F9O$V@mL%o;_9%k!Fv0>79ulj2H=Mo1z#6kG1iXQf#xF-XxT zL|h)lS;j&8?KuPW!fAA5gf>)L2&aj*6ae&^>SJOFSK}<1ZC*89@OP#1@Z^hEinDd( ze?>2NDn$Ctr;?b(=uuf~tL6J{ClBiYgvM96)kF*UMlMIjm+Tde!Me+-7KT#D_#E13`{KRC*q0BoPw8xc ztp;-d2Lw*1d(~50 zrn%q2zjO2L`Pcj+kuQ|G4+^ES2!?qul)G*KG5&J8b`kxn8VP1s4GC9F&Y>*@p_3xw@D|HyG+2T9+%(slJy~Q8oJp!hpZf{8MHRWG8o9 zBVZmzcAZDDyc=^_*Sou9_9+wmojGSm@r_c1+5?wn5P|45ux?`kxwTZtnKm{Opr?HB zq;dY&sCmzco*EIsko7O#iJl6awa{vqwS3U0EOp{6ILN)7P4Ox9<*W+l_{NL!1R}Z)FbhknURyD0u>lzBYWYG6JN-PjoC&vl1s~O&`+3lzkraN? z$C2vs!|Y2zP@Z9i3Px}i@kV&G^qeFUvua5cb<2`7t%*b_0sVC5*-1YkJrc{f{SpA7 zc;#u*sUoFpL14imWK=ZiM*M%xns+~~m5{7A_r?elGIV#9 zip{vIKbUg57YNezm9P`t5XB#hbch(N89;#04rYG`R^%e`WZPS z*?hJ=E)J4@eIa>HCx+X1k>Z-Sd1cOZLC2be>r0SLl<4XF4NhAm@#Z5s1?C$$(bx64 z<0U|vB3kSpl9T3b*2<_8Bo=swVRHJ~k|r|dA2@BL7V_q7Y&P z{^X{E9k4dY_cV=gt9U6BLwspDE1cGGIa^jT>JJ1vBvuZu?fg3g`^QRQR^%UR-Vb~< z>gA7@r8Pf(l$8BtLi*3cRKWQ<%xTSTu{S`#;D^9}9Hu3IS@ZCR=?1G;DVA|7_enx8~s%OMW(;?63ZO50D6KHiPM$H(MY)rJJoV@wLr1go?mcJB^X^ zRtLQuz9hx$x3<-Vj1t)H=1O(m?%^#g-Trf!3U>+Y^oow*HR2Ly;KhFYVY)MbA`z^r z{U9HgAZ_`f_#D9cuaeX{T#`G(PxOH|dDJhlQ9_6286sl;kc2c#vi1Eh?p=Zh zU%kh)YGeIjm=<5gg0n|DGR|KF@!C#0SO2g6P(KPojj5md)?RM*$-asv%3;&lUPt=i{i4@fvZwwzFmluMw|bg`aCXFQ06-)4Aa_ z;?IOI6ZEEZXfR>kP{Q>;(Wvvo^sf~4<K`d;3o<8U2K)sN zkrTZtBf)e8!zeZql*SHsOC!EKKM0ip&%(~`(YJHJ^`fsgvXc)FMzCHTiqR^ypvmM_ z;*q)%rExMtSzFX0WVZDXJKpgj z*C4AcYq}h&&>YJ21s5)Pq#F+^%B6i4O_V!g4r0MSgflrL(sFMjQ-V~vsV9ge5TO*| z%nm7o#I&T3b(DU)m5mgfL76BZE4>B28 zLc*Fs-0qZsOkOtJry0b&IT&do;ROlGYC}wKMwv8kJ@yLE7h1t-7{^u`RKe_^KkGh9 zM6O>B&bfjkv{aY0(nfN$U|sZ)hJF6uW!(U!Xfh>JIs zJU-lz=pUr<=56Ozqw7%$`0Gp_RPfFt{tvL{Lu3Gh#s<1Q4-|3TrV2 zg3_HZwtib>-}PNY2pr5gShZuKdICczq(oiFd!?A%rC5dAbAb4>Hjq9~VF#&^MQ1i3n6FYGV^Zvki z2>ySQ8rXR96POPLASDsn_e_V0O@N{ctt(;4rXwVLm;x19N4}5(EM;ZL=P! z?(BK_u^PB#1qQu~guIF(7gFt<9C@aFO)>73v$43eU4I}zm?x;_D3W#eGaOYz?z!%8 z@5|&DA$8QBJo9gJg)F|=Yz_Lqn=6!}*{?c&^-rAXM6mqcfd1Eq_WA^m>;Gq-`FHgx z<3IAuBy`JEM_G}dgfHu&`i>SOM)7A>8u_h-6$rf}Nwm9EJMlN3%S8pkj5vqs79-BP z{fz;iApQT(8_=Jj%^zR*uc1Bb&8!ZERH4X-YHq58CFcVwKm_XlQhhQfd7Vb5D%45O z5qEXtv*n|h9!?!8f*1vaBnU?jVC4xU<59{SF}cPI0w#2FM-mRH*H5SC5|W(`+Xhgl z!dCHeIP(}oDO2LCgzJYmkyz2aa0lCD%ar^Cxf4YOvS${p40a|)t}6pC_STA1o`6nz z3bO3_dMK{%(VGrDk7m7zQQb~{YoCj0C3VQVQ_hLa39*%0DtI2+QIs2=;y5Ze3aKi3 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 G5{nUO4Nj=MxeK$)*w?f)%^u7heKE_ zVrk~O>+P5+ZIgsB4cdxwn}pcu*`(sfcp;3Xvlb;E8+tbEwHg2Lv9WzaBIlon{;9N* z%OY|_L$ybbGx=}%qqlpm^!~1QRKR0H-^uc<`O-ZPTLWa#h?skCrS!AHv}O`@>^6CD zg2~u;sXYxi&tp@#p)`c{pg#Y{%lnF-f_}i2*_{flv8}*-=Au~={ZHS(AGhICbmbnI zXGXOekl&>^Vh{BPOqVM#;^cNcpcoz&f2GDuqyi3F(i@_P-$0CjakB&ii5a4$L z0PBL$@$^24V0od}c4G25^GqKN(=)&cIo$~b*9qmLMM^av@&T~M!M@*@W8wwxz|Y)| zwY^S1`<%C*Fjbu}dU-Jqcq$7V$!@s?jxBtY{92AVVFx#CqLwmKMIUqgT$T3ppP&6_ zd^!a82y^t!{{48*$-|Mrli$ZGY01u@UT71~T5hcrX0{EYGGj7rDHvtBeF`egFF7(D&w^i8$NIe|Zih#H-csrDoP z!{O79sE7&gFkQL`?R&XBs-Qy)a!uhl)6PLczFiO`7$Ufl$z6#72r4w8xnBxhC-IBy zx!7yl$1j0!Iz#O!BfSeP9HEhctYBH%C|}d1jKBkb`Y7MQ_>5b>F8!q<-n0Bqz7q$( zBYSYQ#$$BwV>bSTyQ)=Un*x*Q_wOQgqQ5DD6oex{Y|g0RJJ-v(VV7W0x6W9)7T z>bo(r2sEpBzijk{I~4)b$P=G`csK}*Mi78MCjx95Zj5K71`{1qFxxW?GdD>s8~aQ9ax)TNqCbfPefAnZf6>vaG; z`9<64#u%abSUhZbLPt!kSCIuop{Y3 z@jyAa7L)ffwMe-rr$3zasMD#a(4K{%YMJzW)q$?|&(U<=zm|0@2inoFD^gMQSNaj_ zfZ{Zvq&HIjx7tOw=S_qZM1X#VP*}9(hv&DLARL-#j(}feK>=Xv9JFaCK1mbCrxU1< zgHPnN;58Vv*@yQT9IY7f0Y|LQeg5N z10F)?F8go_uSu=Z`x8Yp5v%ib`O`Db@l4rgr~A8ST$69UN)|3+r(DLU7$j_vjEEA$ zcsB8ZogiRIBnfrku+fXDJ=J2IOxM03#qE9yoKoXH({($ecyp2L9@^+h4r#7P&{vFe zT5Bv$f5;x48*TO7qh2%z;qjgU)cUp9kTR%TPtqvM-gGrw7O3yy zmn1J~JQy<5?#M{{9sN*Fz1c61R~k7pe!suw%=8()womf?S~6o{MI6ZW8kS&W5EoiW zjc_e%=;ylUD84X6GkRcCRVoE!OA0o%hBH3q6SVBA3-$T)6z9g4>YL~5xR#XEI1+Lf zh1rR-CAfW(<*WE3VdhpWj3*388t1uk!#El5E>|~se+Tb@aWuydq|`*^}A^)_J#Why(RjH!8@Md0xG?rLx zBy1#i#ww3;VEmJb751MRZI7B-Ih++3#Tp;ACCv;Zt-LgUC9^G)6r3ct*lU0buiuOy zl8HasB`amjGK8;(DTZ*(8F!2sOeZ_NYR!7FQOP$UtGRkRB(!<1 z9L;_AyXkgJ;cY>!<)g%@_!}A!^%S&UDrG7@M2n4K3W9K|o~o7ZBX!tNPH?pepeRg< z4Pp6fGXy6`3l`XWEL?>P|D7V11p%nMJ3;TM&q-dp+fj~U!2+E65W86zAOeaJHc*V# z`Wwm+u?S**r4P|t1F{-yByFeyWroxRJtu)MTJ3^X{_#i*CP@vp*+^g&oR2K@USH=0 z5i7apk(MApLRumu7JzUDoMMcE(+`N&RX%0AFdlb$O(NGJcWg;IoQCa^KW@i0+#;Br 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

    JALUB}0il3-MTTI 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%0ApD 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 Date: Thu, 24 Sep 2020 15:38:51 +0300 Subject: [PATCH 046/143] update tenantmanagement blazor package --- ...TenantManagementBlazorAutoMapperProfile.cs | 7 +-- .../AbpTenantManagementBlazorModule.cs | 6 +- .../FodyWeavers.xml | 2 +- .../TenantManagementBlazorMenuContributor.cs | 23 ------- .../Menus/TenantManagementBlazorMenus.cs | 11 ---- .../AbpIdentityWebMainMenuContributor.cs | 32 ++++++++++ .../Navigation/TenantManagementMenuNames.cs | 9 +++ .../TenantManagement/TenantManagement.razor | 61 +++++++++++++++++++ .../TenantManagement.razor.cs | 29 +++++++++ .../TenantManagement/Tenants/Index.razor | 8 --- .../Volo.Abp.TenantManagement.Blazor.csproj | 38 +++++++----- .../{_Import.razor => _Imports.razor} | 3 +- 12 files changed, 162 insertions(+), 67 deletions(-) delete mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenuContributor.cs delete mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenus.cs create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/AbpIdentityWebMainMenuContributor.cs create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/TenantManagementMenuNames.cs create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor create mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs delete mode 100644 modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/Tenants/Index.razor rename modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/{_Import.razor => _Imports.razor} (66%) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorAutoMapperProfile.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorAutoMapperProfile.cs index 12564ad7de..ca5ab2ba51 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorAutoMapperProfile.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorAutoMapperProfile.cs @@ -6,9 +6,8 @@ namespace Volo.Abp.TenantManagement.Blazor { public AbpTenantManagementBlazorAutoMapperProfile() { - /* You can configure your AutoMapper mapping configuration here. - * Alternatively, you can split your mapping configurations - * into multiple profile classes for a better organization. */ + CreateMap() + .MapExtraProperties(); } } -} \ No newline at end of file +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs index 148f959b40..81c4733582 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs @@ -2,7 +2,7 @@ using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Routing; using Volo.Abp.AutoMapper; using Volo.Abp.Modularity; -using Volo.Abp.TenantManagement.Blazor.Menus; +using Volo.Abp.TenantManagement.Blazor.Navigation; using Volo.Abp.UI.Navigation; namespace Volo.Abp.TenantManagement.Blazor @@ -10,7 +10,7 @@ namespace Volo.Abp.TenantManagement.Blazor [DependsOn( typeof(AbpAutoMapperModule), typeof(AbpTenantManagementHttpApiClientModule) - )] + )] public class AbpTenantManagementBlazorModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) @@ -33,4 +33,4 @@ namespace Volo.Abp.TenantManagement.Blazor }); } } -} \ No newline at end of file +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml index 00e1d9a1c1..be0de3a908 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/FodyWeavers.xml @@ -1,3 +1,3 @@  - + \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenuContributor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenuContributor.cs deleted file mode 100644 index f21b480a88..0000000000 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenuContributor.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.UI.Navigation; - -namespace Volo.Abp.TenantManagement.Blazor.Menus -{ - public class TenantManagementBlazorMenuContributor : IMenuContributor - { - public async Task ConfigureMenuAsync(MenuConfigurationContext context) - { - if (context.Menu.Name == StandardMenus.Main) - { - await ConfigureMainMenu(context); - } - } - - private Task ConfigureMainMenu(MenuConfigurationContext context) - { - //Add main menu items. - - return Task.CompletedTask; - } - } -} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenus.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenus.cs deleted file mode 100644 index 002fe04d88..0000000000 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Menus/TenantManagementBlazorMenus.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Volo.Abp.TenantManagement.Blazor.Menus -{ - public class TenantManagementBlazorMenus - { - private const string Prefix = "MyProjectName"; - - //Add your menu items here... - //public const string Home = Prefix + ".MyNewMenuItem"; - - } -} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/AbpIdentityWebMainMenuContributor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/AbpIdentityWebMainMenuContributor.cs new file mode 100644 index 0000000000..b389248dc9 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/AbpIdentityWebMainMenuContributor.cs @@ -0,0 +1,32 @@ +using System.Threading.Tasks; +using Volo.Abp.TenantManagement.Localization; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.TenantManagement.Blazor.Navigation +{ + public class TenantManagementBlazorMenuContributor : IMenuContributor + { + public async Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name == StandardMenus.Main) + { + await ConfigureMainMenu(context); + } + } + + private async Task ConfigureMainMenu(MenuConfigurationContext context) + { + var administrationMenu = context.Menu.GetAdministration(); + + var l = context.GetLocalizer(); + + var tenantManagementMenuItem = new ApplicationMenuItem(TenantManagementMenuNames.GroupName, l["Menu:TenantManagement"], icon: "fa fa-users"); + administrationMenu.AddItem(tenantManagementMenuItem); + + if (await context.IsGrantedAsync(TenantManagementPermissions.Tenants.Default)) + { + tenantManagementMenuItem.AddItem(new ApplicationMenuItem(TenantManagementMenuNames.Tenants, l["Tenants"], url: "TenantManagement/Tenants")); + } + } + } +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/TenantManagementMenuNames.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/TenantManagementMenuNames.cs new file mode 100644 index 0000000000..e9876e8d59 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/TenantManagementMenuNames.cs @@ -0,0 +1,9 @@ +namespace Volo.Abp.TenantManagement.Blazor.Navigation +{ + public class TenantManagementMenuNames + { + public const string GroupName = "TenantManagement"; + + public const string Tenants = GroupName + ".Tenants"; + } +} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor new file mode 100644 index 0000000000..f24a4fa5c7 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor @@ -0,0 +1,61 @@ +@page "/tenant-management/tenants" +@attribute [Authorize(TenantManagementPermissions.Tenants.Default)] +@using Microsoft.AspNetCore.Authorization +@using Microsoft.Extensions.Localization +@using Volo.Abp.TenantManagement.Localization +@inherits TenantManagementBase +@inject IStringLocalizer L + +@* ************************* PAGE HEADER ************************* *@ + + +

    @L["Tenants"]

    + + + @if (HasCreatePermission) + { + + + + } + + + +@* ************************* DATA GRID ************************* *@ + + + @if (ShouldShowEntityActions) + { + + + + + @L["Actions"] + + + @if (HasUpdatePermission) + { + @L["Edit"] + } + @if (HasDeletePermission) + { + + @L["Delete"] + } + + + + + } + + + @(context.As().Name) + + + + diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs new file mode 100644 index 0000000000..5cdb622398 --- /dev/null +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -0,0 +1,29 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.BlazoriseUI; + +namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement +{ + public abstract class TenantManagementBase + : AbpCrudPageBase + { + protected bool ShouldShowEntityActions; + + public TenantManagementBase() + { + ObjectMapperContext = typeof(AbpTenantManagementBlazorModule); + + CreatePolicyName = TenantManagementPermissions.Tenants.Create; + UpdatePolicyName = TenantManagementPermissions.Tenants.Update; + DeletePolicyName = TenantManagementPermissions.Tenants.Delete; + } + + protected override async Task SetPermissionsAsync() + { + await base.SetPermissionsAsync(); + + ShouldShowEntityActions = HasUpdatePermission || + HasDeletePermission; + } + } +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/Tenants/Index.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/Tenants/Index.razor deleted file mode 100644 index fccf9239d6..0000000000 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/Tenants/Index.razor +++ /dev/null @@ -1,8 +0,0 @@ -@page "/TenantManagement/Tenants" -@using Microsoft.Extensions.Localization -@using Volo.Abp.TenantManagement.Localization -@inject IStringLocalizer L -@{ -} -

    MyProjectName

    -

    @L["SamplePageMessage"]

    \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj index 1bcaeccb0b..0aec8b042a 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj @@ -1,20 +1,26 @@ - + - - - - - netstandard2.1 - 3.0 - Volo.Abp.TenantManagement.Blazor - + + - - - - + + netstandard2.1 + 3.0 + + + + + + + + + + + + + + true + + - - - diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Import.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Imports.razor similarity index 66% rename from modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Import.razor rename to modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Imports.razor index 4685ac9893..bcb4626f1f 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Import.razor +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/_Imports.razor @@ -1,5 +1,6 @@ @using Microsoft.AspNetCore.Components.Web @using Volo.Abp.AspNetCore.Components.WebAssembly +@using Microsoft.AspNetCore.Components.Forms @using Volo.Abp.BlazoriseUI @using Blazorise -@using Blazorise.DataGrid \ No newline at end of file +@using Blazorise.DataGrid From 3d17f53eac420f6477c98c3e794ab937af62440a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Arma=C4=9Fan=20=C3=9Cnl=C3=BC?= <36102404+armgnunlu@users.noreply.github.com> Date: Thu, 24 Sep 2020 15:40:41 +0300 Subject: [PATCH 047/143] Resolved #3223 --- .../Pages/Index.cshtml | 162 ++++++++++++++++-- 1 file changed, 150 insertions(+), 12 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml index 532aa810c4..d01781f24b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml @@ -15,17 +15,155 @@ } -
    -

    @L["Welcome"]

    -
    -
    -

    @L["LongWelcomeMessage"]

    -
    +
    \ No newline at end of file +
    +

    Let's improve your application!

    +

    Here are some links to help you get started:

    +
    +
    +
    +
    +
    +
    +
    Learn Abp.io
    +

    The easiest way to start a new web application with the ABP Framework.

    + See Documents +
    +
    +
    +
    +
    Support
    +

    See answers to previously asked questions or ask a new one.

    + Questions +
    +
    +
    +
    +
    ABP Community
    +

    Get involved with a vibrant community and become a contributor.

    + Community + Contribute +
    +
    +
    +
    +
    +
    +
    ABP Blog
    +

    Take a look at our recently published articles.

    + See Blog +
    +
    +
    +
    +
    Github
    +

    Do you love Abp.io?

    +

    + Star + Issue + Fork +

    + Feature Requests +
    +
    +
    +
    +
    Stackoverflow
    +

    See answers to previously asked questions or ask a new one.

    + Questions + Ask a Question +
    +
    +
    +
    +
    + + +
    +

    Meet the Abp Commercial

    +

    A Complete Web Application Platform Built-on Abp Framework

    +
    + +
    +
    +

    + ABP Commercial is a platform based on the open source ABP framework. It provides pre-built application modules, + rapid application development tooling, professional UI themes, premium support and more. +

    + +
    +
    +
    +
    + Startup Templates + Details +
    +
    +
    +
    +
    +
    + Application Modules + Details +
    +
    +
    +
    +
    +
    + Developer
    Tools + Details +
    +
    +
    +
    +
    +
    + UI
    Themes + Details +
    +
    +
    +
    +
    +
    + Additional Services + Details +
    +
    +
    +
    +
    +
    + Premium Support + Details +
    +
    +
    +
    +
    +
    + +
    + \ No newline at end of file From 1093a47a8323388d3dc8815efd6d0066ef43fab2 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Thu, 24 Sep 2020 15:57:06 +0300 Subject: [PATCH 048/143] Update _Imports.razor --- .../{_Import.razor => _Imports.razor} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/{_Import.razor => _Imports.razor} (100%) diff --git a/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Import.razor b/templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor similarity index 100% rename from templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Import.razor rename to templates/module/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/_Imports.razor From 1256a3007ec3ac60064cae1cb36a630a26b4cf34 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Thu, 24 Sep 2020 21:36:36 +0300 Subject: [PATCH 049/143] update tenant-management blazor --- .../Volo.Abp.TenantManagement.sln | 14 ++--- ... TenantManagementBlazorMenuContributor.cs} | 11 ++-- .../TenantManagement/TenantManagement.razor | 60 +++++++++++++++++++ .../Volo.Abp.TenantManagement.Blazor.csproj | 6 -- .../MyCompanyName.MyProjectName.Blazor.csproj | 1 + .../MyProjectNameBlazorModule.cs | 4 +- 6 files changed, 75 insertions(+), 21 deletions(-) rename modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/{AbpIdentityWebMainMenuContributor.cs => TenantManagementBlazorMenuContributor.cs} (74%) diff --git a/modules/tenant-management/Volo.Abp.TenantManagement.sln b/modules/tenant-management/Volo.Abp.TenantManagement.sln index 1e14ca56a7..2b345717d7 100644 --- a/modules/tenant-management/Volo.Abp.TenantManagement.sln +++ b/modules/tenant-management/Volo.Abp.TenantManagement.sln @@ -33,9 +33,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.M EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.TestBase", "test\Volo.Abp.TenantManagement.TestBase\Volo.Abp.TenantManagement.TestBase.csproj", "{C3BAD6E8-00CD-4283-9416-64287BB5B265}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TenantManagement.Domain.Tests", "test\Volo.Abp.TenantManagement.Domain.Tests\Volo.Abp.TenantManagement.Domain.Tests.csproj", "{F7219BE2-4588-489C-9D31-647C59694C03}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.Domain.Tests", "test\Volo.Abp.TenantManagement.Domain.Tests\Volo.Abp.TenantManagement.Domain.Tests.csproj", "{F7219BE2-4588-489C-9D31-647C59694C03}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.TenantManagement.Blazor", "src\Volo.Abp.TenantManagement.Blazor\Volo.Abp.TenantManagement.Blazor.csproj", "{05040C16-B531-446A-B406-277E44D147C0}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.TenantManagement.Blazor", "src\Volo.Abp.TenantManagement.Blazor\Volo.Abp.TenantManagement.Blazor.csproj", "{02D10CCE-03B6-42BC-8C7B-7F1EC74FCB8C}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -99,10 +99,10 @@ Global {F7219BE2-4588-489C-9D31-647C59694C03}.Debug|Any CPU.Build.0 = Debug|Any CPU {F7219BE2-4588-489C-9D31-647C59694C03}.Release|Any CPU.ActiveCfg = Release|Any CPU {F7219BE2-4588-489C-9D31-647C59694C03}.Release|Any CPU.Build.0 = Release|Any CPU - {05040C16-B531-446A-B406-277E44D147C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {05040C16-B531-446A-B406-277E44D147C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {05040C16-B531-446A-B406-277E44D147C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {05040C16-B531-446A-B406-277E44D147C0}.Release|Any CPU.Build.0 = Release|Any CPU + {02D10CCE-03B6-42BC-8C7B-7F1EC74FCB8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {02D10CCE-03B6-42BC-8C7B-7F1EC74FCB8C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {02D10CCE-03B6-42BC-8C7B-7F1EC74FCB8C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {02D10CCE-03B6-42BC-8C7B-7F1EC74FCB8C}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -122,7 +122,7 @@ Global {F75B4C54-A5F1-4101-99F5-A5B868A5146B} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} {C3BAD6E8-00CD-4283-9416-64287BB5B265} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} {F7219BE2-4588-489C-9D31-647C59694C03} = {C6941869-A9FC-4BEA-AD3F-C1E104826ECA} - {05040C16-B531-446A-B406-277E44D147C0} = {799CA525-4748-421A-9892-05C68BB2FA13} + {02D10CCE-03B6-42BC-8C7B-7F1EC74FCB8C} = {799CA525-4748-421A-9892-05C68BB2FA13} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {7C258726-2CE0-44D3-A2D7-71812E8F505C} diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/AbpIdentityWebMainMenuContributor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/TenantManagementBlazorMenuContributor.cs similarity index 74% rename from modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/AbpIdentityWebMainMenuContributor.cs rename to modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/TenantManagementBlazorMenuContributor.cs index b389248dc9..1fe3d09ca2 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/AbpIdentityWebMainMenuContributor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/TenantManagementBlazorMenuContributor.cs @@ -6,16 +6,13 @@ namespace Volo.Abp.TenantManagement.Blazor.Navigation { public class TenantManagementBlazorMenuContributor : IMenuContributor { - public async Task ConfigureMenuAsync(MenuConfigurationContext context) + public virtual async Task ConfigureMenuAsync(MenuConfigurationContext context) { - if (context.Menu.Name == StandardMenus.Main) + if (context.Menu.Name != StandardMenus.Main) { - await ConfigureMainMenu(context); + return; } - } - private async Task ConfigureMainMenu(MenuConfigurationContext context) - { var administrationMenu = context.Menu.GetAdministration(); var l = context.GetLocalizer(); @@ -25,7 +22,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Navigation if (await context.IsGrantedAsync(TenantManagementPermissions.Tenants.Default)) { - tenantManagementMenuItem.AddItem(new ApplicationMenuItem(TenantManagementMenuNames.Tenants, l["Tenants"], url: "TenantManagement/Tenants")); + tenantManagementMenuItem.AddItem(new ApplicationMenuItem(TenantManagementMenuNames.Tenants, l["Tenants"], url: "~/tenant-management/tenants")); } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor index f24a4fa5c7..d43488e280 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor @@ -59,3 +59,63 @@ + +@* ************************* CREATE MODAL ************************* *@ +@if (HasCreatePermission) +{ + + + + + @L["NewTenant"] + + + + + + @L["TenantName"] + + + + @L["DisplayName:AdminEmailAddress"] + + + + @L["DisplayName:AdminPassword"] + + + + + + + + + + +} + +@* ************************* EDIT MODAL ************************* *@ +@if (HasUpdatePermission) +{ + + + + + @L["Edit"] + + + + + + @L["TenantName"] + + + + + + + + + + +} \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj index 0aec8b042a..38bbaf39a2 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj @@ -17,10 +17,4 @@ - - - true - - - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index cd24bd29d2..c716843c19 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -20,6 +20,7 @@ + diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs index df234b5665..80174dec40 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs @@ -16,6 +16,7 @@ using Volo.Abp.UI.Navigation; using Volo.Abp.Identity.Blazor; using Volo.Abp.Account.Blazor; using Volo.Abp.AutoMapper; +using Volo.Abp.TenantManagement.Blazor; namespace MyCompanyName.MyProjectName.Blazor { @@ -24,7 +25,8 @@ namespace MyCompanyName.MyProjectName.Blazor typeof(MyProjectNameHttpApiClientModule), typeof(AbpAspNetCoreComponentsWebAssemblyBasicThemeModule), typeof(AbpIdentityBlazorModule), - typeof(AbpAccountBlazorModule) + typeof(AbpAccountBlazorModule), + typeof(AbpTenantManagementBlazorModule) )] public class MyProjectNameBlazorModule : AbpModule { From b95c001d4fb5320e8d8dd54b58b3547750c3bd57 Mon Sep 17 00:00:00 2001 From: Qingxiao Ren Date: Fri, 25 Sep 2020 11:37:08 +0800 Subject: [PATCH 050/143] Update AspNet-Boilerplate-Migration-Guide.md --- docs/en/AspNet-Boilerplate-Migration-Guide.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/AspNet-Boilerplate-Migration-Guide.md b/docs/en/AspNet-Boilerplate-Migration-Guide.md index 9929b6d24d..c7cc8a9e53 100644 --- a/docs/en/AspNet-Boilerplate-Migration-Guide.md +++ b/docs/en/AspNet-Boilerplate-Migration-Guide.md @@ -364,9 +364,9 @@ ABP Framework doesn't have the same service. Instead, use `ICurrentUser` and `IC ABP Framework extends the [ASP.NET Core Authorization](https://docs.microsoft.com/en-us/aspnet/core/security/authorization/introduction) by adding **permissions** as auto [policies](https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies) and allowing the authorization system to be usable in the [application services](Application-Services.md) too. -#### AbpAutorize vs Autorize +#### AbpAuthorize vs Authorize -Use the standard `[Autorize]` and `[AllowAnonymous]` attributes instead of ASP.NET Boilerplate's custom `[AbpAutorize]` and `[AbpAllowAnonymous]` attributes. +Use the standard `[Authorize]` and `[AllowAnonymous]` attributes instead of ASP.NET Boilerplate's custom `[AbpAuthorize]` and `[AbpAllowAnonymous]` attributes. #### IPermissionChecker vs IAuthorizationService @@ -672,9 +672,9 @@ It was like `abp.localization.localize(...)` in the ASP.NET Boilerplate. ### Navigation vs Menu -In ASP.NET you create a class deriving from the `NavigationProvider` to define your menu elements. Menu items has `requiredPermissionName` attributes to restrict access to a menu element. Menu items were static and your class is executed only one time. +In ASP.NET Boilerplate you create a class deriving from the `NavigationProvider` to define your menu elements. Menu items has `requiredPermissionName` attributes to restrict access to a menu element. Menu items were static and your class is executed only one time. -Int the ABP Framework you need to create a class implements the `IMenuContributor` interface. Your class is executed whenever the menu needs to be rendered. So, you can conditionally add menu items. +In the ABP Framework you need to create a class implements the `IMenuContributor` interface. Your class is executed whenever the menu needs to be rendered. So, you can conditionally add menu items. As an example, this is the menu contributor of the tenant management module: From 0a2d7af5c9bd0f794d81b3325899fe234d3f6cd0 Mon Sep 17 00:00:00 2001 From: berkansasmaz Date: Fri, 25 Sep 2020 09:24:31 +0300 Subject: [PATCH 051/143] Community localization updated. --- .../AbpIoLocalization/Community/Localization/Resources/en.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json index 286346a5b5..ea5237bc29 100644 --- a/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json +++ b/abp_io/AbpIoLocalization/AbpIoLocalization/Community/Localization/Resources/en.json @@ -82,6 +82,7 @@ "SeeAllAnnouncements": "See All Announcements", "LatestBlogPost": "Latest Blog Post", "Edit": "Edit", - "ProfileImageChange": "Change the profile image" + "ProfileImageChange": "Change the profile image", + "BlogItemErrorMessage": "Could not get the latest blog post details from ABP." } } From 0178b6c324e86c5ece4a1aeb460c53e1c9a1096f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 25 Sep 2020 11:36:04 +0300 Subject: [PATCH 052/143] Added IAbpUtilsService --- .../AbpUtilsService.cs | 31 +++++++++++++++++++ .../IAbpUtilsService.cs | 11 +++++++ .../wwwroot/abp_theming.js | 27 ++++++++++++++++ 3 files changed, 69 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/AbpUtilsService.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/IAbpUtilsService.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/abp_theming.js diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/AbpUtilsService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/AbpUtilsService.cs new file mode 100644 index 0000000000..006674e7c5 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/AbpUtilsService.cs @@ -0,0 +1,31 @@ +using System.Threading.Tasks; +using Microsoft.JSInterop; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming +{ + public class AbpUtilsService : IAbpUtilsService, ITransientDependency + { + protected IJSRuntime JsRuntime { get; } + + public AbpUtilsService(IJSRuntime jsRuntime) + { + JsRuntime = jsRuntime; + } + + public ValueTask AddClassToTagAsync(string tagName, string className) + { + return JsRuntime.InvokeVoidAsync("abp.utils.addClassToTag", tagName, className); + } + + public ValueTask RemoveClassFromTagAsync(string tagName, string className) + { + return JsRuntime.InvokeVoidAsync("abp.utils.removeClassFromTag", tagName, className); + } + + public ValueTask HasClassOnTag(string tagName, string className) + { + return JsRuntime.InvokeAsync("abp.utils.hasClassOnTag", tagName, className); + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/IAbpUtilsService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/IAbpUtilsService.cs new file mode 100644 index 0000000000..dddea5ff4f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/IAbpUtilsService.cs @@ -0,0 +1,11 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming +{ + public interface IAbpUtilsService + { + ValueTask AddClassToTagAsync(string tagName, string className); + ValueTask RemoveClassFromTagAsync(string tagName, string className); + ValueTask HasClassOnTag(string tagName, string className); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/abp_theming.js b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/abp_theming.js new file mode 100644 index 0000000000..7c7032ebbe --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/abp_theming.js @@ -0,0 +1,27 @@ +var abp = abp || {}; +(function () { + abp.utils = abp.utils || {}; + + abp.utils.addClassToTag = function (tagName, className) { + var tags = document.getElementsByTagName(tagName); + for (var i = 0; i < tags.length; i++) { + tags[i].classList.add(className); + } + }; + + abp.utils.removeClassFromTag = function (tagName, className) { + var tags = document.getElementsByTagName(tagName); + for (var i = 0; i < tags.length; i++) { + tags[i].classList.remove(className); + } + }; + + abp.utils.hasClassOnTag = function (tagName, className) { + var tags = document.getElementsByTagName(tagName); + if(tags.length){ + return tags[0].classList.contains(className); + } + + return false; + }; +})(); From 33139cc58128253eed0d7df4edea3af517bdf6a7 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 25 Sep 2020 11:58:13 +0300 Subject: [PATCH 053/143] refactor: add filter to languageChange getter to fix a problem in dynamic layout resolves #5229 --- .../packages/core/src/lib/services/localization.service.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/services/localization.service.ts b/npm/ng-packs/packages/core/src/lib/services/localization.service.ts index dd64bd27ec..5cdbe3c291 100644 --- a/npm/ng-packs/packages/core/src/lib/services/localization.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/localization.service.ts @@ -2,7 +2,7 @@ import { Injectable, Injector, NgZone, Optional, SkipSelf } from '@angular/core' import { ActivatedRouteSnapshot, Router } from '@angular/router'; import { Actions, ofActionSuccessful, Store } from '@ngxs/store'; import { noop, Observable } from 'rxjs'; -import { map } from 'rxjs/operators'; +import { filter, map } from 'rxjs/operators'; import { SetLanguage } from '../actions/session.actions'; import { Config } from '../models/config'; import { ConfigState } from '../states/config.state'; @@ -22,7 +22,10 @@ export class LocalizationService { } get languageChange(): Observable { - return this.actions.pipe(ofActionSuccessful(SetLanguage)); + return this.actions.pipe( + ofActionSuccessful(SetLanguage), + filter((action: SetLanguage) => action.dispatchAppConfiguration !== false), + ); } constructor( From 66a314409d03cc00c46bd13ebc73cbad0f25d8d7 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 25 Sep 2020 11:58:47 +0300 Subject: [PATCH 054/143] fix: set current lang to session state instead of default language --- .../packages/core/src/lib/states/config.state.ts | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/states/config.state.ts b/npm/ng-packs/packages/core/src/lib/states/config.state.ts index 8639981456..4e686dbe62 100644 --- a/npm/ng-packs/packages/core/src/lib/states/config.state.ts +++ b/npm/ng-packs/packages/core/src/lib/states/config.state.ts @@ -218,20 +218,17 @@ export class ConfigState { }), ), switchMap(configuration => { - let defaultLang: string = - configuration.setting.values['Abp.Localization.DefaultLanguage']; + let lang = configuration.localization.currentCulture.cultureName; - if (defaultLang.includes(';')) { - defaultLang = defaultLang.split(';')[0]; + if (lang.includes(';')) { + lang = lang.split(';')[0]; } - document.documentElement.setAttribute( - 'lang', - configuration.localization.currentCulture.cultureName, - ); + document.documentElement.setAttribute('lang', lang); + return this.store.selectSnapshot(SessionState.getLanguage) ? of(null) - : dispatch(new SetLanguage(defaultLang, false)); + : dispatch(new SetLanguage(lang, false)); }), catchError((err: HttpErrorResponse) => { dispatch(new RestOccurError(err)); From 0c6d44b9f8e30e2352590b0305d0d0070f22fef5 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 25 Sep 2020 12:11:54 +0300 Subject: [PATCH 055/143] test: fix a test error --- npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts index f9a68e5fd6..10f5d44531 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts @@ -250,7 +250,7 @@ describe('ConfigState', () => { const configuration = { setting: { values: { 'Abp.Localization.DefaultLanguage': 'tr;TR' } }, - localization: { currentCulture: {} }, + localization: { currentCulture: { cultureName: 'en' } }, }; const res$ = new ReplaySubject(1); From 27b8754b88484a97bec3a556f2c43c1d6f9884d2 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 25 Sep 2020 12:20:14 +0300 Subject: [PATCH 056/143] text: fix a problem --- .../packages/core/src/lib/tests/config.state.spec.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts index 10f5d44531..e641cc2241 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/config.state.spec.ts @@ -249,8 +249,7 @@ describe('ConfigState', () => { let dispatchArg; const configuration = { - setting: { values: { 'Abp.Localization.DefaultLanguage': 'tr;TR' } }, - localization: { currentCulture: { cultureName: 'en' } }, + localization: { currentCulture: { cultureName: 'en;EN' } }, }; const res$ = new ReplaySubject(1); @@ -269,7 +268,7 @@ describe('ConfigState', () => { timer(0).subscribe(() => { expect(patchStateArg).toEqual(configuration); expect(dispatchArg instanceof SetLanguage).toBeTruthy(); - expect(dispatchArg).toEqual({ payload: 'tr', dispatchAppConfiguration: false }); + expect(dispatchArg).toEqual({ payload: 'en', dispatchAppConfiguration: false }); done(); }); }); From dde6ff69c3ba02aaaa11f674958303be73f6d518 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Sep 2020 12:55:13 +0300 Subject: [PATCH 057/143] Update IdentityServerDataSeeContributor of module template --- .../IdentityServerDataSeedContributor.cs | 1 + .../IdentityServerDataSeedContributor.cs | 43 ++++++++++++++++--- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs index dcd105a4e9..9edcfd1cd6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/IdentityServer/IdentityServerDataSeedContributor.cs @@ -155,6 +155,7 @@ namespace MyCompanyName.MyProjectName.IdentityServer grantTypes: new[] { "authorization_code" }, secret: configurationSection["MyProjectName_Blazor:ClientSecret"]?.Sha256(), requireClientSecret: false, + requirePkce: true, redirectUri: $"{blazorRootUrl}/authentication/login-callback", postLogoutRedirectUri: $"{blazorRootUrl}/authentication/logout-callback" ); diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs index 593169ae48..c3b50e92f2 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/IdentityServer/IdentityServerDataSeedContributor.cs @@ -1,7 +1,8 @@ -using Microsoft.Extensions.Configuration; -using System; +using System; using System.Collections.Generic; using System.Threading.Tasks; +using IdentityServer4.Models; +using Microsoft.Extensions.Configuration; using Volo.Abp.Authorization.Permissions; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; @@ -11,6 +12,8 @@ using Volo.Abp.IdentityServer.Clients; using Volo.Abp.IdentityServer.IdentityResources; using Volo.Abp.PermissionManagement; using Volo.Abp.Uow; +using ApiResource = Volo.Abp.IdentityServer.ApiResources.ApiResource; +using Client = Volo.Abp.IdentityServer.Clients.Client; namespace MyCompanyName.MyProjectName.IdentityServer { @@ -131,15 +134,37 @@ namespace MyCompanyName.MyProjectName.IdentityServer commonSecret ); } + + // Blazor Client + var blazorClientId = configurationSection["MyProjectName_Blazor:ClientId"]; + if (!blazorClientId.IsNullOrWhiteSpace()) + { + var blazorRootUrl = configurationSection["MyProjectName_Blazor:RootUrl"].TrimEnd('/'); + + await CreateClientAsync( + name: blazorClientId, + scopes: commonScopes, + grantTypes: new[] { "authorization_code" }, + secret: configurationSection["MyProjectName_Blazor:ClientSecret"]?.Sha256(), + requireClientSecret: false, + requirePkce: true, + redirectUri: $"{blazorRootUrl}/authentication/login-callback", + postLogoutRedirectUri: $"{blazorRootUrl}/authentication/logout-callback" + ); + } + } private async Task CreateClientAsync( string name, IEnumerable scopes, IEnumerable grantTypes, - string secret, + string secret = null, string redirectUri = null, string postLogoutRedirectUri = null, + string frontChannelLogoutUri = null, + bool requireClientSecret = true, + bool requirePkce = false, IEnumerable permissions = null) { var client = await _clientRepository.FindByCliendIdAsync(name); @@ -160,7 +185,10 @@ namespace MyCompanyName.MyProjectName.IdentityServer AccessTokenLifetime = 31536000, //365 days AuthorizationCodeLifetime = 300, IdentityTokenLifetime = 300, - RequireConsent = false + RequireConsent = false, + FrontChannelLogoutUri = frontChannelLogoutUri, + RequireClientSecret = requireClientSecret, + RequirePkce = requirePkce }, autoSave: true ); @@ -182,9 +210,12 @@ namespace MyCompanyName.MyProjectName.IdentityServer } } - if (client.FindSecret(secret) == null) + if (!secret.IsNullOrEmpty()) { - client.AddSecret(secret); + if (client.FindSecret(secret) == null) + { + client.AddSecret(secret); + } } if (redirectUri != null) From f10503cd30c0707147a024110de571903eff0791 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 25 Sep 2020 14:31:23 +0300 Subject: [PATCH 058/143] fix: resolve redirect logout uri problem --- .../packages/core/src/lib/strategies/auth-flow.strategy.ts | 2 +- npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts index 2c10ba4c99..e301ad19cb 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/auth-flow.strategy.ts @@ -119,7 +119,7 @@ export const AUTH_FLOW_STRATEGY = { }, }; -function clearOAuthStorage(storage: OAuthStorage) { +export function clearOAuthStorage(storage: OAuthStorage = oAuthStorage) { const keys = [ 'access_token', 'id_token', diff --git a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts index 36e2c22bca..cf35cc3023 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts @@ -7,6 +7,7 @@ import { GetAppConfiguration } from '../actions/config.actions'; import { ABP } from '../models/common'; import { AuthService } from '../services/auth.service'; import { ConfigState } from '../states/config.state'; +import { clearOAuthStorage } from '../strategies/auth-flow.strategy'; import { CORE_OPTIONS } from '../tokens/options.token'; import { getRemoteEnv } from './environment-utils'; import { parseTenantFromUrl } from './multi-tenancy-utils'; @@ -34,7 +35,7 @@ export function getInitialData(injector: Injector) { export function checkAccessToken(store: Store, injector: Injector) { const oAuth = injector.get(OAuthService); if (oAuth.hasValidAccessToken() && !store.selectSnapshot(ConfigState.getDeep('currentUser.id'))) { - oAuth.logOut(); + clearOAuthStorage(); } } From 20b0a528547af9dd6d972d477b3bb3f3c4cc3647 Mon Sep 17 00:00:00 2001 From: Mehmet Erim <34455572+mehmet-erim@users.noreply.github.com> Date: Fri, 25 Sep 2020 14:37:47 +0300 Subject: [PATCH 059/143] Update Getting-Started-React-Native.md --- docs/en/Getting-Started-React-Native.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Getting-Started-React-Native.md b/docs/en/Getting-Started-React-Native.md index 28f56e4b69..74a8f2b829 100644 --- a/docs/en/Getting-Started-React-Native.md +++ b/docs/en/Getting-Started-React-Native.md @@ -110,4 +110,4 @@ The application is up and running. You can continue to develop your application ## See Also -* [React Native application structure](./Startup-Templates/Application.md#react-native) \ No newline at end of file +* [React Native project structure](./Startup-Templates/Application.md#react-native) From 4c7ff73f5b2d7f234688fc58c381e41a493551cc Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Sep 2020 14:50:58 +0300 Subject: [PATCH 060/143] Added manage connection strings modal to tenant management blazor --- .../TenantManagement/TenantManagement.razor | 45 +++++++++++++- .../TenantManagement.razor.cs | 62 ++++++++++++++++++- 2 files changed, 104 insertions(+), 3 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor index d43488e280..6b3320eb9f 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor @@ -42,6 +42,14 @@ { @L["Edit"] } + @if (HasManageConnectionStringsPermission) + { + @L["ConnectionStrings"] + } + @if (HasManageFeaturesPermission) + { + @L["Features"] + } @if (HasDeletePermission) { @@ -78,11 +86,11 @@ @L["DisplayName:AdminEmailAddress"] - + @L["DisplayName:AdminPassword"] - + @@ -118,4 +126,37 @@ +} + +@* ************************* EDIT CONNECTION STRING MODAL ************************* *@ +@if (HasUpdatePermission) +{ + + + + + @L["ConnectionStrings"] + + + + + + @L["DisplayName:DefaultConnectionString"] + + + @if (!TenantInfo.UseSharedDatabase) + { + + @L["DisplayName:DefaultConnectionString"] + + + } + + + + + + + + } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs index 5cdb622398..5db7bc35ad 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -1,5 +1,7 @@ using System; using System.Threading.Tasks; +using Blazorise; +using Microsoft.AspNetCore.Authorization; using Volo.Abp.BlazoriseUI; namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement @@ -8,6 +10,12 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement : AbpCrudPageBase { protected bool ShouldShowEntityActions; + protected bool HasManageConnectionStringsPermission; + protected bool HasManageFeaturesPermission; + + protected Modal ManageConnectionStringModal; + + protected TenantInfoModel TenantInfo; public TenantManagementBase() { @@ -16,14 +24,66 @@ namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement CreatePolicyName = TenantManagementPermissions.Tenants.Create; UpdatePolicyName = TenantManagementPermissions.Tenants.Update; DeletePolicyName = TenantManagementPermissions.Tenants.Delete; + + TenantInfo = new TenantInfoModel(); } protected override async Task SetPermissionsAsync() { await base.SetPermissionsAsync(); + HasManageConnectionStringsPermission = await AuthorizationService.IsGrantedAsync(TenantManagementPermissions.Tenants.ManageConnectionStrings); + HasManageFeaturesPermission = await AuthorizationService.IsGrantedAsync(TenantManagementPermissions.Tenants.ManageFeatures); + ShouldShowEntityActions = HasUpdatePermission || - HasDeletePermission; + HasDeletePermission || + HasManageConnectionStringsPermission || + HasManageFeaturesPermission; + } + + protected virtual async Task OpenEditConnectionStringModalAsync(Guid id) + { + var tenantConnectionString = await AppService.GetDefaultConnectionStringAsync(id); + + TenantInfo = new TenantInfoModel + { + Id = id, + DefaultConnectionString = tenantConnectionString, + UseSharedDatabase = tenantConnectionString.IsNullOrWhiteSpace() + }; + + ManageConnectionStringModal.Show(); } + + protected virtual Task CloseEditConnectionStringModal() + { + ManageConnectionStringModal.Hide(); + return Task.CompletedTask; + } + + protected virtual async Task UpdateConnectionStringAsync() + { + await CheckPolicyAsync(TenantManagementPermissions.Tenants.ManageConnectionStrings); + + if (TenantInfo.UseSharedDatabase || TenantInfo.DefaultConnectionString.IsNullOrWhiteSpace()) + { + await AppService.DeleteDefaultConnectionStringAsync(TenantInfo.Id); + } + else + { + await AppService.UpdateDefaultConnectionStringAsync(TenantInfo.Id, TenantInfo.DefaultConnectionString); + } + + ManageConnectionStringModal.Hide(); + } + } + + public class TenantInfoModel + { + public Guid Id { get; set; } + + public bool UseSharedDatabase { get; set; } + + public string DefaultConnectionString { get; set; } } } \ No newline at end of file From 5e532fb9c9cb9a38dfa0562b9efffcb18d7e3a7a Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Fri, 25 Sep 2020 15:18:28 +0300 Subject: [PATCH 061/143] fix: resolve a testing error --- .../packages/core/src/lib/tests/initial-utils.spec.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/tests/initial-utils.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/initial-utils.spec.ts index 07dfc84d67..53fba4ed06 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/initial-utils.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/initial-utils.spec.ts @@ -4,6 +4,7 @@ import { Store } from '@ngxs/store'; import { OAuthService } from 'angular-oauth2-oidc'; import { of } from 'rxjs'; import { GetAppConfiguration } from '../actions'; +import * as AuthFlowStrategy from '../strategies/auth-flow.strategy'; import { CORE_OPTIONS } from '../tokens/options.token'; import { checkAccessToken, getInitialData, localeInitializer } from '../utils'; import * as environmentUtils from '../utils/environment-utils'; @@ -54,9 +55,9 @@ describe('InitialUtils', () => { test('should call logOut fn of OAuthService when token is valid and current user not found', async () => { const injector = spectator.inject(Injector); const injectorSpy = jest.spyOn(injector, 'get'); - const logOutFn = jest.fn(); + const clearOAuthStorageSpy = jest.spyOn(AuthFlowStrategy, 'clearOAuthStorage'); - injectorSpy.mockReturnValue({ hasValidAccessToken: () => true, logOut: logOutFn }); + injectorSpy.mockReturnValue({ hasValidAccessToken: () => true }); checkAccessToken( { @@ -64,7 +65,7 @@ describe('InitialUtils', () => { } as any, injector, ); - expect(logOutFn).toHaveBeenCalled(); + expect(clearOAuthStorageSpy).toHaveBeenCalled(); }); }); From a3d92aed419845e592aee368af6f2a2310e57409 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Sep 2020 16:15:42 +0300 Subject: [PATCH 062/143] Closes: #5544 --- .../AbpTenantManagementBlazorModule.cs | 4 +++- .../Pages/TenantManagement/TenantManagement.razor | 8 +++++++- .../Pages/TenantManagement/TenantManagement.razor.cs | 5 +++++ .../Volo.Abp.TenantManagement.Blazor.csproj | 4 ++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs index 81c4733582..c5a4970e79 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/AbpTenantManagementBlazorModule.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.DependencyInjection; using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Routing; using Volo.Abp.AutoMapper; +using Volo.Abp.FeatureManagement.Blazor; using Volo.Abp.Modularity; using Volo.Abp.TenantManagement.Blazor.Navigation; using Volo.Abp.UI.Navigation; @@ -9,7 +10,8 @@ namespace Volo.Abp.TenantManagement.Blazor { [DependsOn( typeof(AbpAutoMapperModule), - typeof(AbpTenantManagementHttpApiClientModule) + typeof(AbpTenantManagementHttpApiClientModule), + typeof(AbpFeatureManagementBlazorModule) )] public class AbpTenantManagementBlazorModule : AbpModule { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor index 6b3320eb9f..0b2f60d23b 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor @@ -3,6 +3,7 @@ @using Microsoft.AspNetCore.Authorization @using Microsoft.Extensions.Localization @using Volo.Abp.TenantManagement.Localization +@using Volo.Abp.FeatureManagement.Blazor.Components @inherits TenantManagementBase @inject IStringLocalizer L @@ -48,7 +49,7 @@ } @if (HasManageFeaturesPermission) { - @L["Features"] + @L["Features"] } @if (HasDeletePermission) { @@ -159,4 +160,9 @@ +} + +@if (HasManageFeaturesPermission) +{ + } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs index 5db7bc35ad..f9dd57422e 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Pages/TenantManagement/TenantManagement.razor.cs @@ -3,16 +3,21 @@ using System.Threading.Tasks; using Blazorise; using Microsoft.AspNetCore.Authorization; using Volo.Abp.BlazoriseUI; +using Volo.Abp.FeatureManagement.Blazor.Components; namespace Volo.Abp.TenantManagement.Blazor.Pages.TenantManagement { public abstract class TenantManagementBase : AbpCrudPageBase { + protected const string FeatureProviderName = "T"; + protected bool ShouldShowEntityActions; protected bool HasManageConnectionStringsPermission; protected bool HasManageFeaturesPermission; + protected FeatureManagementModal FeatureManagementModal; + protected Modal ManageConnectionStringModal; protected TenantInfoModel TenantInfo; diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj index 38bbaf39a2..31e37e02a7 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Volo.Abp.TenantManagement.Blazor.csproj @@ -13,6 +13,10 @@ + + + + From 826bf4a8f83f4d8d2cb93cd693ad5653e8d0c989 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Fri, 25 Sep 2020 17:08:08 +0300 Subject: [PATCH 063/143] Refactor FeaturManagemet Blazor Modal --- .../Components/FeatureManagementModal.razor | 26 +++--- .../FeatureManagementModal.razor.cs | 93 +++++++++++++------ 2 files changed, 80 insertions(+), 39 deletions(-) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor index ef5c8751ae..14074f60fe 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor @@ -1,9 +1,7 @@ -@using Microsoft.Extensions.Localization -@using Volo.Abp.FeatureManagement.Localization -@using Volo.Abp.Validation.StringValues -@inject IStringLocalizer L +@using Volo.Abp.Validation.StringValues +@using Microsoft.Extensions.Localization - + @@ -12,15 +10,15 @@ - @if (_groups == null) + @if (Groups == null) { @L["NoFeatureFoundMessage"] } else { - + - @foreach (var group in _groups) + @foreach (var group in Groups) { @group.DisplayName @@ -28,7 +26,7 @@ } - @foreach (var group in _groups) + @foreach (var group in Groups) {

    @group.DisplayName

    @@ -58,10 +56,14 @@ @feature.DisplayName - @foreach (var item in items) { - @item.DisplayText + + @CreateStringLocalizer(item.DisplayText.ResourceName).GetString(item.DisplayText.Name) + } @@ -70,7 +72,7 @@ if (feature.ValueType is ToggleStringValueType) { - @feature.DisplayName + @feature.DisplayName } } diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs index f1805a620f..c4b31d7262 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs @@ -3,74 +3,102 @@ using System.Linq; using System.Threading.Tasks; using Blazorise; using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; using Volo.Abp.AspNetCore.Components.WebAssembly; +using Volo.Abp.FeatureManagement.Localization; using Volo.Abp.Features; +using Volo.Abp.Localization; using Volo.Abp.Validation.StringValues; namespace Volo.Abp.FeatureManagement.Blazor.Components { public partial class FeatureManagementModal { - [Inject] private IFeatureAppService FeatureAppService { get; set; } + [Inject] protected IFeatureAppService FeatureAppService { get; set; } [Inject] protected IUiMessageService UiMessageService { get; set; } + + [Inject] protected IStringLocalizer L { get; set; } + + [Inject] protected IStringLocalizerFactory HtmlLocalizerFactory { get; set; } + + [Inject] protected IOptions LocalizationOptions { get; set; } - private Modal _modal; + protected Modal Modal; - private string _providerName; - private string _providerKey; + protected string ProviderName; + protected string ProviderKey; - private List _groups { get; set; } + protected List Groups { get; set; } - private Dictionary _toggleValues; + protected Dictionary ToggleValues; + + protected Dictionary SelectionStringValues; - public async Task OpenAsync(string providerName, string providerKey) + public virtual async Task OpenAsync(string providerName, string providerKey) { - _providerName = providerName; - _providerKey = providerKey; - - _groups = (await FeatureAppService.GetAsync(_providerName, _providerKey)).Groups; + ProviderName = providerName; + ProviderKey = providerKey; - _toggleValues = _groups - .SelectMany(x => x.Features) - .Where(x => x.ValueType is ToggleStringValueType) - .ToDictionary(x => x.Name, x => bool.Parse(x.Value)); + ToggleValues = new Dictionary(); + SelectionStringValues = new Dictionary(); - _modal.Show(); + Groups = (await FeatureAppService.GetAsync(ProviderName, ProviderKey)).Groups; + + foreach (var featureGroupDto in Groups) + { + foreach (var featureDto in featureGroupDto.Features) + { + if (featureDto.ValueType is ToggleStringValueType) + { + ToggleValues.Add(featureDto.Name, bool.Parse(featureDto.Value)); + } + + if (featureDto.ValueType is SelectionStringValueType) + { + SelectionStringValues.Add(featureDto.Name, featureDto.Value); + } + } + } + + Modal.Show(); } - private void CloseModal() + public virtual Task CloseModal() { - _modal.Hide(); + Modal.Hide(); + return Task.CompletedTask; } - private async Task SaveAsync() + protected virtual async Task SaveAsync() { var features = new UpdateFeaturesDto { - Features = _groups.SelectMany(g => g.Features).Select(f => new UpdateFeatureDto + Features = Groups.SelectMany(g => g.Features).Select(f => new UpdateFeatureDto { Name = f.Name, - Value = f.ValueType is ToggleStringValueType ? _toggleValues[f.Name].ToString() : f.Value + Value = f.ValueType is ToggleStringValueType ? ToggleValues[f.Name].ToString() : + f.ValueType is SelectionStringValueType ? SelectionStringValues[f.Name] : f.Value }).ToList() }; - await FeatureAppService.UpdateAsync(_providerName, _providerKey, features); + await FeatureAppService.UpdateAsync(ProviderName, ProviderKey, features); - _modal.Hide(); + Modal.Hide(); } - public string GetNormalizedGroupName(string name) + protected virtual string GetNormalizedGroupName(string name) { return "FeatureGroup_" + name.Replace(".", "_"); } - public virtual bool IsDisabled(string providerName) + protected virtual bool IsDisabled(string providerName) { - return providerName != _providerName && providerName != DefaultValueFeatureValueProvider.ProviderName; + return providerName != ProviderName && providerName != DefaultValueFeatureValueProvider.ProviderName; } - private async Task OnFeatureValueChangedAsync(string value, FeatureDto feature) + protected virtual async Task OnFeatureValueChangedAsync(string value, FeatureDto feature) { if (feature.ValueType.Validator.IsValid(value)) { @@ -81,5 +109,16 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components await UiMessageService.WarnAsync(L["Volo.Abp.FeatureManagement:InvalidFeatureValue", feature.DisplayName]); } } + + protected virtual void SelectedValueChanged(string featureName, string value) + { + SelectionStringValues[featureName] = value; + } + + protected virtual IStringLocalizer CreateStringLocalizer(string resourceName) + { + var resource = LocalizationOptions.Value.Resources.Values.FirstOrDefault(x => x.ResourceName == resourceName); + return HtmlLocalizerFactory.Create(resource != null ? resource.ResourceType : LocalizationOptions.Value.DefaultResourceType); + } } } \ No newline at end of file From 70e29ab2d8ded0145a3810185d491abadeb1f4d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 25 Sep 2020 17:10:04 +0300 Subject: [PATCH 064/143] Added IAsyncInitialize & utils for the blazor UI --- .../AbpUtilsService.cs | 9 +++++++-- .../IAbpUtilsService.cs | 6 +++++- .../wwwroot/abp_theming.js | 10 +++++++++- .../Hosting/AbpWebAssemblyHostBuilderExtensions.cs | 8 ++++---- ...bAssemblyCachedApplicationConfigurationClient.cs | 5 +++++ .../Client/ICachedApplicationConfigurationClient.cs | 4 +--- .../MvcCachedApplicationConfigurationClient.cs | 5 +++++ .../src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs | 13 +++++++++++++ 8 files changed, 49 insertions(+), 11 deletions(-) create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/AbpUtilsService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/AbpUtilsService.cs index 006674e7c5..4e4f141655 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/AbpUtilsService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/AbpUtilsService.cs @@ -23,9 +23,14 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming return JsRuntime.InvokeVoidAsync("abp.utils.removeClassFromTag", tagName, className); } - public ValueTask HasClassOnTag(string tagName, string className) + public ValueTask HasClassOnTagAsync(string tagName, string className) { return JsRuntime.InvokeAsync("abp.utils.hasClassOnTag", tagName, className); } + + public ValueTask ReplaceLinkHrefByIdAsync(string linkId, string hrefValue) + { + return JsRuntime.InvokeVoidAsync("abp.utils.replaceLinkHrefById", linkId, hrefValue); + } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/IAbpUtilsService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/IAbpUtilsService.cs index dddea5ff4f..ecc7b744c1 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/IAbpUtilsService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/IAbpUtilsService.cs @@ -5,7 +5,11 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.Theming public interface IAbpUtilsService { ValueTask AddClassToTagAsync(string tagName, string className); + ValueTask RemoveClassFromTagAsync(string tagName, string className); - ValueTask HasClassOnTag(string tagName, string className); + + ValueTask HasClassOnTagAsync(string tagName, string className); + + ValueTask ReplaceLinkHrefByIdAsync(string linkId, string hrefValue); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/abp_theming.js b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/abp_theming.js index 7c7032ebbe..9ea2bed132 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/abp_theming.js +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.Theming/wwwroot/abp_theming.js @@ -18,10 +18,18 @@ abp.utils.hasClassOnTag = function (tagName, className) { var tags = document.getElementsByTagName(tagName); - if(tags.length){ + if (tags.length) { return tags[0].classList.contains(className); } return false; }; + + abp.utils.replaceLinkHrefById = function (linkId, hrefValue) { + var link = document.getElementById(linkId); + + if (link && link.href !== hrefValue) { + link.href = hrefValue; + } + }; })(); diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs index 865a6f0edc..ef5ee76722 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Microsoft/AspNetCore/Components/WebAssembly/Hosting/AbpWebAssemblyHostBuilderExtensions.cs @@ -6,7 +6,6 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Volo.Abp; using Volo.Abp.AspNetCore.Components.WebAssembly; -using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.Modularity; namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting @@ -42,9 +41,10 @@ namespace Microsoft.AspNetCore.Components.WebAssembly.Hosting using (var scope = serviceProvider.CreateScope()) { - await scope.ServiceProvider - .GetRequiredService() - .InitializeAsync(); + foreach (var service in scope.ServiceProvider.GetServices()) + { + await service.InitializeAsync(); + } } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs index e403a8cfe9..807e52fa17 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs @@ -6,6 +6,11 @@ using Volo.Abp.Http.Client.DynamicProxying; namespace Volo.Abp.AspNetCore.Components.WebAssembly { + [ExposeServices( + typeof(WebAssemblyCachedApplicationConfigurationClient), + typeof(ICachedApplicationConfigurationClient), + typeof(IAsyncInitialize) + )] public class WebAssemblyCachedApplicationConfigurationClient : ICachedApplicationConfigurationClient, ITransientDependency { protected IHttpClientProxy Proxy { get; } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs index d08ca7013e..80e6c4e054 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client.Common/Volo/Abp/AspNetCore/Mvc/Client/ICachedApplicationConfigurationClient.cs @@ -3,10 +3,8 @@ using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; namespace Volo.Abp.AspNetCore.Mvc.Client { - public interface ICachedApplicationConfigurationClient + public interface ICachedApplicationConfigurationClient : IAsyncInitialize { - Task InitializeAsync(); - Task GetAsync(); ApplicationConfigurationDto Get(); diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs index a357d959b2..a6a4d33668 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.Client/Volo/Abp/AspNetCore/Mvc/Client/MvcCachedApplicationConfigurationClient.cs @@ -12,6 +12,11 @@ using Volo.Abp.Users; namespace Volo.Abp.AspNetCore.Mvc.Client { + [ExposeServices( + typeof(MvcCachedApplicationConfigurationClient), + typeof(ICachedApplicationConfigurationClient), + typeof(IAsyncInitialize) + )] public class MvcCachedApplicationConfigurationClient : ICachedApplicationConfigurationClient, ITransientDependency { protected IHttpContextAccessor HttpContextAccessor { get; } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs b/framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs new file mode 100644 index 0000000000..9c97c04a1e --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/IAsyncInitialize.cs @@ -0,0 +1,13 @@ +using System.Threading.Tasks; + +namespace Volo.Abp +{ + /// + /// IMPORTANT: THIS IS AN INTERNAL CLASS TO BE USED BY THE ABP FRAMEWORK. + /// IT WILL BE REMOVED IN THE FUTURE VERSIONS. DON'T USE IT! + /// + public interface IAsyncInitialize //TODO: Remove once we have async module initialization + { + Task InitializeAsync(); + } +} From 991538fea4ed52dab1dec39b81d2da47b9f3e6f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 25 Sep 2020 19:23:30 +0300 Subject: [PATCH 065/143] Make ICurrentTenant working for the Blazor UI --- ...semblyCachedApplicationConfigurationClient.cs | 16 ++++++++++++++-- .../WebAssemblyCurrentTenantAccessor.cs | 11 +++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentTenantAccessor.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs index 807e52fa17..d71b97334a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCachedApplicationConfigurationClient.cs @@ -3,6 +3,7 @@ using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; using Volo.Abp.AspNetCore.Mvc.Client; using Volo.Abp.DependencyInjection; using Volo.Abp.Http.Client.DynamicProxying; +using Volo.Abp.MultiTenancy; namespace Volo.Abp.AspNetCore.Components.WebAssembly { @@ -17,17 +18,28 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly protected ApplicationConfigurationCache Cache { get; } + protected ICurrentTenantAccessor CurrentTenantAccessor { get; } + public WebAssemblyCachedApplicationConfigurationClient( IHttpClientProxy proxy, - ApplicationConfigurationCache cache) + ApplicationConfigurationCache cache, + ICurrentTenantAccessor currentTenantAccessor) { Proxy = proxy; Cache = cache; + CurrentTenantAccessor = currentTenantAccessor; } public virtual async Task InitializeAsync() { - Cache.Set(await Proxy.Service.GetAsync()); + var configurationDto = await Proxy.Service.GetAsync(); + + Cache.Set(configurationDto); + + CurrentTenantAccessor.Current = new BasicTenantInfo( + configurationDto.CurrentTenant.Id, + configurationDto.CurrentTenant.Name + ); } public virtual Task GetAsync() diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentTenantAccessor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentTenantAccessor.cs new file mode 100644 index 0000000000..eb0ee781ad --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentTenantAccessor.cs @@ -0,0 +1,11 @@ +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + [Dependency(ReplaceServices = true)] + public class WebAssemblyCurrentTenantAccessor : ICurrentTenantAccessor, ISingletonDependency + { + public BasicTenantInfo Current { get; set; } + } +} From c26d47065681bf8d70097a39a96a33a6fe4dc391 Mon Sep 17 00:00:00 2001 From: shaoxiaoxu Date: Sun, 27 Sep 2020 11:10:30 +0800 Subject: [PATCH 066/143] fix:ObjectDisposedException --- .../Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs index 204b1a6a1a..1a3f14e97b 100644 --- a/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs +++ b/framework/src/Volo.Abp.BlobStoring.Minio/Volo/Abp/BlobStoring/Minio/MinioBlobProvider.cs @@ -72,11 +72,11 @@ namespace Volo.Abp.BlobStoring.Minio } var memoryStream = new MemoryStream(); - await client.GetObjectAsync(containerName, blobName, async stream => + await client.GetObjectAsync(containerName, blobName, (stream) => { if (stream != null) { - await stream.CopyToAsync(memoryStream); + stream.CopyTo(memoryStream); } else { From 31b24319be48a576cde3447265c851bd5826b09a Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Mon, 28 Sep 2020 10:15:28 +0800 Subject: [PATCH 067/143] Handle with case issues in json. Resolve #5618 --- .../Volo/Abp/Cli/Commands/TranslateCommand.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/TranslateCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/TranslateCommand.cs index 39dbeafd3c..c3eeddc443 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/TranslateCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/TranslateCommand.cs @@ -255,8 +255,8 @@ namespace Volo.Abp.Cli.Commands return null; } - var culture = jObject.GetValue("culture"); - var texts = jObject.GetValue("texts"); + var culture = jObject.GetValue("culture") ?? jObject.GetValue("Culture") ; + var texts = jObject.GetValue("texts") ?? jObject.GetValue("Texts") ; if (culture == null || texts == null) { return null; From 2b3fd091fcc6025de3b2d27aea9ebb2eaa412d56 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 28 Sep 2020 10:44:03 +0300 Subject: [PATCH 068/143] module template migrations --- ...ojectNameHttpApiHostMigrationsDbContext.cs | 8 +- .../20200928072851_Initial.Designer.cs | 370 ++++++++++++++++++ .../Migrations/20200928072851_Initial.cs | 212 ++++++++++ ...ApiHostMigrationsDbContextModelSnapshot.cs | 368 +++++++++++++++++ ....cs => 20200928073707_Initial.Designer.cs} | 2 +- ...1_Initial.cs => 20200928073707_Initial.cs} | 0 6 files changed, 958 insertions(+), 2 deletions(-) create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20200928072851_Initial.Designer.cs create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20200928072851_Initial.cs create mode 100644 templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/MyProjectNameHttpApiHostMigrationsDbContextModelSnapshot.cs rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/{20200903062011_Initial.Designer.cs => 20200928073707_Initial.Designer.cs} (99%) rename templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/{20200903062011_Initial.cs => 20200928073707_Initial.cs} (100%) diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectNameHttpApiHostMigrationsDbContext.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectNameHttpApiHostMigrationsDbContext.cs index 64faa3f630..9156f1e3ac 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectNameHttpApiHostMigrationsDbContext.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/EntityFrameworkCore/MyProjectNameHttpApiHostMigrationsDbContext.cs @@ -1,5 +1,8 @@ using Microsoft.EntityFrameworkCore; +using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.SettingManagement.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.EntityFrameworkCore { @@ -8,7 +11,7 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore public MyProjectNameHttpApiHostMigrationsDbContext(DbContextOptions options) : base(options) { - + } protected override void OnModelCreating(ModelBuilder modelBuilder) @@ -16,6 +19,9 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore base.OnModelCreating(modelBuilder); modelBuilder.ConfigureMyProjectName(); + modelBuilder.ConfigureAuditLogging(); + modelBuilder.ConfigurePermissionManagement(); + modelBuilder.ConfigureSettingManagement(); } } } diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20200928072851_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20200928072851_Initial.Designer.cs new file mode 100644 index 0000000000..2ad2035056 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20200928072851_Initial.Designer.cs @@ -0,0 +1,370 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using MyCompanyName.MyProjectName.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +namespace MyCompanyName.MyProjectName.Migrations +{ + [DbContext(typeof(MyProjectNameHttpApiHostMigrationsDbContext))] + [Migration("20200928072851_Initial")] + partial class Initial + { + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("ProductVersion", "3.1.6") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasColumnType("nvarchar(96)") + .HasMaxLength(96); + + b.Property("BrowserInfo") + .HasColumnName("BrowserInfo") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("ClientId") + .HasColumnName("ClientId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientIpAddress") + .HasColumnName("ClientIpAddress") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientName") + .HasColumnName("ClientName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Comments") + .HasColumnName("Comments") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Exceptions") + .HasColumnName("Exceptions") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("HttpMethod") + .HasColumnName("HttpMethod") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("HttpStatusCode") + .HasColumnName("HttpStatusCode") + .HasColumnType("int"); + + b.Property("ImpersonatorTenantId") + .HasColumnName("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("ImpersonatorUserId") + .HasColumnName("ImpersonatorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasColumnName("Url") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("UserId") + .HasColumnName("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnName("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("MethodName") + .HasColumnName("MethodName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Parameters") + .HasColumnName("Parameters") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ServiceName") + .HasColumnName("ServiceName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChangeTime") + .HasColumnName("ChangeTime") + .HasColumnType("datetime2"); + + b.Property("ChangeType") + .HasColumnName("ChangeType") + .HasColumnType("tinyint"); + + b.Property("EntityId") + .IsRequired() + .HasColumnName("EntityId") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasColumnName("EntityTypeFullName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasColumnName("NewValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("OriginalValue") + .HasColumnName("OriginalValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("PropertyName") + .IsRequired() + .HasColumnName("PropertyName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasColumnName("PropertyTypeFullName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2048)") + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20200928072851_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20200928072851_Initial.cs new file mode 100644 index 0000000000..91345ac0a7 --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/20200928072851_Initial.cs @@ -0,0 +1,212 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +namespace MyCompanyName.MyProjectName.Migrations +{ + public partial class Initial : Migration + { + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpAuditLogs", + columns: table => new + { + Id = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true), + ConcurrencyStamp = table.Column(maxLength: 40, nullable: true), + ApplicationName = table.Column(maxLength: 96, nullable: true), + UserId = table.Column(nullable: true), + UserName = table.Column(maxLength: 256, nullable: true), + TenantId = table.Column(nullable: true), + TenantName = table.Column(nullable: true), + ImpersonatorUserId = table.Column(nullable: true), + ImpersonatorTenantId = table.Column(nullable: true), + ExecutionTime = table.Column(nullable: false), + ExecutionDuration = table.Column(nullable: false), + ClientIpAddress = table.Column(maxLength: 64, nullable: true), + ClientName = table.Column(maxLength: 128, nullable: true), + ClientId = table.Column(maxLength: 64, nullable: true), + CorrelationId = table.Column(maxLength: 64, nullable: true), + BrowserInfo = table.Column(maxLength: 512, nullable: true), + HttpMethod = table.Column(maxLength: 16, nullable: true), + Url = table.Column(maxLength: 256, nullable: true), + Exceptions = table.Column(maxLength: 4000, nullable: true), + Comments = table.Column(maxLength: 256, nullable: true), + HttpStatusCode = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogs", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpPermissionGrants", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + Name = table.Column(maxLength: 128, nullable: false), + ProviderName = table.Column(maxLength: 64, nullable: false), + ProviderKey = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpPermissionGrants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpSettings", + columns: table => new + { + Id = table.Column(nullable: false), + Name = table.Column(maxLength: 128, nullable: false), + Value = table.Column(maxLength: 2048, nullable: false), + ProviderName = table.Column(maxLength: 64, nullable: true), + ProviderKey = table.Column(maxLength: 64, nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpSettings", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpAuditLogActions", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + AuditLogId = table.Column(nullable: false), + ServiceName = table.Column(maxLength: 256, nullable: true), + MethodName = table.Column(maxLength: 128, nullable: true), + Parameters = table.Column(maxLength: 2000, nullable: true), + ExecutionTime = table.Column(nullable: false), + ExecutionDuration = table.Column(nullable: false), + ExtraProperties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAuditLogActions", x => x.Id); + table.ForeignKey( + name: "FK_AbpAuditLogActions_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityChanges", + columns: table => new + { + Id = table.Column(nullable: false), + AuditLogId = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + ChangeTime = table.Column(nullable: false), + ChangeType = table.Column(nullable: false), + EntityTenantId = table.Column(nullable: true), + EntityId = table.Column(maxLength: 128, nullable: false), + EntityTypeFullName = table.Column(maxLength: 128, nullable: false), + ExtraProperties = table.Column(nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityChanges_AbpAuditLogs_AuditLogId", + column: x => x.AuditLogId, + principalTable: "AbpAuditLogs", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpEntityPropertyChanges", + columns: table => new + { + Id = table.Column(nullable: false), + TenantId = table.Column(nullable: true), + EntityChangeId = table.Column(nullable: false), + NewValue = table.Column(maxLength: 512, nullable: true), + OriginalValue = table.Column(maxLength: 512, nullable: true), + PropertyName = table.Column(maxLength: 128, nullable: false), + PropertyTypeFullName = table.Column(maxLength: 64, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpEntityPropertyChanges", x => x.Id); + table.ForeignKey( + name: "FK_AbpEntityPropertyChanges_AbpEntityChanges_EntityChangeId", + column: x => x.EntityChangeId, + principalTable: "AbpEntityChanges", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_AuditLogId", + table: "AbpAuditLogActions", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogActions_TenantId_ServiceName_MethodName_ExecutionTime", + table: "AbpAuditLogActions", + columns: new[] { "TenantId", "ServiceName", "MethodName", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAuditLogs_TenantId_UserId_ExecutionTime", + table: "AbpAuditLogs", + columns: new[] { "TenantId", "UserId", "ExecutionTime" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_AuditLogId", + table: "AbpEntityChanges", + column: "AuditLogId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityChanges_TenantId_EntityTypeFullName_EntityId", + table: "AbpEntityChanges", + columns: new[] { "TenantId", "EntityTypeFullName", "EntityId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpEntityPropertyChanges_EntityChangeId", + table: "AbpEntityPropertyChanges", + column: "EntityChangeId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissionGrants_Name_ProviderName_ProviderKey", + table: "AbpPermissionGrants", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpSettings_Name_ProviderName_ProviderKey", + table: "AbpSettings", + columns: new[] { "Name", "ProviderName", "ProviderKey" }); + } + + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpAuditLogActions"); + + migrationBuilder.DropTable( + name: "AbpEntityPropertyChanges"); + + migrationBuilder.DropTable( + name: "AbpPermissionGrants"); + + migrationBuilder.DropTable( + name: "AbpSettings"); + + migrationBuilder.DropTable( + name: "AbpEntityChanges"); + + migrationBuilder.DropTable( + name: "AbpAuditLogs"); + } + } +} diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/MyProjectNameHttpApiHostMigrationsDbContextModelSnapshot.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/MyProjectNameHttpApiHostMigrationsDbContextModelSnapshot.cs new file mode 100644 index 0000000000..8a6bbe1a3c --- /dev/null +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.HttpApi.Host/Migrations/MyProjectNameHttpApiHostMigrationsDbContextModelSnapshot.cs @@ -0,0 +1,368 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using MyCompanyName.MyProjectName.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; + +namespace MyCompanyName.MyProjectName.Migrations +{ + [DbContext(typeof(MyProjectNameHttpApiHostMigrationsDbContext))] + partial class MyProjectNameHttpApiHostMigrationsDbContextModelSnapshot : ModelSnapshot + { + protected override void BuildModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("ProductVersion", "3.1.6") + .HasAnnotation("Relational:MaxIdentifierLength", 128) + .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasColumnName("ApplicationName") + .HasColumnType("nvarchar(96)") + .HasMaxLength(96); + + b.Property("BrowserInfo") + .HasColumnName("BrowserInfo") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("ClientId") + .HasColumnName("ClientId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientIpAddress") + .HasColumnName("ClientIpAddress") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ClientName") + .HasColumnName("ClientName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Comments") + .HasColumnName("Comments") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnName("ConcurrencyStamp") + .HasColumnType("nvarchar(40)") + .HasMaxLength(40); + + b.Property("CorrelationId") + .HasColumnName("CorrelationId") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Exceptions") + .HasColumnName("Exceptions") + .HasColumnType("nvarchar(4000)") + .HasMaxLength(4000); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("HttpMethod") + .HasColumnName("HttpMethod") + .HasColumnType("nvarchar(16)") + .HasMaxLength(16); + + b.Property("HttpStatusCode") + .HasColumnName("HttpStatusCode") + .HasColumnType("int"); + + b.Property("ImpersonatorTenantId") + .HasColumnName("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("ImpersonatorUserId") + .HasColumnName("ImpersonatorUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantName") + .HasColumnType("nvarchar(max)"); + + b.Property("Url") + .HasColumnName("Url") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("UserId") + .HasColumnName("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasColumnName("UserName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExecutionDuration") + .HasColumnName("ExecutionDuration") + .HasColumnType("int"); + + b.Property("ExecutionTime") + .HasColumnName("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("MethodName") + .HasColumnName("MethodName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("Parameters") + .HasColumnName("Parameters") + .HasColumnType("nvarchar(2000)") + .HasMaxLength(2000); + + b.Property("ServiceName") + .HasColumnName("ServiceName") + .HasColumnType("nvarchar(256)") + .HasMaxLength(256); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnName("AuditLogId") + .HasColumnType("uniqueidentifier"); + + b.Property("ChangeTime") + .HasColumnName("ChangeTime") + .HasColumnType("datetime2"); + + b.Property("ChangeType") + .HasColumnName("ChangeType") + .HasColumnType("tinyint"); + + b.Property("EntityId") + .IsRequired() + .HasColumnName("EntityId") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasColumnName("EntityTypeFullName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ExtraProperties") + .HasColumnName("ExtraProperties") + .HasColumnType("nvarchar(max)"); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasColumnName("NewValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("OriginalValue") + .HasColumnName("OriginalValue") + .HasColumnType("nvarchar(512)") + .HasMaxLength(512); + + b.Property("PropertyName") + .IsRequired() + .HasColumnName("PropertyName") + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasColumnName("PropertyTypeFullName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .IsRequired() + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("TenantId") + .HasColumnName("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpPermissionGrants"); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(128)") + .HasMaxLength(128); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("ProviderName") + .HasColumnType("nvarchar(64)") + .HasMaxLength(64); + + b.Property("Value") + .IsRequired() + .HasColumnType("nvarchar(2048)") + .HasMaxLength(2048); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey"); + + b.ToTable("AbpSettings"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200903062011_Initial.Designer.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200928073707_Initial.Designer.cs similarity index 99% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200903062011_Initial.Designer.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200928073707_Initial.Designer.cs index 4b78f88590..4fd40e137e 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200903062011_Initial.Designer.cs +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200928073707_Initial.Designer.cs @@ -11,7 +11,7 @@ using Volo.Abp.EntityFrameworkCore; namespace MyCompanyName.MyProjectName.Migrations { [DbContext(typeof(IdentityServerHostMigrationsDbContext))] - [Migration("20200903062011_Initial")] + [Migration("20200928073707_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200903062011_Initial.cs b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200928073707_Initial.cs similarity index 100% rename from templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200903062011_Initial.cs rename to templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/Migrations/20200928073707_Initial.cs From 4f99b1ca3f4cc115bbe217a285822324db67061f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 28 Sep 2020 11:10:21 +0300 Subject: [PATCH 069/143] Add Name, SurName and other standard claims to the Blazor UI principal accessor. --- .../WebAssemblyCurrentPrincipalAccessor.cs | 29 +++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentPrincipalAccessor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentPrincipalAccessor.cs index 3c252ebe5e..da1d3b3533 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentPrincipalAccessor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/WebAssemblyCurrentPrincipalAccessor.cs @@ -23,6 +23,11 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly var claims = new List(); + if (configuration.CurrentUser.Id != null) + { + claims.Add(new Claim(AbpClaimTypes.UserId,configuration.CurrentUser.Id.ToString())); + } + if (!configuration.CurrentUser.UserName.IsNullOrWhiteSpace()) { claims.Add(new Claim(AbpClaimTypes.UserName,configuration.CurrentUser.UserName)); @@ -33,9 +38,29 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly claims.Add(new Claim(AbpClaimTypes.Email,configuration.CurrentUser.Email)); } - if (configuration.CurrentUser.Id != null) + if (configuration.CurrentUser.EmailVerified) { - claims.Add(new Claim(AbpClaimTypes.UserId,configuration.CurrentUser.Id.ToString())); + claims.Add(new Claim(AbpClaimTypes.EmailVerified,"true")); + } + + if (!configuration.CurrentUser.Name.IsNullOrWhiteSpace()) + { + claims.Add(new Claim(AbpClaimTypes.Name,configuration.CurrentUser.Name)); + } + + if (!configuration.CurrentUser.PhoneNumber.IsNullOrEmpty()) + { + claims.Add(new Claim(AbpClaimTypes.PhoneNumber,configuration.CurrentUser.PhoneNumber)); + } + + if (configuration.CurrentUser.PhoneNumberVerified) + { + claims.Add(new Claim(AbpClaimTypes.PhoneNumberVerified,"true")); + } + + if (!configuration.CurrentUser.SurName.IsNullOrWhiteSpace()) + { + claims.Add(new Claim(AbpClaimTypes.SurName,configuration.CurrentUser.SurName)); } if (configuration.CurrentUser.TenantId != null) From b2fa364cf8ba7011bad77f1f328c7c61f1c652e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Mon, 28 Sep 2020 11:10:34 +0300 Subject: [PATCH 070/143] Add "ManageYourAccount" localization --- framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json | 3 ++- framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json index e0cdee07af..be63781aaa 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/en.json @@ -64,6 +64,7 @@ "GoBack": "Go back", "Search": "Search", "ItemWillBeDeletedMessageWithFormat": "{0} will be deleted!", - "ItemWillBeDeletedMessage": "This item will be deleted!" + "ItemWillBeDeletedMessage": "This item will be deleted!", + "ManageYourAccount": "Manage your account" } } diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json index db803e01e2..087e96a021 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/tr.json @@ -64,6 +64,7 @@ "GoBack": "Geri dön", "Search": "Arama", "ItemWillBeDeletedMessageWithFormat": "{0} silinecektir!", - "ItemWillBeDeletedMessage": "Bu nesne silinecektir!" + "ItemWillBeDeletedMessage": "Bu nesne silinecektir!", + "ManageYourAccount": "Hesap yönetimi" } } From b450dcf4d5690f1232c8459b8bd17603e0479ae5 Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Mon, 28 Sep 2020 22:34:39 +0300 Subject: [PATCH 071/143] docs: first draft of devextreme angular blogpost --- ...ngularComponents-With-The-ABP-Framework.md | 337 ++++++++++++++++++ .../dev-extreme-page.png | Bin 0 -> 17720 bytes .../devextreme-final.gif | Bin 0 -> 847754 bytes .../devextreme-first.png | Bin 0 -> 27261 bytes .../devextreme-second.png | Bin 0 -> 22074 bytes .../localhost-running.png | Bin 0 -> 51085 bytes .../login-screen.png | Bin 0 -> 35251 bytes .../project-setup.png | Bin 0 -> 38374 bytes .../users-on-dev-extreme.png | Bin 0 -> 4413 bytes .../users.png | Bin 0 -> 43017 bytes 10 files changed, 337 insertions(+) create mode 100644 docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md create mode 100644 docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/dev-extreme-page.png create mode 100644 docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/devextreme-final.gif create mode 100644 docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/devextreme-first.png create mode 100644 docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/devextreme-second.png create mode 100644 docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/localhost-running.png create mode 100644 docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/login-screen.png create mode 100644 docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/project-setup.png create mode 100644 docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/users-on-dev-extreme.png create mode 100644 docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/users.png diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md new file mode 100644 index 0000000000..3a1b075d46 --- /dev/null +++ b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md @@ -0,0 +1,337 @@ +## Using DevExtreme Angular Components With the ABP Framework + +Hello, this is a follow up on the article [Using DevExtreme Components With the ABP Framework](https://community.abp.io/articles/using-devextreme-components-with-the-abp-framework-zb8z7yqv) + +We will create the same application using Angular as the UI framework and integrate [DevExpress Angular components](https://js.devexpress.com/Documentation/Guide/Angular_Components/DevExtreme_Angular_Components/). + +## Create the Project + +Let's create an application using [ABP CLI](https://docs.abp.io/en/abp/latest/CLI#new) + +```bash +abp new DevExtremeAngular -u angular +``` + +After the project is created, you should run following projects in order + +![A screenshot showing DevExtremeAngular.DbMigrator and DevExtremeAngular.HttpApi.Host](project-setup.png) + +Firstly, run `DevExtremeAngular.DbMigrator` for db migration and then run `DevExtremeAngular.HttpApi.Host` for backend APIs. + +After the backend is ready, navigate to `angular` folder and run `yarn` or `npm install` based on which package you are using. + +After installation process is done, you can start your angular project by running `yarn start` or `npm start` + +Everything should run smoothly and when you go to http://localhost:4200 in the browser, you should see your application up and running. + +![A screenshot showing localhost is running](localhost-running.png) + +You can login to the application by using following credentials + +> _Default admin username is **admin** and password is **1q2w3E\***_ + +![A screenshot showing login page](login-screen.png) + +After successful login, you should be redirected to home page. + +## Create a lazy Angular Module for DevExtreme Demo + +Let's create a module which will be loaded lazily. + +Open up a terminal and navigate to `angular` to run following commands. Following commands require `angular-cli` being installed globally. +If you do not have `angular-cli` installed or you do not want to install it, you can run the same commands by adding `npx` to the beginning. +E.g. `npx ng g m dev-extreme --routing` + +```bash +ng g m dev-extreme --routing +``` + +Following files should be created. + +```bash +CREATE src/app/dev-extreme/dev-extreme-routing.module.ts (253 bytes) +CREATE src/app/dev-extreme/dev-extreme.module.ts (297 bytes) +``` + +Let's create a component for `DevExtremeModule` by running following command + +```bash +ng g c dev-extreme +``` + +Following files should be created. + +```bash +CREATE src/app/dev-extreme/dev-extreme.component.scss (0 bytes) +CREATE src/app/dev-extreme/dev-extreme.component.html (26 bytes) +CREATE src/app/dev-extreme/dev-extreme.component.spec.ts (657 bytes) +CREATE src/app/dev-extreme/dev-extreme.component.ts (295 bytes) +UPDATE src/app/dev-extreme/dev-extreme.module.ts (379 bytes) +``` + +We should edit `dev-extreme-routing.module.ts` to load newly created `DevExtremeComponent` when `DevExtremeModule` is loaded. + +Open `dev-extreme-routing.module.ts` and import `DevExtremeComponent` change `routes` array to the following + +```typescript +// ... +import { DevExtremeComponent } from './dev-extreme.component'; + +const routes: Routes = [{ + path: '', + component: DevExtremeComponent +}]; + +// ... +``` + +We should also edit `app-routing.module.ts` to be able to load `DevExtremeModule` and `route.provider.ts` to show a link to this module. + +Open `app-routing.module.ts` and add following object to `routes` array + +```typescript +const routes: Routes = [ + // ... + { + path: 'dev-extreme', + loadChildren: () => import('./dev-extreme/dev-extreme.module').then((m) => m.DevExtremeModule), + }, + // ... +]; +``` + +The last step to be able to see our newly created module in the browser, open `route.provider.ts` and edit the array being added into the routes. + +```typescript + // ... + routes.add([ + { + path: '/', + name: '::Menu:Home', + iconClass: 'fas fa-home', + order: 1, + layout: eLayoutType.application, + }, + { + path: '/dev-extreme', + name: 'Dev Extreme', + order: 2, + layout: eLayoutType.application, + }, + ]); + // ... +``` + +After completing the steps above, you should be able to see `Dev Extreme` on the header and when you click on it, you should be redirected to `/dev-extreme` page and see the following message on the screen. + +![A screenshot showing a page that says dev-extreme works!](dev-extreme-page.png) + +## Display users on the dev-extreme page + +For this demo, we will list users on the screen. We already have `admin` as user. Let's add couple of more to the list in `Administration -> Identity Management -> Users` page. + +![A screenshot showing users page after adding couple of users](users.png) + +Firstly, let's create a service for our component. + +Navigate to the `dev-extreme` folder and run following command + +```bash +ng g s dev-extreme +``` + +Following files should be created + +```bash +CREATE src/app/dev-extreme/dev-extreme.service.spec.ts (378 bytes) +CREATE src/app/dev-extreme/dev-extreme.service.ts (139 bytes) +``` + +Let's import and inject `IdentityService` as dependency in `dev-extreme.service.ts`. After then, let's create a stream called `users$` to retrieve the users. + +`identityService.getUsers` returns `ABP.PagedResponse` which contains two fields, `items` and `totalCount`. We are only interested in `items` for now. + +When we apply the steps described above, the final version of `dev-extreme.service` should be as follows + +```typescript +import { Injectable } from '@angular/core'; +import { map } from 'rxjs/operators'; +import { IdentityService } from '@abp/ng.identity'; + +@Injectable({ + providedIn: 'root', +}) +export class DevExtremeService { + users$ = this.service.getUsers().pipe(map((result) => result.items)); + + constructor(private service: IdentityService) {} +} +``` + +Now we can simply inject `DevExtremeService` as public and utilize `users$` stream in `dev-extreme.component.ts` as follows. + +```typescript +import { Component } from '@angular/core'; +import { DevExtremeService } from './dev-extreme.service'; + +@Component({ + selector: 'app-dev-extreme', + templateUrl: './dev-extreme.component.html', + styleUrls: ['./dev-extreme.component.scss'], +}) +export class DevExtremeComponent { + constructor(public service: DevExtremeService) {} +} +``` + +And use it within `dev-extreme.component.html` as follows + +```html + +
      +
    • + {{ user.name }} +
    • +
    +
    +``` + +This should list names of the users on the screen + +![A screenshot showing list users on the dev extreme page](users-on-dev-extreme.png) + +## Install DevExtreme + +We've added new users and listed them on the `/dev-extreme`. Now, it is time to integrate **DevExtreme** components into our application. + +You can follow [the guide](https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started/Add_DevExtreme_to_an_Angular_CLI_Application/) provided by **DevExtreme** team or apply the following steps. + +* `npm install devextreme devextreme-angular` or `yarn add devextreme devextreme-angular` +* Import following two styles in `angular.json` + +```javascript + // ... + "styles": [ + // ... + "src/styles.scss", + "node_modules/devextreme/dist/css/dx.common.css", + "node_modules/devextreme/dist/css/dx.light.css" + ] +``` + +* Add `dx-viewport` to classes of `body` in `index.html` + +```html + + +
    +
    + +``` + +After completing these steps, you need to restart the angular application. + +## Use DxDataGrid to list the users + +You can take a look at [demo](https://js.devexpress.com/Demos/WidgetsGallery/Demo/DataGrid/ColumnCustomization/Angular/Light/) provided by **DevExtreme** team or apply the following steps. + +At this point, our application is ready to use `dx-data-grid` in `dev-extreme.component.ts` + +Firstly, we need to import `DxDataGridModule` in our module as follows. + +```typescript +// ... + +import { DxDataGridModule } from 'devextreme-angular'; + +@NgModule({ + // ... + imports: [ + // ... + DxDataGridModule + ], +}) +export class DevExtremeModule {} +``` + +At this point `dx-data-grid` is avaliable within our module and we can use it in our template. + +Change `dev-extreme.component.html` to the following + +```html + + + +``` + +It should display a table on the screen + +![A screenshot displaying dev extreme data grid with lots of columns](devextreme-first.png) + +Since, we did not specify any columns, `dx-data-grid` displayed every column avaliable. Let's pick some columns to make it more readable. + +Change `dev-extreme.component.html` to the following + +```html + + + + + + + + + +``` + +which will display following table on the screen + +![A screenshot displaying dev extreme data grid with these columns: username, name, surname, email and phone number](devextreme-second.png) + +We can also utilize `abpLocalization` pipe to translate the headers of the table. To use `abpLocalization` pipe in our templates, we need to import `CoreModule` from `@abp/ng.core` into our module. + +```typescript +import { CoreModule } from '@abp/ng.core'; + +@NgModule({ + // ... + imports: [ + // ... + CoreModule + ], +}) +export class DevExtremeModule {} +``` + +And change the template to the following + +```html + + + + + + + + + +``` + +The headers should change when a new language is selected + +![A gif showing the headers of the table getting translated into the chosen language](devextreme-final.gif) \ No newline at end of file diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/dev-extreme-page.png b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/dev-extreme-page.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1b54eb3eb5f9731e603b860953a6746d6a5a94 GIT binary patch literal 17720 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

    +Ml>1Ojw?9R4Uc*97VEDDOz=;5H+ zea_#Q{#bIn_0jM5zBWpf23S#9D+UY3=`g#zIBIso0XCD=`@4E z`48RFStrX1M+@a>X1j>i*5OI?95b1n+0~xzodBh+LxQoyDJ%zXOxupR(gkc0wb8xk zQpKW*lnErIH4(=+AxGCHJ$?5T;Hk@q?(^O8O-FHrA}q&JNK~WMZY*%QcLAf`AEP5W zyVWn1nEHd&k&&^S8NzPMWGwacqf~EgdTS1B5hGdrK40tWE7HuE<9RY3JRbIt86LDP zH!KE9BwXSss#*C82x+rF{{ysks? zY2&on0)E6>sgUujD1z|Fy@Js-`z{|L-XDOTi{i(J++~>doZ3KX_SWF&Pb9s;-rq9Y zfisL5R}qWJL}Hl+!7mGWdG1QHUX?RKzBQ<2xh@bC6TI&~tz0)7YUwoSfy`RsuoXJ3Z^|Mj_-gGa;HcdtOmON< zc-sC3lVRl)PgqT=#<%H3Xb`XkWKwEJqnh6yKt{XqkG0pF`qu3W95R68bB9)S52`+v zC;sC)6L$M`VDA!em=XnwN||44GHworYY2OR=Pp;G*_?AMKWSLiyQcfmjNpUckLh9a^YJ29P5J^gipIwEk zE;78=AD^7T{bJ?h7Y;FQ5=<}GGFE5#mA24}V_4g0tVX3k(P^K)w!`E2$zz%a?dl^n z(d1G52E#X6P|B1M<+9Cb*B$_zBse8Z*)wXqj8bRDw|F*6i;+64E6vWg8uLeDL&fz5 zrA7~vs;(1t@U^qjZm!xUbVTT=mmZqR7U>H+p~Ysmas}@l22^aRp?QqMMcpD{4GwD@ zRXUDb&1Akc=Q*j>y2D@nd0HPIVUMGANBfjJlsaEW=sFNZ z{S*+bQ%RH$?}rOX*hH1KZI5kW_n?3?VHvS}sfm-JpaD%FR^5r?U=x46_1YMQD-s?k zgtBvs)ADwXVTz)uSyN6Jo*Yexk0$$>(l&JOFEb7v-1xVGjAnf)p@&Z!+RhgP zZuEKjS*E|X17OfnxgH%5HoOxhx!bG6!(>BY_(JE<30^ZXN>y=o5w)+0adAcmv`f(~BqPp;&7Bz`6^X>6_V z`l9Q9j@3u^tF98fDf%}gEgs~IDH-MHq`B7QqcGg=Z!a_31P>l*BMaA(*Cw6ad+oio zPiFLH0vgVAH(5QRBvDXiIIz8E_%~?hjJ1OP~Ky zwQw?>T{3fMV){{cHf5jmFKA~7HfY;9&r*FYR#R}`hy-4U@2*KEpjpN*chDQfV%;Zq z-T)s1i1!SzryvKdI!UGgX=H&g3hIh@&p?7qyRE=mv0&_*Fp0P7>LOA|4IM@AL;6q9 zXvlYnpJT-;wFNNHmZj0IoGhmAo^oy6tyxm27oxr+cs9z(A5S5k?mbkHo0igOpI?y< zU;0?qoS7p33k~=WOrS3WSSE;e#6}bxhd~pzf;eFfL=hmAmT51V*$?Q(8&;BY`~e^$ zDu9<(38ylrkbdDBF}@P`&(;7DtMf8^>{snannSprAjOLN$_@3}b zI-%bNDGt(R1|SS0ciPVG(ybS@qbnM?-6L(-`w||OiO>SY5x|$0)XII zPD#e_8)QV*g(jxIi1w@ee?VX{f>iI`#e#kR2gV$)%GC53t7}{|tH-_=zmP zE88Pr2Dc*kry79pO)=k*jGwJLmW=-c1N={*v;ZNB_$PioLu#n$55`)5S4d!re>hMl zyPevXH2OKq zAG_Dq|3NqcV4%PWWN=Jzh#?65bcfyKW`!)d#rXFG*>F>ej1 z69HNurOO!r<|47i?GHML>;e5kF_Muh7CmC&wH|ZI?c9ftiZTlUTb#8&iAhVf21EO3 z723Akm<4F_TJeD7R~%I?B26fryCI>d{iDkJcKPH0LcUZfii&w#-wt;o$0YyVcLK#x;CG3~H6Qwhyo)wY=^nT8pxAPM2HjdGonW z##?zdI>DJhc;nHW4XMqIj}|1-qq;lKecMtn86YSMmzR7r@!fiUvtq7I#lnrzLssMM z88*&l?d8LCwvw7)n!-egLT-QYFOXor?|kvuS%^u&QVDEM*cWS1_P0kW4zjZ-@9kd? z=@x9(9Op*WxV2MyRFR({PqEoO11uK0g@UCs#G>(zC0A-)DkZe4^s*&Znk@>CHGf(c zfnTX#&RM5HNojj%&tON-I#<8hzd+O?s9G(%#Ge;PJK+;oElb2xR%>B%{9W|GlpYG? z?U9W8H3G^kcsz0}W&pz^@5(BrvpdiFOu4B11gp)IsQ2Tpn%PWC!fcVM%s?ao!z9mh zx&m@Mor>h$$r1_B<>$hEwlcgfaRr3z?~SDZrg=Gj8o3@F;xmh4V5^j>{*cAv8nTf} zl3a1d+j+P|Q_PnnlZa!Fym7l#;VirKB?Mo47htypP~vgd#l<2e#gxpIBs3>|GnBUy76 z^DT&hbF%&rOmFp$8PUIQC;VqXUVtHu7>2~<@)Q>JVOKrk(bVer#4WnjA5Ot=816k| zLT7Z^a$BL~!{r&D&gUSiN~=T6`Ncl@hFAo4l&1ZiqO+7tI)OSN-?2DWbojzE+I0Nw z_4y8n-(J~0eY0s9fwB1@nZ2I)MxHB*kR*D0oMt(m#!EkEKA(80>qX}E)lDM^9-DNR zS~Zbl{h)GQWL5c)xj#OGTaCWkXF6|KTJySKJnze6jdh{V^&NYfV<~J(VVE=ql4gLWYM!;a<_Ihn)u)cPl4JDD(+2Ld5`)6Y z<5#2QIs)UJi)_V8Yn|HT1(EQv=3u1PKFda%g?UeY*(^jAY$6m@ZWz>ogN5nzG=l#e z8sK0dQ$iTr(78W1SOqC1$>K#CK;eX;X7AYd6z5_qu73 zl6U7%xg+cgQ>az+G#vEaL5DL*TE}#d&HHD5z8R7el<72BBk^WQ{EB{gyecs`R9LEU z3zu*wbodB#w&t$V0ntm-URvYMKvOf?@Hm&qTKF1AWBykX^5hZ5<}lw`R;k(Py{e^N-T+#%iWHSX zPSef7TZ9F_Dk_;IWhmPjBG9?{w+DfE7e5$N3E)wx+=6ha*3_j`CWP8F9qgWB$PnR8 z6=LyKK0ev&_UKb!pJyc8Ot}_j3a>?!a;d5cv+>BcJCZX5bXZw4KvlNF+2SHsWGbuE z8T&B|8ijp+y~Tp2Xyl{x-RU~T`|*s}#{5ono^&Q4!D@1?bL=UvvQvR0&qn*u*|_qo zaU?^zDxvEha|$BUQTy!ygg-1%FGMzM#{DX_6#z-Qezbc-+Z3`z{uF7Y z@rHxZ&GXf<+%DF`v1H*9_?N|6T~jjomA@1oFBUIe8%%RCi4FqF;o9OU>2pNb>EFC(nc4w=@)s!f;JWH_5Ab zDxSEPwYx^V39zY-lDX26kpvntv#q`XFeun+Y_^i&!d@}SX8T>~JNsRsqz_m7alOGp z+lZW_oF$-nLOt4h>4$6cn_+C^o8!)Cq0RvOaFR314f>cc~xs zmmSegu+H4QfL`!0Y(C4PM&cCFzfF(7Z4eRkU0SJ!^K*`odZd8&v~Qbi3ZGYy!%WkD znQo`7^?Ea%{MLr<`aPTP6;Jg%|L32F+mVrqrab|bW0y|&<-4k~t~ep<;7bioX{9f$ zW{RUZ{Zd95Ei{4~vbUa-nE3|%S67=Ge#}1IU@3b=rY}{5ou-qS?2ocyU9`xz_1Z&wS13cIpr>6}8}siL2!rLEq+LoS|P_JlL< z@4H#EdF5DO=0bm)X=qQu#!<>@oOgmyZb;<*3=$T)GkhK=Ck8wU@8mK}=*1f;7l@AJ zax%vu`_fpLnaD5@nUrNRo_NNEw%~xhvp4~Ad**SDV?6kLju4|tmztK$9U|qhwIiXV zx#|C59Ce=l8&m-;lHAjccRvJ`_fd+e@!koiKh+8jt2Mz>iSeao$oRa=NgkrBTC9C)^p&xF;agzj$=T<-nlH<>c4ANw}>Bp${mU zG?ukf`*WMgm0a3e9IM6DbbL5gO;9wh@fMm&$tP^g13>e&Vu>{8wa?{rKJ;Wa{2%6U z0Wj=Z4sxQd)jdOm5}fyZHR*H=EP^9{Hj^9ijMTQ)<5{4SDpo=_QcW!rX?%8Z(Qhe@ z+=q8+clvu>ok4+P0!q zuIBnAuD(p}lSNbW63SokD7HqmWq14O>-+l-+SWfEVPNv2`Q{{F(i&f0W zcRnpq*+zM^?{O_IbE;JoFQkIH?-t^VRb#tghUm`cfBIInGoH3!0;l6%w_-R0q4c%U zJJ<8A|1*_ROT6dB8_40zepIQp_V)=q?v&zb1wwx+5<0Wkyjb}{;le+z@r9)c*XAr1 z&PCHtv-X?3UxT#U92GVicBCeB+bAzpr1Vw;Ja;2UIxH3{uxN<5Nias5a#@r&`TeNT zf5z04OsYB)~T4a!NNvS)AH98BMK2nahC_P#b?Vdl{ zP<=V*y;ZT|MOpC3wK3(uBSL*ffC9hOW{Xz`=z4k7Qutiy;^jw!=QbLez)< zvn&t56S62d9)QH3rXS!nur%P7rTY1)%K4AlMY<6Or1M?cQv7Y-^4BfmKI`B2z|W3* zm;ZUI_#bzR|Ml%F2c$pr^=ACJcH~yzC3CdaN+b)hKR1sLNZ&?7a*6#{jsG4IIQe~p z{iK7h4DZj)`+u+V_wkz}z}G!+{(cw0pW5>O8$tX(>--DB1N`JeA#eh{y_8 Je9`m&KLCXqnS}rV literal 0 HcmV?d00001 diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/devextreme-final.gif b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/devextreme-final.gif new file mode 100644 index 0000000000000000000000000000000000000000..5a39c443f0b87b2c7c3c10453244b59b6f677d72 GIT binary patch literal 847754 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%0D}t^eBkg4`4hm$`vop614x~< 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

    BQb#qUn)DNOdgRo6oqjy7!3~c4B`a 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

    ud#6>y9e& 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%0A!kn%Gql`XESV(fz_<`H0)G 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

    Cwxb19(cmua7$MIyl4$=?@s=#k2y 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

    N?) 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 literal 0 HcmV?d00001 diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/login-screen.png b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/login-screen.png new file mode 100644 index 0000000000000000000000000000000000000000..76aeec25997b9ead1830211b97bb1f835e087028 GIT binary patch literal 35251 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 U2rpI$0sNB`l@loy(*O3q0nR{4kpKVy literal 0 HcmV?d00001 diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/project-setup.png b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/project-setup.png new file mode 100644 index 0000000000000000000000000000000000000000..b613d45378215396963e6468760ce6d3850ff3df GIT binary patch literal 38374 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�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.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 literal 0 HcmV?d00001 diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/users-on-dev-extreme.png b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/users-on-dev-extreme.png new file mode 100644 index 0000000000000000000000000000000000000000..4ff9289a686668963fb9953ac7b21ee672dd606f GIT binary patch literal 4413 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 ZX$SGig}vb|kzc>mC{2B2(Pebde*vY(>I47) literal 0 HcmV?d00001 diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/users.png b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/users.png new file mode 100644 index 0000000000000000000000000000000000000000..87d86a0300065e7a9a8e2276ac451688e8ba1af8 GIT binary patch literal 43017 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 literal 0 HcmV?d00001 From 9e23d591660dddf0a84086c97dea399057e8a181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 29 Sep 2020 11:44:30 +0300 Subject: [PATCH 072/143] Create feature.md --- .github/ISSUE_TEMPLATES/feature.md | 1 + 1 file changed, 1 insertion(+) create mode 100644 .github/ISSUE_TEMPLATES/feature.md diff --git a/.github/ISSUE_TEMPLATES/feature.md b/.github/ISSUE_TEMPLATES/feature.md new file mode 100644 index 0000000000..3cc5678c46 --- /dev/null +++ b/.github/ISSUE_TEMPLATES/feature.md @@ -0,0 +1 @@ +Please describe the feature need! \ No newline at end of file From 16f8a91fcbc576f0acaa9f36d1fc4c367d42c961 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 29 Sep 2020 11:56:45 +0300 Subject: [PATCH 073/143] Revise the home page of the startup template. --- .../Pages/Index.cshtml | 45 +++++++++---------- 1 file changed, 22 insertions(+), 23 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml index d01781f24b..bab10a24b0 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml @@ -18,9 +18,9 @@

    @@ -72,13 +72,13 @@
    Github
    -

    Do you love Abp.io?

    +

    Do you love the ABP Framework? Please give a star to support it!

    Star Issue Fork

    - Feature Requests + Request a feature
    @@ -93,16 +93,15 @@
    -
    -

    Meet the Abp Commercial

    -

    A Complete Web Application Platform Built-on Abp Framework

    +

    Meet the ABP Commercial

    +

    A Complete Web Application Platform Built on the ABP Framework

    - ABP Commercial is a platform based on the open source ABP framework. It provides pre-built application modules, + ABP Commercial is a platform based on the open source ABP framework. It provides pre-built application modules, rapid application development tooling, professional UI themes, premium support and more.

    @@ -124,13 +123,13 @@
    -
    +
    Developer
    Tools Details
    -
    +
    @@ -142,28 +141,28 @@
    - Additional Services - Details + Premium Support + Details
    - Premium Support - Details + Additional Services + Details
    -
    +

    8E~x&n1cdnQ<0UZEI(Ac=rTl# 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 ZE^b5XI2-O;34OhgvVyvNzO13o{{Vo9CFB4A literal 0 HcmV?d00001 diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/devextreme-second.png b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/devextreme-second.png new file mode 100644 index 0000000000000000000000000000000000000000..24d147d57cb45a7c1f75cda8dcecc1a3dfe3bffb GIT binary patch literal 22074 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%0DCnp!m7pO71%0`J_28-jj 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

    - \ No newline at end of file + From 2ce7371941af30761b1cafa8c088011a535657bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 29 Sep 2020 12:05:17 +0300 Subject: [PATCH 074/143] Copy the index.cshtml to the web.host --- .../MyProjectNameBrandingProvider.cs | 11 ++ .../Pages/Index.cshtml | 157 +++++++++++++++++- .../Pages/Index.cshtml | 2 +- 3 files changed, 160 insertions(+), 10 deletions(-) create mode 100644 templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameBrandingProvider.cs diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameBrandingProvider.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameBrandingProvider.cs new file mode 100644 index 0000000000..aba2d3920e --- /dev/null +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/MyProjectNameBrandingProvider.cs @@ -0,0 +1,11 @@ +using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Components; +using Volo.Abp.DependencyInjection; + +namespace MyCompanyName.MyProjectName +{ + [Dependency(ReplaceServices = true)] + public class MyProjectNameBrandingProvider : DefaultBrandingProvider + { + public override string AppName => "MyProjectName"; + } +} diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml index 65417cf55e..408c0f8849 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml @@ -15,15 +15,154 @@ } - - @L["Welcome"] - -

    @L["LongWelcomeMessage"]

    +
    +
    + +

    Welcome to the Application

    + +

    @L["LongWelcomeMessage"]

    + + abp.io @if (!CurrentUser.IsAuthenticated) { - @L["Login"] + @L["Login"] } -
    -

    abp.io

    - - + +
    +
    +

    Let's improve your application!

    +

    Here are some links to help you get started:

    +
    +
    +
    +
    +
    +
    +
    Learn the ABP Framework
    +

    Explore the compherensive documentation to learn how to build a modern web application.

    + See Documents +
    +
    +
    +
    +
    Samples
    +

    See the example projects built with the ABP Framework.

    + All samples +
    +
    +
    +
    +
    ABP Community
    +

    Get involved with a vibrant community and become a contributor.

    + Community + Contribute +
    +
    +
    +
    +
    +
    +
    ABP Blog
    +

    Take a look at our recently published articles.

    + See Blog +
    +
    +
    +
    +
    Github
    +

    Do you love the ABP Framework? Please give a star to support it!

    +

    + Star + Issue + Fork +

    + Request a feature + +
    +
    +
    +
    +
    Stackoverflow
    +

    See answers to previously asked questions or ask a new one.

    + Questions + Ask a Question +
    +
    +
    +
    +
    + +
    +

    Meet the ABP Commercial

    +

    A Complete Web Application Platform Built on the ABP Framework

    +
    + +
    +
    +

    + ABP Commercial is a platform based on the open source ABP framework. It provides pre-built application modules, + rapid application development tooling, professional UI themes, premium support and more. +

    + +
    +
    +
    +
    + Startup Templates + Details +
    +
    +
    +
    +
    +
    + Application Modules + Details +
    +
    +
    +
    +
    +
    + Developer
    Tools + Details +
    +
    +
    +
    +
    +
    + UI
    Themes + Details +
    +
    +
    +
    +
    +
    + Premium Support + Details +
    +
    +
    +
    +
    +
    + Additional Services + Details +
    +
    +
    +
    +
    +
    + +
    diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml index bab10a24b0..477b6627af 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml @@ -79,6 +79,7 @@ Fork

    Request a feature +
    @@ -165,4 +166,3 @@

    - From 3a80851e4e55d51fcd79bbae19c42a7517024509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 29 Sep 2020 12:07:55 +0300 Subject: [PATCH 075/143] Add ref --- .../Pages/Index.cshtml | 21 +++++++++---------- .../Pages/Index.cshtml | 21 +++++++++---------- 2 files changed, 20 insertions(+), 22 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml index 408c0f8849..1019cb311e 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml @@ -24,7 +24,6 @@

    @L["LongWelcomeMessage"]

    - abp.io @if (!CurrentUser.IsAuthenticated) { @L["Login"] @@ -42,14 +41,14 @@
    Learn the ABP Framework

    Explore the compherensive documentation to learn how to build a modern web application.

    - See Documents + See Documents
    Samples

    See the example projects built with the ABP Framework.

    - All samples + All samples
    @@ -57,7 +56,7 @@
    ABP Community

    Get involved with a vibrant community and become a contributor.

    Community - Contribute + Contribute
    @@ -66,7 +65,7 @@
    ABP Blog

    Take a look at our recently published articles.

    - See Blog + See Blog
    @@ -111,7 +110,7 @@
    Startup Templates - Details + Details
    @@ -119,7 +118,7 @@
    Application Modules - Details + Details
    @@ -127,7 +126,7 @@
    Developer
    Tools - Details + Details
    @@ -135,7 +134,7 @@
    UI
    Themes - Details + Details
    @@ -143,7 +142,7 @@
    Premium Support - Details + Details
    @@ -151,7 +150,7 @@
    Additional Services - Details + Details
    diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml index 477b6627af..ef9d266639 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml @@ -24,7 +24,6 @@

    @L["LongWelcomeMessage"]

    - abp.io @if (!CurrentUser.IsAuthenticated) { @L["Login"] @@ -42,14 +41,14 @@
    Learn the ABP Framework

    Explore the compherensive documentation to learn how to build a modern web application.

    - See Documents + See Documents
    Samples

    See the example projects built with the ABP Framework.

    - All samples + All samples
    @@ -57,7 +56,7 @@
    ABP Community

    Get involved with a vibrant community and become a contributor.

    Community - Contribute + Contribute
    @@ -66,7 +65,7 @@
    ABP Blog

    Take a look at our recently published articles.

    - See Blog + See Blog
    @@ -111,7 +110,7 @@
    Startup Templates - Details + Details
    @@ -119,7 +118,7 @@
    Application Modules - Details + Details
    @@ -127,7 +126,7 @@
    Developer
    Tools - Details + Details
    @@ -135,7 +134,7 @@
    UI
    Themes - Details + Details
    @@ -143,7 +142,7 @@
    Premium Support - Details + Details
    @@ -151,7 +150,7 @@
    Additional Services - Details + Details
    From 54a20e4a7c8ad19926f1c0376293d98b52d8d646 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 29 Sep 2020 12:12:10 +0300 Subject: [PATCH 076/143] Update the samples icon --- .../src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml | 2 +- .../src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml index 1019cb311e..fdf45439a8 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Pages/Index.cshtml @@ -46,7 +46,7 @@
    -
    Samples
    +
    Samples

    See the example projects built with the ABP Framework.

    All samples
    diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml index ef9d266639..e7bc26ba45 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/Pages/Index.cshtml @@ -46,7 +46,7 @@
    -
    Samples
    +
    Samples

    See the example projects built with the ABP Framework.

    All samples
    From 9a4fdc4440b25b98f391774451519bd767e0b9cf Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Tue, 29 Sep 2020 14:30:08 +0300 Subject: [PATCH 077/143] docs: finalize devextreme angular article --- ...ngularComponents-With-The-ABP-Framework.md | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md index 3a1b075d46..e5ee3ef274 100644 --- a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md +++ b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md @@ -34,7 +34,9 @@ You can login to the application by using following credentials After successful login, you should be redirected to home page. -## Create a lazy Angular Module for DevExtreme Demo + +## Create a lazy Angular Module for DevExtreme Demo + Let's create a module which will be loaded lazily. @@ -126,15 +128,19 @@ After completing the steps above, you should be able to see `Dev Extreme` on the ![A screenshot showing a page that says dev-extreme works!](dev-extreme-page.png) -## Display users on the dev-extreme page +## Display users on the dev-extreme page -For this demo, we will list users on the screen. We already have `admin` as user. Let's add couple of more to the list in `Administration -> Identity Management -> Users` page. +For this demo, we will list users on the screen. We already have `admin` as our first user. + +Let's add couple of more to the list in `Administration -> Identity Management -> Users` page. ![A screenshot showing users page after adding couple of users](users.png) +Now we are ready to fetch our users and display them on `/dev-extreme` page. + Firstly, let's create a service for our component. -Navigate to the `dev-extreme` folder and run following command +Navigate to the `dev-extreme` folder and run following command. If you run this command at the root, the service will be generated next to `app.module.ts` ```bash ng g s dev-extreme @@ -168,7 +174,7 @@ export class DevExtremeService { } ``` -Now we can simply inject `DevExtremeService` as public and utilize `users$` stream in `dev-extreme.component.ts` as follows. +Now we can simply inject `DevExtremeService` as public and utilize `users$` stream in `dev-extreme.component.ts` as follows: ```typescript import { Component } from '@angular/core'; @@ -184,7 +190,7 @@ export class DevExtremeComponent { } ``` -And use it within `dev-extreme.component.html` as follows +And use it within `dev-extreme.component.html` ```html @@ -200,7 +206,7 @@ This should list names of the users on the screen ![A screenshot showing list users on the dev extreme page](users-on-dev-extreme.png) -## Install DevExtreme +## Install DevExtreme We've added new users and listed them on the `/dev-extreme`. Now, it is time to integrate **DevExtreme** components into our application. @@ -235,7 +241,7 @@ After completing these steps, you need to restart the angular application. You can take a look at [demo](https://js.devexpress.com/Demos/WidgetsGallery/Demo/DataGrid/ColumnCustomization/Angular/Light/) provided by **DevExtreme** team or apply the following steps. -At this point, our application is ready to use `dx-data-grid` in `dev-extreme.component.ts` +Now, our application is ready to use `dx-data-grid` in `dev-extreme.component.ts` Firstly, we need to import `DxDataGridModule` in our module as follows. @@ -334,4 +340,10 @@ And change the template to the following The headers should change when a new language is selected -![A gif showing the headers of the table getting translated into the chosen language](devextreme-final.gif) \ No newline at end of file +![A gif showing the headers of the table getting translated into the chosen language](devextreme-final.gif) + +## Conclusion + +In this article, we have seen how to integrate `DevExtreme` angular components into a project generated by `ABP CLI` + +You can download the code of [the demo here](https://github.com/abpframework/abp-samples/tree/master/DevExtreme-Angular) \ No newline at end of file From 93033fd49bd46bbd0917bee7566e189b4eebf936 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 29 Sep 2020 14:46:49 +0300 Subject: [PATCH 078/143] fix: #5638 --- .../Components/FeatureManagementModal.razor | 2 +- .../Components/FeatureManagementModal.razor.cs | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor index 14074f60fe..90d2539841 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor @@ -16,7 +16,7 @@ } else { - + @foreach (var group in Groups) { diff --git a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs index c4b31d7262..aed44df8bc 100644 --- a/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs +++ b/modules/feature-management/src/Volo.Abp.FeatureManagement.Blazor/Components/FeatureManagementModal.razor.cs @@ -2,6 +2,7 @@ using System.Linq; using System.Threading.Tasks; using Blazorise; +using JetBrains.Annotations; using Microsoft.AspNetCore.Components; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Options; @@ -29,6 +30,8 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components protected string ProviderName; protected string ProviderKey; + + protected string SelectedTabName; protected List Groups { get; set; } @@ -36,7 +39,7 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components protected Dictionary SelectionStringValues; - public virtual async Task OpenAsync(string providerName, string providerKey) + public virtual async Task OpenAsync([NotNull]string providerName, string providerKey = null) { ProviderName = providerName; ProviderKey = providerKey; @@ -46,6 +49,8 @@ namespace Volo.Abp.FeatureManagement.Blazor.Components Groups = (await FeatureAppService.GetAsync(ProviderName, ProviderKey)).Groups; + SelectedTabName = GetNormalizedGroupName(Groups.First().Name); + foreach (var featureGroupDto in Groups) { foreach (var featureDto in featureGroupDto.Features) From 832ba06b5c000f9368935289886dac059d72a108 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Tue, 29 Sep 2020 16:00:33 +0300 Subject: [PATCH 079/143] Update Using-DevExtremeAngularComponents-With-The-ABP-Framework.md --- ...ngularComponents-With-The-ABP-Framework.md | 64 ++++--------------- 1 file changed, 14 insertions(+), 50 deletions(-) diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md index e5ee3ef274..e654802a16 100644 --- a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md +++ b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md @@ -40,67 +40,31 @@ After successful login, you should be redirected to home page. Let's create a module which will be loaded lazily. -Open up a terminal and navigate to `angular` to run following commands. Following commands require `angular-cli` being installed globally. -If you do not have `angular-cli` installed or you do not want to install it, you can run the same commands by adding `npx` to the beginning. -E.g. `npx ng g m dev-extreme --routing` +Open up a terminal and navigate to `angular` to run following command. -```bash -ng g m dev-extreme --routing -``` - -Following files should be created. - -```bash -CREATE src/app/dev-extreme/dev-extreme-routing.module.ts (253 bytes) -CREATE src/app/dev-extreme/dev-extreme.module.ts (297 bytes) +```shell +ng g m dev-extreme --route dev-extreme --module app ``` -Let's create a component for `DevExtremeModule` by running following command +...or with `npx`, if you do not have `angular-cli` installed... -```bash -ng g c dev-extreme +```shell +npx ng g m dev-extreme --route dev-extreme --module app ``` -Following files should be created. +Your terminal should log the following output: -```bash +```shell +CREATE src/app/dev-extreme/dev-extreme-routing.module.ts (361 bytes) +CREATE src/app/dev-extreme/dev-extreme.module.ts (379 bytes) CREATE src/app/dev-extreme/dev-extreme.component.scss (0 bytes) CREATE src/app/dev-extreme/dev-extreme.component.html (26 bytes) -CREATE src/app/dev-extreme/dev-extreme.component.spec.ts (657 bytes) +CREATE src/app/dev-extreme/dev-extreme.component.spec.ts (655 bytes) CREATE src/app/dev-extreme/dev-extreme.component.ts (295 bytes) -UPDATE src/app/dev-extreme/dev-extreme.module.ts (379 bytes) -``` - -We should edit `dev-extreme-routing.module.ts` to load newly created `DevExtremeComponent` when `DevExtremeModule` is loaded. - -Open `dev-extreme-routing.module.ts` and import `DevExtremeComponent` change `routes` array to the following - -```typescript -// ... -import { DevExtremeComponent } from './dev-extreme.component'; - -const routes: Routes = [{ - path: '', - component: DevExtremeComponent -}]; - -// ... +UPDATE src/app/app-routing.module.ts (362 bytes) ``` -We should also edit `app-routing.module.ts` to be able to load `DevExtremeModule` and `route.provider.ts` to show a link to this module. - -Open `app-routing.module.ts` and add following object to `routes` array - -```typescript -const routes: Routes = [ - // ... - { - path: 'dev-extreme', - loadChildren: () => import('./dev-extreme/dev-extreme.module').then((m) => m.DevExtremeModule), - }, - // ... -]; -``` +The Angular CLI has created a module and configured it to lazy-load at `/dev-extreme` path. The last step to be able to see our newly created module in the browser, open `route.provider.ts` and edit the array being added into the routes. @@ -346,4 +310,4 @@ The headers should change when a new language is selected In this article, we have seen how to integrate `DevExtreme` angular components into a project generated by `ABP CLI` -You can download the code of [the demo here](https://github.com/abpframework/abp-samples/tree/master/DevExtreme-Angular) \ No newline at end of file +You can download the code of [the demo here](https://github.com/abpframework/abp-samples/tree/master/DevExtreme-Angular) From 14281eacb906bf4d96c87f20d5a79989e9bda108 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Tue, 29 Sep 2020 16:08:05 +0300 Subject: [PATCH 080/143] Closes: #5635 --- .../Pages/Index.razor | 229 +++++++++++++++--- 1 file changed, 196 insertions(+), 33 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor index 66c4949ac9..d301cc831b 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor @@ -2,48 +2,211 @@ @using Volo.Abp.Users @using Volo.Abp.MultiTenancy @using System.Security.Claims +@using Microsoft.Extensions.Localization +@using MyCompanyName.MyProjectName.Localization @inject ICurrentUser CurrentUser @inject ICurrentTenant CurrentTenant @inject AuthenticationStateProvider AuthenticationStateProvider +@inject IStringLocalizer L -

    Welcome to MyProjectName!

    -@if (CurrentUser.IsAuthenticated) -{ -

    Current User

    -
      -
    • Id: @CurrentUser.Id
    • -
    • TenantId: @CurrentUser.TenantId
    • -
    • UserName: @CurrentUser.UserName
    • -
    • Name: @CurrentUser.Name
    • -
    • SurName: @CurrentUser.SurName
    • -
    • Email: @CurrentUser.Email
    • -
    • EmailVerified: @CurrentUser.EmailVerified
    • -
    • PhoneNumber: @CurrentUser.PhoneNumber
    • -
    • PhoneNumberVerified: @CurrentUser.PhoneNumberVerified
    • -
    • Roles: @CurrentUser.Roles.JoinAsString(", ")
    • -
    -} +
    +
    + +
    Congratulations, MyProjectName is successfully running!
    +
    -@if (_claims != null) -{ -

    Current Claims

    -
      - @foreach (var claim in _claims) +

      Welcome to the Application

      + +

      @L["LongWelcomeMessage"]

      + + @if (!CurrentUser.IsAuthenticated) { -
    • @claim.Type: @claim.Value
    • + } -
    -} -@if (CurrentTenant.IsAvailable) -{ -

    Current Tenant

    -
      -
    • Id: @CurrentTenant.Id
    • -
    • Name: @CurrentTenant.Name
    • -
    -} + + @if (CurrentUser.IsAuthenticated) + { + +

    Current User

    +
      +
    • Id: @CurrentUser.Id
    • +
    • TenantId: @CurrentUser.TenantId
    • +
    • UserName: @CurrentUser.UserName
    • +
    • Name: @CurrentUser.Name
    • +
    • SurName: @CurrentUser.SurName
    • +
    • Email: @CurrentUser.Email
    • +
    • EmailVerified: @CurrentUser.EmailVerified
    • +
    • PhoneNumber: @CurrentUser.PhoneNumber
    • +
    • PhoneNumberVerified: @CurrentUser.PhoneNumberVerified
    • +
    • Roles: @CurrentUser.Roles.JoinAsString(", ")
    • +
    +
    + } + @if (_claims != null) + { + +

    Current Claims

    +
      + @foreach (var claim in _claims) + { +
    • @claim.Type: @claim.Value
    • + } +
    +
    + } + @if (CurrentTenant.IsAvailable) + { + +

    Current Tenant

    +
      +
    • Id: @CurrentTenant.Id
    • +
    • Name: @CurrentTenant.Name
    • +
    +
    + } +
    +
    + +
    +

    Let's improve your application!

    +

    Here are some links to help you get started:

    +
    + +
    +
    +
    +
    +
    +
    Learn the ABP Framework
    +

    Explore the compherensive documentation to learn how to build a modern web application.

    + See Documents +
    +
    +
    +
    +
    Samples
    +

    See the example projects built with the ABP Framework.

    + All samples +
    +
    +
    +
    +
    ABP Community
    +

    Get involved with a vibrant community and become a contributor.

    + Community + Contribute +
    +
    +
    +
    +
    +
    +
    ABP Blog
    +

    Take a look at our recently published articles.

    + See Blog +
    +
    +
    +
    +
    Github
    +

    Do you love the ABP Framework? Please give a star to support it!

    +

    + Star + Issue + Fork +

    + Request a feature + +
    +
    +
    +
    +
    Stackoverflow
    +

    See answers to previously asked questions or ask a new one.

    + Questions + Ask a Question +
    +
    +
    +
    +
    + +
    +

    Meet the ABP Commercial

    +

    A Complete Web Application Platform Built on the ABP Framework

    +
    + +
    +
    +

    + ABP Commercial is a platform based on the open source ABP framework. It provides pre-built application modules, + rapid application development tooling, professional UI themes, premium support and more. +

    + +
    +
    +
    +
    + Startup Templates + Details +
    +
    +
    +
    +
    +
    + Application Modules + Details +
    +
    +
    +
    +
    +
    + Developer
    Tools + Details +
    +
    +
    +
    +
    +
    + UI
    Themes + Details +
    +
    +
    +
    +
    +
    + Premium Support + Details +
    +
    +
    +
    +
    +
    + Additional Services + Details +
    +
    +
    +
    +
    +
    + +
    @code { From eecc75ab0aebf3593f9811d64d7944b09c036359 Mon Sep 17 00:00:00 2001 From: Mehmet Erim <34455572+mehmet-erim@users.noreply.github.com> Date: Tue, 29 Sep 2020 16:46:37 +0300 Subject: [PATCH 081/143] Update Getting-Started-React-Native.md --- docs/en/Getting-Started-React-Native.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Getting-Started-React-Native.md b/docs/en/Getting-Started-React-Native.md index 74a8f2b829..a06257fec9 100644 --- a/docs/en/Getting-Started-React-Native.md +++ b/docs/en/Getting-Started-React-Native.md @@ -110,4 +110,4 @@ The application is up and running. You can continue to develop your application ## See Also -* [React Native project structure](./Startup-Templates/Application.md#react-native) +* [React Native project structure](./Startup-Templates/Application#react-native) From e9ce7225971c021ec2c57f7c7e93b59a167fea8d Mon Sep 17 00:00:00 2001 From: bnymncoskuner Date: Wed, 30 Sep 2020 09:49:59 +0300 Subject: [PATCH 082/143] docs: finalize devextreme angular blogpost --- ...ngularComponents-With-The-ABP-Framework.md | 70 +++++++++---------- 1 file changed, 35 insertions(+), 35 deletions(-) diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md index e654802a16..4637f07e57 100644 --- a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md +++ b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md @@ -6,9 +6,11 @@ We will create the same application using Angular as the UI framework and integr ## Create the Project +For detail information about how to generate and start up a project, please refer to the [official docs](https://docs.abp.io/en/abp/latest/Getting-Started?UI=NG&DB=EF&Tiered=No). For the scope of this post, we will not go into details of the backend applications. + Let's create an application using [ABP CLI](https://docs.abp.io/en/abp/latest/CLI#new) -```bash +```shell abp new DevExtremeAngular -u angular ``` @@ -34,9 +36,38 @@ You can login to the application by using following credentials After successful login, you should be redirected to home page. +## Install DevExtreme -## Create a lazy Angular Module for DevExtreme Demo +Let's start with installing DevExtreme into our project before writing any code. + +You can follow [the guide](https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started/Add_DevExtreme_to_an_Angular_CLI_Application/) provided by **DevExtreme** team or apply the following steps. + +* `npm install devextreme devextreme-angular` or `yarn add devextreme devextreme-angular` +* Import following two styles in `angular.json` + +```javascript + // ... + "styles": [ + // ... + "src/styles.scss", + "node_modules/devextreme/dist/css/dx.common.css", + "node_modules/devextreme/dist/css/dx.light.css" + ] +``` + +* Add `dx-viewport` to classes of `body` in `index.html` + +```html + + +
    +
    + +``` + +After completing these steps, you need to restart the angular application. +## Create a lazy Angular Module for DevExtreme Demo Let's create a module which will be loaded lazily. @@ -106,13 +137,13 @@ Firstly, let's create a service for our component. Navigate to the `dev-extreme` folder and run following command. If you run this command at the root, the service will be generated next to `app.module.ts` -```bash +```shell ng g s dev-extreme ``` Following files should be created -```bash +```shell CREATE src/app/dev-extreme/dev-extreme.service.spec.ts (378 bytes) CREATE src/app/dev-extreme/dev-extreme.service.ts (139 bytes) ``` @@ -170,37 +201,6 @@ This should list names of the users on the screen ![A screenshot showing list users on the dev extreme page](users-on-dev-extreme.png) -## Install DevExtreme - -We've added new users and listed them on the `/dev-extreme`. Now, it is time to integrate **DevExtreme** components into our application. - -You can follow [the guide](https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started/Add_DevExtreme_to_an_Angular_CLI_Application/) provided by **DevExtreme** team or apply the following steps. - -* `npm install devextreme devextreme-angular` or `yarn add devextreme devextreme-angular` -* Import following two styles in `angular.json` - -```javascript - // ... - "styles": [ - // ... - "src/styles.scss", - "node_modules/devextreme/dist/css/dx.common.css", - "node_modules/devextreme/dist/css/dx.light.css" - ] -``` - -* Add `dx-viewport` to classes of `body` in `index.html` - -```html - - -
    -
    - -``` - -After completing these steps, you need to restart the angular application. - ## Use DxDataGrid to list the users You can take a look at [demo](https://js.devexpress.com/Demos/WidgetsGallery/Demo/DataGrid/ColumnCustomization/Angular/Light/) provided by **DevExtreme** team or apply the following steps. From dc19e4fdccf0f611a2722f01347c5f4915c42482 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 30 Sep 2020 10:04:26 +0300 Subject: [PATCH 083/143] cli add-module --add-to-solution-file option --- docs/en/CLI.md | 3 ++- .../Volo/Abp/Cli/Commands/AddModuleCommand.cs | 14 +++++++++++--- .../Cli/ProjectModification/SolutionModuleAdder.cs | 10 ++++++++-- 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index dd3287ce12..3825f5884c 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -180,7 +180,8 @@ abp add-module Volo.Blogging * `--solution` or `-s`: Specifies the solution (.sln) file path. If not specified, CLI tries to find a .sln file in the current directory. * `--skip-db-migrations`: For EF Core database provider, it automatically adds a new code first migration (`Add-Migration`) and updates the database (`Update-Database`) if necessary. Specify this option to skip this operation. * `-sp` or `--startup-project`: Relative path to the project folder of the startup project. Default value is the current folder. -* `--with-source-code`: Add source code of the module instead of NuGet/NPM packages. +* `--with-source-code`: Downloads the source code of the module to your solution folder and uses local project references instead of NuGet/NPM packages. +* `--add-to-solution-file`: Adds the downloaded project to your solution file, so you will also see the projects of the module in your solution when you open it on a IDE. (only available when `--with-source-code` is used.) ### get-source diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs index 5e690d8bb0..02eac070c8 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs @@ -36,7 +36,8 @@ namespace Volo.Abp.Cli.Commands ); } - var withSourceCode = commandLineArgs.Options.ContainsKey("with-source-code"); + var withSourceCode = commandLineArgs.Options.ContainsKey(Options.SourceCode.Long); + var addSourceCodeToSolutionFile = withSourceCode && commandLineArgs.Options.ContainsKey("add-to-solution-file"); var skipDbMigrations = Convert.ToBoolean( commandLineArgs.Options.GetOrNull(Options.DbMigrations.Skip) ?? "false"); @@ -55,7 +56,8 @@ namespace Volo.Abp.Cli.Commands commandLineArgs.Options.GetOrNull(Options.StartupProject.Short, Options.StartupProject.Long), version, skipDbMigrations, - withSourceCode + withSourceCode, + addSourceCodeToSolutionFile ); } @@ -71,7 +73,8 @@ namespace Volo.Abp.Cli.Commands sb.AppendLine(" abp add-module [options]"); sb.AppendLine(""); sb.AppendLine("Options:"); - sb.AppendLine(" --with-source-code Downloads the source code of the module and adds it to your solution."); + sb.AppendLine(" --with-source-code Downloads the source code of the module to your solution folder."); + sb.AppendLine(" --add-to-solution-file Adds the downloaded project to your solution file. (only available when --with-source-code used)"); sb.AppendLine(" -s|--solution Specify the solution file explicitly."); sb.AppendLine(" --skip-db-migrations Specify if a new migration will be added or not."); sb.AppendLine(" -sp|--startup-project Relative path to the project folder of the startup project. Default value is the current folder."); @@ -158,6 +161,11 @@ namespace Volo.Abp.Cli.Commands public const string Short = "sp"; public const string Long = "startup-project"; } + + public static class SourceCode + { + public const string Long = "with-source-code"; + } } } } diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index e4c4c655f7..4cbeb2ba26 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -68,7 +68,8 @@ namespace Volo.Abp.Cli.ProjectModification string startupProject, string version, bool skipDbMigrations = false, - bool withSourceCode = false) + bool withSourceCode = false, + bool addSourceCodeToSolutionFile = false) { Check.NotNull(solutionFile, nameof(solutionFile)); Check.NotNull(moduleName, nameof(moduleName)); @@ -85,7 +86,12 @@ namespace Volo.Abp.Cli.ProjectModification { var modulesFolderInSolution = Path.Combine(Path.GetDirectoryName(solutionFile), "modules"); await DownloadSourceCodesToSolutionFolder(module, modulesFolderInSolution, version); - await SolutionFileModifier.AddModuleToSolutionFileAsync(module, solutionFile); + + if (addSourceCodeToSolutionFile) + { + await SolutionFileModifier.AddModuleToSolutionFileAsync(module, solutionFile); + } + await NugetPackageToLocalReferenceConverter.Convert(module, solutionFile); await AddAngularSourceCode(modulesFolderInSolution, solutionFile); } From dfef2b808cad008073445489979cc0a6c9d9dd7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 30 Sep 2020 10:10:37 +0300 Subject: [PATCH 084/143] Update SignalR-Integration.md --- docs/en/SignalR-Integration.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/SignalR-Integration.md b/docs/en/SignalR-Integration.md index f6ba81b550..29c37e30b2 100644 --- a/docs/en/SignalR-Integration.md +++ b/docs/en/SignalR-Integration.md @@ -1,6 +1,6 @@ # SignalR Integration -> It is already possible to follow [the standard Microsoft tutorial](https://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr) to add [SignalR](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction) to your application. However, ABP provides a SignalR integration packages those simplify the integration and usage. +> It is already possible to follow [the standard Microsoft tutorial](https://docs.microsoft.com/en-us/aspnet/core/tutorials/signalr) to add [SignalR](https://docs.microsoft.com/en-us/aspnet/core/signalr/introduction) to your application. However, ABP provides SignalR integration packages those simplify the integration and usage. ## Installation From 7657b2aca568eff5367a8bfcb6a571dc74b9ea80 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 30 Sep 2020 10:20:32 +0300 Subject: [PATCH 085/143] Update CLI.md --- docs/en/CLI.md | 2 +- .../Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 3825f5884c..9aaf2777bb 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -181,7 +181,7 @@ abp add-module Volo.Blogging * `--skip-db-migrations`: For EF Core database provider, it automatically adds a new code first migration (`Add-Migration`) and updates the database (`Update-Database`) if necessary. Specify this option to skip this operation. * `-sp` or `--startup-project`: Relative path to the project folder of the startup project. Default value is the current folder. * `--with-source-code`: Downloads the source code of the module to your solution folder and uses local project references instead of NuGet/NPM packages. -* `--add-to-solution-file`: Adds the downloaded project to your solution file, so you will also see the projects of the module in your solution when you open it on a IDE. (only available when `--with-source-code` is used.) +* `--add-to-solution-file`: Adds the downloaded module to your solution file, so you will also see the projects of the module in your solution when you open it on a IDE. (only available when `--with-source-code` is used.) ### get-source diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs index 02eac070c8..42a8d76b98 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/AddModuleCommand.cs @@ -74,7 +74,7 @@ namespace Volo.Abp.Cli.Commands sb.AppendLine(""); sb.AppendLine("Options:"); sb.AppendLine(" --with-source-code Downloads the source code of the module to your solution folder."); - sb.AppendLine(" --add-to-solution-file Adds the downloaded project to your solution file. (only available when --with-source-code used)"); + sb.AppendLine(" --add-to-solution-file Adds the downloaded module to your solution file. (only available when --with-source-code used)"); sb.AppendLine(" -s|--solution Specify the solution file explicitly."); sb.AppendLine(" --skip-db-migrations Specify if a new migration will be added or not."); sb.AppendLine(" -sp|--startup-project Relative path to the project folder of the startup project. Default value is the current folder."); From e172629a638e9e612cd7a5074fb38b697cef5431 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Wed, 30 Sep 2020 10:22:21 +0300 Subject: [PATCH 086/143] Update CLI.md --- docs/en/CLI.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index 9aaf2777bb..8713bc9019 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -181,7 +181,7 @@ abp add-module Volo.Blogging * `--skip-db-migrations`: For EF Core database provider, it automatically adds a new code first migration (`Add-Migration`) and updates the database (`Update-Database`) if necessary. Specify this option to skip this operation. * `-sp` or `--startup-project`: Relative path to the project folder of the startup project. Default value is the current folder. * `--with-source-code`: Downloads the source code of the module to your solution folder and uses local project references instead of NuGet/NPM packages. -* `--add-to-solution-file`: Adds the downloaded module to your solution file, so you will also see the projects of the module in your solution when you open it on a IDE. (only available when `--with-source-code` is used.) +* `--add-to-solution-file`: Adds the downloaded module to your solution file, so you will also see the projects of the module when you open the solution on a IDE. (only available when `--with-source-code` is used.) ### get-source From c02e6bcf62f1074eac4a08322a80a9839652552e Mon Sep 17 00:00:00 2001 From: Ahmet Date: Wed, 30 Sep 2020 10:36:26 +0300 Subject: [PATCH 087/143] Update Index.razor --- .../src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor index d301cc831b..0f26f4cb60 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor @@ -120,7 +120,7 @@ Fork

    Request a feature - +
    From c3a9b5f0e8186e94c8854a46e675dac0f809a634 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Wed, 30 Sep 2020 11:09:31 +0300 Subject: [PATCH 088/143] Update Index.razor --- .../MyCompanyName.MyProjectName.Blazor/Pages/Index.razor | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor index 0f26f4cb60..ba2d89f2cd 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor @@ -114,12 +114,8 @@
    Github

    Do you love the ABP Framework? Please give a star to support it!

    -

    - Star - Issue - Fork -

    - Request a feature + + See Open Source Framework
    From 0efbf56976662b5cf7b959f9cbf1c5fc364bf86b Mon Sep 17 00:00:00 2001 From: Ahmet Date: Wed, 30 Sep 2020 11:17:28 +0300 Subject: [PATCH 089/143] Update TenantManagementBlazorMenuContributor.cs ref: #5633 --- .../Navigation/TenantManagementBlazorMenuContributor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/TenantManagementBlazorMenuContributor.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/TenantManagementBlazorMenuContributor.cs index 1fe3d09ca2..c1d6e9ac7a 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/TenantManagementBlazorMenuContributor.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Blazor/Navigation/TenantManagementBlazorMenuContributor.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.TenantManagement.Blazor.Navigation if (await context.IsGrantedAsync(TenantManagementPermissions.Tenants.Default)) { - tenantManagementMenuItem.AddItem(new ApplicationMenuItem(TenantManagementMenuNames.Tenants, l["Tenants"], url: "~/tenant-management/tenants")); + tenantManagementMenuItem.AddItem(new ApplicationMenuItem(TenantManagementMenuNames.Tenants, l["Tenants"], url: "/tenant-management/tenants")); } } } From 4695ca933293a972b254822c25fd084548ee0644 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 30 Sep 2020 16:58:33 +0300 Subject: [PATCH 090/143] Clean the index page of the startup template --- .../AbpIdentityWebMainMenuContributor.cs | 2 +- .../Pages/Index.razor | 55 ++----------------- 2 files changed, 6 insertions(+), 51 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityWebMainMenuContributor.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityWebMainMenuContributor.cs index 17c956f0c7..3198e1335d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityWebMainMenuContributor.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityWebMainMenuContributor.cs @@ -22,7 +22,7 @@ namespace Volo.Abp.Identity.Blazor var l = context.GetLocalizer(); - var identityMenuItem = new ApplicationMenuItem(IdentityMenuNames.GroupName, l["Menu:IdentityManagement"], icon: "fa fa-id-card-o"); + var identityMenuItem = new ApplicationMenuItem(IdentityMenuNames.GroupName, l["Menu:IdentityManagement"], icon: "far fa-id-card"); administrationMenu.AddItem(identityMenuItem); if (hasRolePermission) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor index ba2d89f2cd..114be0b5e1 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/Pages/Index.razor @@ -8,8 +8,6 @@ @inject ICurrentTenant CurrentTenant @inject AuthenticationStateProvider AuthenticationStateProvider @inject IStringLocalizer L - -
    @@ -114,9 +69,9 @@
    Github

    Do you love the ABP Framework? Please give a star to support it!

    - + See Open Source Framework - +
    From adcc767fbb98aafbc0c802b40c847a3a026620d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 30 Sep 2020 17:08:28 +0300 Subject: [PATCH 091/143] Fixed the basic theme main menu --- .../Themes/Basic/NavMenu.razor | 46 +++++++++++++++- .../Themes/Basic/NavMenuItem.razor | 53 +++++++++---------- .../wwwroot/index.html | 2 +- 3 files changed, 70 insertions(+), 31 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenu.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenu.razor index e1ede1c0fd..c3ada520dc 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenu.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenu.razor @@ -2,6 +2,50 @@ { foreach (var menuItem in Menu.Items) { - + var elementId = menuItem.ElementId ?? "MenuItem_" + menuItem.Name.Replace(".", "_"); + var cssClass = string.IsNullOrEmpty(menuItem.CssClass) ? string.Empty : menuItem.CssClass; + var disabled = menuItem.IsDisabled ? "disabled" : string.Empty; + var url = string.IsNullOrEmpty(menuItem.Url) ? "#" : menuItem.Url; + if (menuItem.IsLeaf) + { + if (menuItem.Url != null) + { + + } + } + else + { + + } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenuItem.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenuItem.razor index 8194896f61..f0ce353bf9 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenuItem.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenuItem.razor @@ -2,49 +2,44 @@ @{ var elementId = MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_"); var cssClass = string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass; + var disabled = MenuItem.IsDisabled ? "disabled" : string.Empty; var url = string.IsNullOrEmpty(MenuItem.Url) ? "#" : MenuItem.Url; } @if (MenuItem.IsLeaf) { if (MenuItem.Url != null) { - + } + @MenuItem.DisplayName + } } else { - - +
    } @code { [Parameter] diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html index 99ab025095..9edbaa4185 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html @@ -16,7 +16,7 @@ - + Loading...
    From c8aa4e5e4a9b57970c272bc98b0ca9823a3ceec3 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Wed, 30 Sep 2020 17:25:06 +0300 Subject: [PATCH 092/143] Fixed the basic theme main menu --- .../Themes/Basic/NavMenu.razor | 46 +++++++++++++++- .../Themes/Basic/NavMenuItem.razor | 55 +++++++++---------- .../wwwroot/index.html | 2 +- 3 files changed, 71 insertions(+), 32 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenu.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenu.razor index e1ede1c0fd..c3ada520dc 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenu.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenu.razor @@ -2,6 +2,50 @@ { foreach (var menuItem in Menu.Items) { - + var elementId = menuItem.ElementId ?? "MenuItem_" + menuItem.Name.Replace(".", "_"); + var cssClass = string.IsNullOrEmpty(menuItem.CssClass) ? string.Empty : menuItem.CssClass; + var disabled = menuItem.IsDisabled ? "disabled" : string.Empty; + var url = string.IsNullOrEmpty(menuItem.Url) ? "#" : menuItem.Url; + if (menuItem.IsLeaf) + { + if (menuItem.Url != null) + { + + } + } + else + { + + } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenuItem.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenuItem.razor index 8194896f61..bbf9bb69d8 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenuItem.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavMenuItem.razor @@ -2,51 +2,46 @@ @{ var elementId = MenuItem.ElementId ?? "MenuItem_" + MenuItem.Name.Replace(".", "_"); var cssClass = string.IsNullOrEmpty(MenuItem.CssClass) ? string.Empty : MenuItem.CssClass; + var disabled = MenuItem.IsDisabled ? "disabled" : string.Empty; var url = string.IsNullOrEmpty(MenuItem.Url) ? "#" : MenuItem.Url; } @if (MenuItem.IsLeaf) { if (MenuItem.Url != null) { - + } + @MenuItem.DisplayName + } } else { - - +
    } @code { [Parameter] public ApplicationMenuItem MenuItem { get; set; } -} +} \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html index 99ab025095..9edbaa4185 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/wwwroot/index.html @@ -16,7 +16,7 @@ - + Loading...
    From 625a232d4418fd3895d2bbbea2814d64298e498d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 30 Sep 2020 17:35:44 +0300 Subject: [PATCH 093/143] Implement the navigation toolbar for the basic theme of the Blazor UI --- ...pNetCoreComponentsWebAssemblyBasicTheme.cs | 6 ++++ .../BasicThemeToolbarContributor.cs | 20 +++++++++++ .../Themes/Basic/LoginDisplay.razor | 4 +-- .../Themes/Basic/MainLayout.razor | 9 +---- .../Themes/Basic/NavToolbar.razor | 8 +++++ .../Themes/Basic/NavToolbar.razor.cs | 34 +++++++++++++++++++ 6 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BasicThemeToolbarContributor.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/AbpAspNetCoreComponentsWebAssemblyBasicTheme.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/AbpAspNetCoreComponentsWebAssemblyBasicTheme.cs index 74c81ed72c..0de4e5de7a 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/AbpAspNetCoreComponentsWebAssemblyBasicTheme.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/AbpAspNetCoreComponentsWebAssemblyBasicTheme.cs @@ -1,5 +1,6 @@ using Volo.Abp.AspNetCore.Components.WebAssembly.Theming; using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Routing; +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars; using Volo.Abp.Modularity; namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme @@ -15,6 +16,11 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme { options.AdditionalAssemblies.Add(typeof(AbpAspNetCoreComponentsWebAssemblyBasicThemeModule).Assembly); }); + + Configure(options => + { + options.Contributors.Add(new BasicThemeToolbarContributor()); + }); } } } diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BasicThemeToolbarContributor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BasicThemeToolbarContributor.cs new file mode 100644 index 0000000000..8316a1480e --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/BasicThemeToolbarContributor.cs @@ -0,0 +1,20 @@ +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic; +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme +{ + public class BasicThemeToolbarContributor : IToolbarContributor + { + public Task ConfigureToolbarAsync(IToolbarConfigurationContext context) + { + if (context.Toolbar.Name == StandardToolbars.Main) + { + context.Toolbar.Items.Add(new ToolbarItem(typeof(LanguageSwitch))); + context.Toolbar.Items.Add(new ToolbarItem(typeof(LoginDisplay))); + } + + return Task.CompletedTask; + } + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor index 88a005d7bf..f55685e665 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor @@ -17,7 +17,7 @@ @menuItem.DisplayName } } - + Logout @@ -32,7 +32,7 @@ { Navigation.NavigateTo(uri); } - + private async Task BeginSignOut() { await SignOutManager.SetSignOutState(); diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor index af88212f0a..8e64b32022 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/MainLayout.razor @@ -13,14 +13,7 @@ - +
    diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor new file mode 100644 index 0000000000..5eea07ea8f --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor @@ -0,0 +1,8 @@ + diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs new file mode 100644 index 0000000000..c2f08568e4 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs @@ -0,0 +1,34 @@ +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Toolbars; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic +{ + public partial class NavToolbar + { + [Inject] + private IToolbarManager ToolbarManager { get; set; } + + private RenderFragment ToolbarRender { get; set; } + + private List ToolbarItemRenders { get; set; } = new List(); + + protected override async Task OnInitializedAsync() + { + var toolbar = await ToolbarManager.GetAsync(StandardToolbars.Main); + + ToolbarItemRenders.Clear(); + + foreach (var item in toolbar.Items) + { + ToolbarItemRenders.Add(builder => + { + builder.OpenComponent(0, item.ComponentType); + builder.CloseComponent(); + }); + } + } + + } +} From e7c83894d42d36c6ba3322c8d4b9988f23a9a9d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Wed, 30 Sep 2020 21:07:23 +0300 Subject: [PATCH 094/143] Create codeql-analysis.yml --- .github/workflows/codeql-analysis.yml | 71 +++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 .github/workflows/codeql-analysis.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000000..ae5d4fdacc --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,71 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +name: "CodeQL" + +on: + push: + branches: [dev, rel-1.0, rel-1.1, rel-2.0, rel-2.1, rel-2.2, rel-2.3, rel-2.4, rel-2.5, rel-2.6, rel-2.7, rel-2.8, rel-2.9, rel-3.0, rel-3.1, rel-3.2] + pull_request: + # The branches below must be a subset of the branches above + branches: [dev] + schedule: + - cron: '0 8 * * 6' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + # Override automatic language detection by changing the below list + # Supported options are ['csharp', 'cpp', 'go', 'java', 'javascript', 'python'] + language: ['csharp', 'javascript'] + # Learn more... + # https://docs.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#overriding-automatic-language-detection + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + with: + # We must fetch at least the immediate parents so that if this is + # a pull request then we can checkout the head. + fetch-depth: 2 + + # If this run was triggered by a pull request event, then checkout + # the head of the pull request instead of the merge commit. + - run: git checkout HEAD^2 + if: ${{ github.event_name == 'pull_request' }} + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 From c0ee8748179e173657c17f29c7f2b291507a233d Mon Sep 17 00:00:00 2001 From: Ahmet Date: Wed, 30 Sep 2020 23:23:37 +0300 Subject: [PATCH 095/143] Added returnUrl to Manage Account page --- .../Volo/Abp/Account/Localization/Resources/en.json | 3 ++- .../Volo/Abp/Account/Localization/Resources/tr.json | 4 +++- .../Volo.Abp.Account.Web/Pages/Account/Manage.cshtml | 11 +++++++++++ .../Pages/Account/Manage.cshtml.cs | 4 ++++ .../MyCompanyName.MyProjectName.Blazor.csproj | 1 - .../MyProjectNameBlazorModule.cs | 2 -- 6 files changed, 20 insertions(+), 5 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json index 85bd040d8c..51abf72a1e 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/en.json @@ -55,6 +55,7 @@ "GoToTheApplication": "Go to the application", "BackToLogin": "Back to login", "ProfileTab:Password": "Change password", - "ProfileTab:PersonalInfo": "Personal info" + "ProfileTab:PersonalInfo": "Personal info", + "ReturnToApplication": "Return to application" } } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json index c9aff72675..48e43fd6cc 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/tr.json @@ -44,6 +44,7 @@ "LoggedOutTitle": "Çıkış Yaptınız", "LoggedOutText": "Çıkış yaptınız ve birazdan yönlendirileceksiniz.", "ReturnToText": "{0} uygulamasına dönmek için tıklayın.", + "OrLoginWith": "Veya bunlarla giriş yap;", "ForgotPassword": "Şifremi unuttum", "SendPasswordResetLink_Information": "E-posta adresinize bir şifre sıfırlama bağlantısı gönderilecektir. Birkaç dakika içerisinde bir e-posta almazsanız lütfen tekrar deneyin.", "PasswordResetMailSentMessage": "E-posta adresinize bir şifre sıfırlama bağlantısı gönderilmiştir. Lütfen e-posta adresinizi kontrol ediniz. Eğer 15 dakika içinde, bu e-postayı gelen kutusunda bulamazsanız, gereksiz veya istenmeyen e-posta kutularına bakınız.", @@ -54,6 +55,7 @@ "GoToTheApplication": "Uygulamaya git", "BackToLogin": "Girişe dön", "ProfileTab:Password": "Şifre değiştir", - "ProfileTab:PersonalInfo": "Kişisel bilgiler" + "ProfileTab:PersonalInfo": "Kişisel bilgiler", + "ReturnToApplication": "Uygulamaya geri dön" } } diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml index ff6262f3ec..ec48e5bcde 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml @@ -13,6 +13,17 @@ } +@if (!Model.ReturnUrl.IsNullOrWhiteSpace()) +{ + + + + @L["ReturnToApplication"] + + + +} +e
    diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs index f7b08eb6c4..b48a20a545 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml.cs @@ -10,6 +10,10 @@ namespace Volo.Abp.Account.Web.Pages.Account { public class ManageModel : AccountPageModel { + [HiddenInput] + [BindProperty(SupportsGet = true)] + public string ReturnUrl { get; set; } + public ProfileManagementPageCreationContext ProfileManagementPageCreationContext { get; private set; } protected ProfileManagementPageOptions Options { get; } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj index c716843c19..cba18ad1bd 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyCompanyName.MyProjectName.Blazor.csproj @@ -19,7 +19,6 @@ - diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs index 80174dec40..7554ae8aca 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Blazor/MyProjectNameBlazorModule.cs @@ -14,7 +14,6 @@ using Volo.Abp.Autofac.WebAssembly; using Volo.Abp.Modularity; using Volo.Abp.UI.Navigation; using Volo.Abp.Identity.Blazor; -using Volo.Abp.Account.Blazor; using Volo.Abp.AutoMapper; using Volo.Abp.TenantManagement.Blazor; @@ -25,7 +24,6 @@ namespace MyCompanyName.MyProjectName.Blazor typeof(MyProjectNameHttpApiClientModule), typeof(AbpAspNetCoreComponentsWebAssemblyBasicThemeModule), typeof(AbpIdentityBlazorModule), - typeof(AbpAccountBlazorModule), typeof(AbpTenantManagementBlazorModule) )] public class MyProjectNameBlazorModule : AbpModule From 6ddbdf4a74f71a92de64bd47e5a06990468dc321 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 1 Oct 2020 14:28:15 +0800 Subject: [PATCH 096/143] Update MyProjectNameDbMigrationService.cs --- .../Data/MyProjectNameDbMigrationService.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs index fe86ebe33b..db5b9291a6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Data/MyProjectNameDbMigrationService.cs @@ -47,9 +47,9 @@ namespace MyCompanyName.MyProjectName.Data var migratedDatabaseSchemas = new HashSet(); foreach (var tenant in tenants) { - if (tenant.ConnectionStrings.Any()) + using (_currentTenant.Change(tenant.Id)) { - using (_currentTenant.Change(tenant.Id)) + if (tenant.ConnectionStrings.Any()) { var tenantConnectionStrings = tenant.ConnectionStrings .Select(x => x.Value) @@ -62,9 +62,9 @@ namespace MyCompanyName.MyProjectName.Data migratedDatabaseSchemas.AddIfNotContains(tenantConnectionStrings); } } - } - await SeedDataAsync(tenant); + await SeedDataAsync(tenant); + } Logger.LogInformation($"Successfully completed {tenant.Name} tenant database migrations."); } From 2c601218d403d8ed3f5a277763c35fd90abb44be Mon Sep 17 00:00:00 2001 From: Erol Arkat Date: Thu, 1 Oct 2020 10:06:30 +0300 Subject: [PATCH 097/143] version update --- common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.props b/common.props index 6b1fd2f15e..a22af0116f 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 3.2.0-rc.2 + 3.2.0 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ From 6f9e11d29537902f60e74d78511da4c159ad2f61 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 1 Oct 2020 15:32:28 +0800 Subject: [PATCH 098/143] Update Chinese localization --- .../Account/Localization/Resources/zh-Hans.json | 5 ++++- .../Account/Localization/Resources/zh-Hant.json | 17 ++++++++++++++++- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json index a7be7fd0b8..340fe95f74 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hans.json @@ -52,6 +52,9 @@ "ResetPassword_Information": "请输入您的新密码.", "YourPasswordIsSuccessfullyReset": "您的密码已经被重置成功.", "GoToTheApplication": "转到应用程序", - "BackToLogin": "返回登录" + "BackToLogin": "返回登录", + "ProfileTab:Password": "更改密码", + "ProfileTab:PersonalInfo": "个人信息", + "ReturnToApplication": "返回到应用程序" } } diff --git a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json index b75be0f73a..f4fd2d65b1 100644 --- a/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json +++ b/modules/account/src/Volo.Abp.Account.Application.Contracts/Volo/Abp/Account/Localization/Resources/zh-Hant.json @@ -40,6 +40,21 @@ "DisplayName:Abp.Account.IsSelfRegistrationEnabled": "啟用自行註冊", "Description:Abp.Account.IsSelfRegistrationEnabled": "是否允許使用者自行註冊帳號.", "DisplayName:Abp.Account.EnableLocalLogin": "使用本地帳號進行身分驗證", - "Description:Abp.Account.EnableLocalLogin": "伺服器是否允許使用者使用本地帳號進行身份驗證。" + "Description:Abp.Account.EnableLocalLogin": "伺服器是否允許使用者使用本地帳號進行身份驗證。", + "LoggedOutTitle": "註銷", + "LoggedOutText": "你已成功註銷並將馬上返回.", + "ReturnToText": "點擊此處返回到 {0}", + "ForgotPassword": "忘記密碼?", + "SendPasswordResetLink_Information": "密碼重置鏈接將發送到您的電子郵件以重置密碼. 如果您在幾分鐘內沒有收到電子郵件,請重試.", + "PasswordResetMailSentMessage": "帳戶恢復電子郵件已發送到您的電子郵件地址. 如果您在15分鐘內未在收件箱中看到此電子郵件,請檢查垃圾郵件,並標記為非垃圾郵件.", + "ResetPassword": "重設密碼", + "ConfirmPassword": "確認(重復)密碼", + "ResetPassword_Information": "請輸入您的新密碼.", + "YourPasswordIsSuccessfullyReset": "您的密碼已經被重置成功.", + "GoToTheApplication": "轉到應用程序", + "BackToLogin": "返回登錄", + "ProfileTab:Password": "更改密碼", + "ProfileTab:PersonalInfo": "個人信息", + "ReturnToApplication": "返回到應用程序" } } From ce14d3d06c71d2d7e90a02207fa5fe32875fff27 Mon Sep 17 00:00:00 2001 From: erolarkat Date: Thu, 1 Oct 2020 12:41:53 +0300 Subject: [PATCH 099/143] npm packages 3.2.0 --- .../package.json | 2 +- .../yarn.lock | 224 ++++++------ .../package.json | 4 +- .../yarn.lock | 260 +++++++------- .../app/Volo.BloggingTestApp/package.json | 4 +- .../app/Volo.BloggingTestApp/yarn.lock | 332 +++++++++--------- .../Volo.ClientSimulation.Demo/package.json | 2 +- .../demo/Volo.ClientSimulation.Demo/yarn.lock | 238 ++++++------- modules/cms-kit/angular/package.json | 10 +- .../angular/projects/cms-kit/package.json | 4 +- .../Volo.CmsKit.IdentityServer/package.json | 2 +- .../host/Volo.CmsKit.IdentityServer/yarn.lock | 238 ++++++------- .../host/Volo.CmsKit.Web.Host/package.json | 2 +- .../host/Volo.CmsKit.Web.Host/yarn.lock | 238 ++++++------- .../host/Volo.CmsKit.Web.Unified/package.json | 2 +- .../host/Volo.CmsKit.Web.Unified/yarn.lock | 238 ++++++------- modules/docs/app/VoloDocs.Web/package.json | 4 +- modules/docs/app/VoloDocs.Web/yarn.lock | 298 ++++++++-------- npm/lerna.json | 2 +- npm/ng-packs/lerna.version.json | 2 +- npm/ng-packs/package.json | 22 +- npm/ng-packs/packages/account/package.json | 4 +- npm/ng-packs/packages/components/package.json | 4 +- npm/ng-packs/packages/core/package.json | 4 +- .../packages/feature-management/package.json | 4 +- npm/ng-packs/packages/identity/package.json | 6 +- .../permission-management/package.json | 4 +- npm/ng-packs/packages/schematics/package.json | 2 +- .../packages/setting-management/package.json | 4 +- .../packages/tenant-management/package.json | 6 +- .../packages/theme-basic/package.json | 4 +- .../packages/theme-shared/package.json | 4 +- npm/packs/anchor-js/package.json | 4 +- .../package.json | 4 +- .../package.json | 30 +- npm/packs/aspnetcore.mvc.ui/package.json | 2 +- npm/packs/blogging/package.json | 10 +- npm/packs/bootstrap-datepicker/package.json | 2 +- npm/packs/bootstrap/package.json | 4 +- npm/packs/chart.js/package.json | 2 +- npm/packs/clipboard/package.json | 4 +- npm/packs/codemirror/package.json | 4 +- npm/packs/core/package.json | 4 +- npm/packs/cropperjs/package.json | 4 +- npm/packs/datatables.net-bs4/package.json | 4 +- npm/packs/datatables.net/package.json | 4 +- npm/packs/docs/package.json | 12 +- npm/packs/flag-icon-css/package.json | 2 +- npm/packs/font-awesome/package.json | 4 +- npm/packs/highlight.js/package.json | 4 +- npm/packs/jquery-form/package.json | 4 +- .../package.json | 4 +- npm/packs/jquery-validation/package.json | 4 +- npm/packs/jquery/package.json | 4 +- npm/packs/jstree/package.json | 4 +- npm/packs/lodash/package.json | 4 +- npm/packs/luxon/package.json | 4 +- .../package.json | 4 +- npm/packs/markdown-it/package.json | 4 +- npm/packs/owl.carousel/package.json | 4 +- npm/packs/popper.js/package.json | 4 +- npm/packs/prismjs/package.json | 6 +- npm/packs/select2/package.json | 4 +- npm/packs/signalr/package.json | 4 +- npm/packs/star-rating-svg/package.json | 4 +- npm/packs/sweetalert/package.json | 4 +- npm/packs/timeago/package.json | 4 +- npm/packs/toastr/package.json | 4 +- npm/packs/tui-editor/package.json | 10 +- npm/packs/uppy/package.json | 4 +- npm/packs/utils/package.json | 2 +- npm/packs/virtual-file-explorer/package.json | 6 +- templates/app/angular/package.json | 12 +- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- .../package.json | 2 +- .../MyCompanyName.MyProjectName.Web/yarn.lock | 238 ++++++------- templates/module/angular/package.json | 12 +- .../projects/my-project-name/package.json | 4 +- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- .../package.json | 2 +- .../yarn.lock | 238 ++++++------- 89 files changed, 2041 insertions(+), 2041 deletions(-) diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json index 56d6e1a68f..fc327ad536 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/package.json @@ -3,7 +3,7 @@ "name": "asp.net", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "^3.2.0-rc.2", + "@abp/aspnetcore.mvc.ui.theme.shared": "^3.2.0", "highlight.js": "^9.13.1" }, "devDependencies": {} diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock index a5b1e77851..8252be1892 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/yarn.lock @@ -2,30 +2,30 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.shared@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.shared@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -34,145 +34,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json index 4ed08c4605..7d6c2e8636 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/package.json @@ -3,8 +3,8 @@ "name": "asp.net", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2", - "@abp/prismjs": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0", + "@abp/prismjs": "^3.2.0" }, "devDependencies": {} } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock index 180ba822ff..7b0d3f4b79 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic.Demo/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,162 +41,162 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.0-rc.2.tgz#5b770b15259f002348de5a26fd8583cb9f8f4fa5" - integrity sha512-0JkslTmo8l/sIoluCCUaXwEgG8mmOHoR+bEdGBmcy97GLD3ux4TowItulF9aLG3VmJCpJNJF579bp7zik5R/Qw== +"@abp/clipboard@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.0.tgz#9c9f95c40639cabe89e6bc86ee0f33c853321225" + integrity sha512-WGonC5Hp4FCUBxevIt180QWIqOri0eO//mlRLBqj7gvo7H6zt5f4t90XKF24ZYWXjx7bCbIQQFt5t5ByeqdcJg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" clipboard "^2.0.6" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/prismjs@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.0-rc.2.tgz#da9073c9ee86a5d2b5970ee39a03b6eccd5ebac5" - integrity sha512-siResQWNtG5V6Q1xqY9S1wONIgKhKge5Oa0qTHjdljntZSvNTaEduFLW33YPMooAM3Ig6Gwlk8yvt+8ZOdGyVQ== +"@abp/prismjs@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.0.tgz#11c7c3023f11097a3eb26d8a0c04f7fa39d9531b" + integrity sha512-OafE/K8rC7popNQDh1J97AtPuxVeAFWh/msfHE3K5nmdYABpl8U7190ITw5COcVjjFLCEONpkkhfN/9ZdAQ8fQ== dependencies: - "@abp/clipboard" "~3.2.0-rc.2" - "@abp/core" "~3.2.0-rc.2" + "@abp/clipboard" "~3.2.0" + "@abp/core" "~3.2.0" prismjs "^1.20.0" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/modules/blogging/app/Volo.BloggingTestApp/package.json b/modules/blogging/app/Volo.BloggingTestApp/package.json index 6f2b1aab9f..759fb11760 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/package.json +++ b/modules/blogging/app/Volo.BloggingTestApp/package.json @@ -3,7 +3,7 @@ "name": "volo.blogtestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2", - "@abp/blogging": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0", + "@abp/blogging": "^3.2.0" } } \ No newline at end of file diff --git a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock index a2b6df4e66..0b75f07db8 100644 --- a/modules/blogging/app/Volo.BloggingTestApp/yarn.lock +++ b/modules/blogging/app/Volo.BloggingTestApp/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,214 +41,214 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/blogging@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-3.2.0-rc.2.tgz#1bf6a16e1891c423dde8e337161b612cc58b9985" - integrity sha512-VE+LmZcU1+bLfzNAKkfOFkMIu5JvCXmYRVNZKw7HBWSNpyjGvJcBMeTfhI4sSKHvoeAwgey0MQ2PCQm4/8Ft1w== +"@abp/blogging@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/blogging/-/blogging-3.2.0.tgz#a963c128fe92666a1b0f9059c2e9fb6519545ad3" + integrity sha512-+moP5svgo7eo3vegepH9Dff66kXLojtDN/5iLXZeNQmf+7KFmB7eATzIMJgWQzgRm99lBRERiGpQcAtWgpxpVA== dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - "@abp/owl.carousel" "~3.2.0-rc.2" - "@abp/prismjs" "~3.2.0-rc.2" - "@abp/tui-editor" "~3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + "@abp/owl.carousel" "~3.2.0" + "@abp/prismjs" "~3.2.0" + "@abp/tui-editor" "~3.2.0" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.0-rc.2.tgz#5b770b15259f002348de5a26fd8583cb9f8f4fa5" - integrity sha512-0JkslTmo8l/sIoluCCUaXwEgG8mmOHoR+bEdGBmcy97GLD3ux4TowItulF9aLG3VmJCpJNJF579bp7zik5R/Qw== +"@abp/clipboard@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.0.tgz#9c9f95c40639cabe89e6bc86ee0f33c853321225" + integrity sha512-WGonC5Hp4FCUBxevIt180QWIqOri0eO//mlRLBqj7gvo7H6zt5f4t90XKF24ZYWXjx7bCbIQQFt5t5ByeqdcJg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" clipboard "^2.0.6" -"@abp/codemirror@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-3.2.0-rc.2.tgz#d4e30620bd43d9f93e46f56ce583a8b8e75c8b41" - integrity sha512-wvWixzZsxgifwRucGpd0jr3VsEMHgVVr4pKpvVYegn6mVbah4XofBUPqMYRbCFIXVI3aKfFkstr3NnJ8jFdtng== +"@abp/codemirror@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/codemirror/-/codemirror-3.2.0.tgz#b9604d31591522b3c3c140830444422f9742c9d7" + integrity sha512-Qv/+g6NSsv5M3puE3MgF17JPvWytkG4PDMyEX8cf8DOe2FCb3p44EbFyN6sqMY5l621S7fhjIRJfMAZ9I5FcZQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" codemirror "^5.54.0" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/highlight.js@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-3.2.0-rc.2.tgz#7bbdedbbe5f5396aebd2806c93b992086f7f7947" - integrity sha512-7pBS45whS/i1jJddZ+iVVpwdCFlM7gnqLX8cj6it8AC+xXh6nv+1OVw+IzDx3qlUiFHTCLetTZLm8KnM6Tfd6A== +"@abp/highlight.js@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/highlight.js/-/highlight.js-3.2.0.tgz#b180ef024744599a647b942c278eefd58722280e" + integrity sha512-Hcc2RbjqbmIZWaKfWs/6utpwl5Ehc/tMC9hG1m61uXwO+3ISif5MCb1GQ1i2ycFJJRumdHgfm2tFAyGXGS9Z6Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/markdown-it@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-3.2.0-rc.2.tgz#e45d18dc2334eee17b93395718481de9feae8aa9" - integrity sha512-8gQDcmwZ9VCexp49EKV8Vtxi8I/KyMX8Kgma7XJWt0uot9lq2PnodMhSAz4YCs8OYDFO7PR+wHwQDU4LnTZphw== +"@abp/markdown-it@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/markdown-it/-/markdown-it-3.2.0.tgz#6fdd0b7f43bffce569908ba907c85f351ff89164" + integrity sha512-dGyM9Zdj21Pf08KY/X2lYtDr+lMX8v6TPHMKQVpgkDQ3/fzWDcg0MAr4CWUpg+BGLIhpwDWyKVBI/nQtEG/ihg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" markdown-it "^11.0.0" -"@abp/owl.carousel@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-3.2.0-rc.2.tgz#33d4890d1353db5b8604179f5904b3d1cd9954b2" - integrity sha512-kfMbwiAVZw0pegQVBtwT9ipuwijbIV2fGRJtoIEfKaexokwqTASTyZuPKkOPmE3PZd1gLdBPmCwCq/wXcwKG3A== +"@abp/owl.carousel@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/owl.carousel/-/owl.carousel-3.2.0.tgz#dd4c0c0bd9b4cc033577fd885fa10ab4670ccaf1" + integrity sha512-bxVkjkW1gWTSFuyM1iqHY8esTf+65e/tUZIDf+El0/xLbVkygeAZZtumMnwkizCAzWifBpQSd3QgGkY+wtabVw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" owl.carousel "^2.3.4" -"@abp/prismjs@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.0-rc.2.tgz#da9073c9ee86a5d2b5970ee39a03b6eccd5ebac5" - integrity sha512-siResQWNtG5V6Q1xqY9S1wONIgKhKge5Oa0qTHjdljntZSvNTaEduFLW33YPMooAM3Ig6Gwlk8yvt+8ZOdGyVQ== +"@abp/prismjs@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.0.tgz#11c7c3023f11097a3eb26d8a0c04f7fa39d9531b" + integrity sha512-OafE/K8rC7popNQDh1J97AtPuxVeAFWh/msfHE3K5nmdYABpl8U7190ITw5COcVjjFLCEONpkkhfN/9ZdAQ8fQ== dependencies: - "@abp/clipboard" "~3.2.0-rc.2" - "@abp/core" "~3.2.0-rc.2" + "@abp/clipboard" "~3.2.0" + "@abp/core" "~3.2.0" prismjs "^1.20.0" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/tui-editor@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-3.2.0-rc.2.tgz#60d1e6b5c4e97eeccd0a91902e2c570a0fb5682d" - integrity sha512-QxEbeL/kxqvPL7tRk9jqOAI5kzWKenCcdC24HhVgvY09AQQzMQYCjdaZkevsbnX8E5ZADEnuBwWJfy7CQYMPVQ== +"@abp/tui-editor@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/tui-editor/-/tui-editor-3.2.0.tgz#025d3348db0aa9f90aa01c49010a15227e029cc0" + integrity sha512-8dKALM8tRuMdoa1WNOekiwAdDwFAMjyf9wy3FiWLX/oyJOkQhRyxsT455TxQ2yt7pTDiY3DrYyF1xeqwxbGoRw== dependencies: - "@abp/codemirror" "~3.2.0-rc.2" - "@abp/highlight.js" "~3.2.0-rc.2" - "@abp/jquery" "~3.2.0-rc.2" - "@abp/markdown-it" "~3.2.0-rc.2" + "@abp/codemirror" "~3.2.0" + "@abp/highlight.js" "~3.2.0" + "@abp/jquery" "~3.2.0" + "@abp/markdown-it" "~3.2.0" tui-editor "^1.4.10" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json index c7882356b7..32abffa6e8 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/package.json @@ -3,6 +3,6 @@ "name": "client-simulation-web", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" } } \ No newline at end of file diff --git a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock index f482556466..972be20fa8 100644 --- a/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock +++ b/modules/client-simulation/demo/Volo.ClientSimulation.Demo/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/angular/package.json b/modules/cms-kit/angular/package.json index 888461cb28..3c883b278e 100644 --- a/modules/cms-kit/angular/package.json +++ b/modules/cms-kit/angular/package.json @@ -15,11 +15,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~3.2.0-rc.2", - "@abp/ng.identity": "~3.2.0-rc.2", - "@abp/ng.setting-management": "~3.2.0-rc.2", - "@abp/ng.tenant-management": "~3.2.0-rc.2", - "@abp/ng.theme.basic": "~3.2.0-rc.2", + "@abp/ng.account": "~3.2.0", + "@abp/ng.identity": "~3.2.0", + "@abp/ng.setting-management": "~3.2.0", + "@abp/ng.tenant-management": "~3.2.0", + "@abp/ng.theme.basic": "~3.2.0", "@angular/animations": "~10.0.0", "@angular/common": "~10.0.0", "@angular/compiler": "~10.0.0", diff --git a/modules/cms-kit/angular/projects/cms-kit/package.json b/modules/cms-kit/angular/projects/cms-kit/package.json index 5525dc9216..1806d9cad0 100644 --- a/modules/cms-kit/angular/projects/cms-kit/package.json +++ b/modules/cms-kit/angular/projects/cms-kit/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": "^9.1.11", "@angular/core": "^9.1.11", - "@abp/ng.core": ">=3.2.0-rc.2", - "@abp/ng.theme.shared": ">=3.2.0-rc.2" + "@abp/ng.core": ">=3.2.0", + "@abp/ng.theme.shared": ">=3.2.0" }, "dependencies": { "tslib": "^2.0.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json index 35d97dedec..fba2dab1f7 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock index cd75357668..72a5d2df3d 100644 --- a/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json index 89e2d444b3..9b79ab6170 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock index 3b540c3620..a37f397509 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json index 89e2d444b3..9b79ab6170 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" } } \ No newline at end of file diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock index 9ef4b570e9..1a8ccc322d 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/modules/docs/app/VoloDocs.Web/package.json b/modules/docs/app/VoloDocs.Web/package.json index d084157d70..3c775e0c73 100644 --- a/modules/docs/app/VoloDocs.Web/package.json +++ b/modules/docs/app/VoloDocs.Web/package.json @@ -3,7 +3,7 @@ "name": "volo.docstestapp", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2", - "@abp/docs": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0", + "@abp/docs": "^3.2.0" } } diff --git a/modules/docs/app/VoloDocs.Web/yarn.lock b/modules/docs/app/VoloDocs.Web/yarn.lock index 67945d6f3c..d3ad70f70e 100644 --- a/modules/docs/app/VoloDocs.Web/yarn.lock +++ b/modules/docs/app/VoloDocs.Web/yarn.lock @@ -2,45 +2,45 @@ # yarn lockfile v1 -"@abp/anchor-js@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-3.2.0-rc.2.tgz#0fc8411ad629fcfa773267b289d293aba666f9a5" - integrity sha512-3Nq3fRkOa5Voe2gFeFquH7/p4T6hKstO130efdWvur2Cwu7V0PDc8UDmEJZZJhEIqqkEqFhjGxaH10B04Krl3Q== +"@abp/anchor-js@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/anchor-js/-/anchor-js-3.2.0.tgz#df7e4483d2fbc9c3160031e42e6b27fff5d24d7b" + integrity sha512-rA1H6YWvS4bqGevdGM9H+D84ESh+Ka9eg7RzGoWyP4yK+/+Kgj8aOXPXtUrYlETfGwqg4dXQ1iu+AQUELcOaMQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" anchor-js "^4.2.2" -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -49,181 +49,181 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/clipboard@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.0-rc.2.tgz#5b770b15259f002348de5a26fd8583cb9f8f4fa5" - integrity sha512-0JkslTmo8l/sIoluCCUaXwEgG8mmOHoR+bEdGBmcy97GLD3ux4TowItulF9aLG3VmJCpJNJF579bp7zik5R/Qw== +"@abp/clipboard@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/clipboard/-/clipboard-3.2.0.tgz#9c9f95c40639cabe89e6bc86ee0f33c853321225" + integrity sha512-WGonC5Hp4FCUBxevIt180QWIqOri0eO//mlRLBqj7gvo7H6zt5f4t90XKF24ZYWXjx7bCbIQQFt5t5ByeqdcJg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" clipboard "^2.0.6" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/docs@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-3.2.0-rc.2.tgz#17e63ef37b87a27079f54cce9a5edc0ac035bf33" - integrity sha512-N4Xho0VZ2h31ILDTKz9Z/bUG5ZOfBl0tbMTEeMB7YOrcJiUyFXzYgVWhip8O+MFZqwm+/RHAwZR2G+EoiNnUfw== +"@abp/docs@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/docs/-/docs-3.2.0.tgz#f4b5284af7ebbd1f5b9b741ebfb61ac2fd71fa4a" + integrity sha512-ZrCUHjrTba82NJRwZYUUyLxWIp6tu8ZdHpq1vnlfr5rZ+5m1vAx0dRi0VY3x50ZifIE65cqoI91F32fHYiE8KA== dependencies: - "@abp/anchor-js" "~3.2.0-rc.2" - "@abp/clipboard" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/popper.js" "~3.2.0-rc.2" - "@abp/prismjs" "~3.2.0-rc.2" + "@abp/anchor-js" "~3.2.0" + "@abp/clipboard" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/popper.js" "~3.2.0" + "@abp/prismjs" "~3.2.0" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/popper.js@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-3.2.0-rc.2.tgz#4f4c6599e50f8f43a210282c0226420fcb98a104" - integrity sha512-jlnUKvIP4A2jmsNdqD55Sfhg3lbwMdxTitN59lx8QUfS4L7sPKBXc26BmWV1KsdJVvws7yiJd1NhN1OCORDZJQ== +"@abp/popper.js@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/popper.js/-/popper.js-3.2.0.tgz#2b1c078ad56a8e80e4030154b0e30f9e07a5e103" + integrity sha512-mdmx6qrkZvOKYBD9n0cblMKygWYprn9Mw8BB468oV/vf6izzGYgiOsC2dtwXLrVsELIaPQMZZbKVeeyPxgiH0Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" popper.js "^1.16.0" -"@abp/prismjs@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.0-rc.2.tgz#da9073c9ee86a5d2b5970ee39a03b6eccd5ebac5" - integrity sha512-siResQWNtG5V6Q1xqY9S1wONIgKhKge5Oa0qTHjdljntZSvNTaEduFLW33YPMooAM3Ig6Gwlk8yvt+8ZOdGyVQ== +"@abp/prismjs@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/prismjs/-/prismjs-3.2.0.tgz#11c7c3023f11097a3eb26d8a0c04f7fa39d9531b" + integrity sha512-OafE/K8rC7popNQDh1J97AtPuxVeAFWh/msfHE3K5nmdYABpl8U7190ITw5COcVjjFLCEONpkkhfN/9ZdAQ8fQ== dependencies: - "@abp/clipboard" "~3.2.0-rc.2" - "@abp/core" "~3.2.0-rc.2" + "@abp/clipboard" "~3.2.0" + "@abp/core" "~3.2.0" prismjs "^1.20.0" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/npm/lerna.json b/npm/lerna.json index c399610076..0dc2807678 100644 --- a/npm/lerna.json +++ b/npm/lerna.json @@ -1,5 +1,5 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "packages": [ "packs/*" ], diff --git a/npm/ng-packs/lerna.version.json b/npm/ng-packs/lerna.version.json index 189f0c6a45..35ec182a4a 100644 --- a/npm/ng-packs/lerna.version.json +++ b/npm/ng-packs/lerna.version.json @@ -1,5 +1,5 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "packages": [ "packages/*" ], diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 2be429f268..0ad3879ba5 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -25,17 +25,17 @@ "postinstall": "npm run compile:ivy" }, "devDependencies": { - "@abp/ng.account": "~3.2.0-rc.2", - "@abp/ng.core": "~3.2.0-rc.2", - "@abp/ng.feature-management": "~3.2.0-rc.2", - "@abp/ng.identity": "~3.2.0-rc.2", - "@abp/ng.permission-management": "~3.2.0-rc.2", - "@abp/ng.schematics": "~3.2.0-rc.2", - "@abp/ng.setting-management": "~3.2.0-rc.2", - "@abp/ng.tenant-management": "~3.2.0-rc.2", - "@abp/ng.theme.basic": "~3.2.0-rc.2", - "@abp/ng.theme.shared": "~3.2.0-rc.2", - "@abp/utils": "^3.2.0-rc.2", + "@abp/ng.account": "~3.2.0", + "@abp/ng.core": "~3.2.0", + "@abp/ng.feature-management": "~3.2.0", + "@abp/ng.identity": "~3.2.0", + "@abp/ng.permission-management": "~3.2.0", + "@abp/ng.schematics": "~3.2.0", + "@abp/ng.setting-management": "~3.2.0", + "@abp/ng.tenant-management": "~3.2.0", + "@abp/ng.theme.basic": "~3.2.0", + "@abp/ng.theme.shared": "~3.2.0", + "@abp/utils": "^3.2.0", "@angular-builders/jest": "^10.0.0", "@angular-devkit/build-angular": "~0.1001.2", "@angular-devkit/build-ng-packagr": "~0.1001.2", diff --git a/npm/ng-packs/packages/account/package.json b/npm/ng-packs/packages/account/package.json index c77c1cb1f5..e1ade0042b 100644 --- a/npm/ng-packs/packages/account/package.json +++ b/npm/ng-packs/packages/account/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.account", - "version": "3.2.0-rc.2", + "version": "3.2.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.2.0-rc.2", + "@abp/ng.theme.shared": "~3.2.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/components/package.json b/npm/ng-packs/packages/components/package.json index ed73fbd9de..009a85f312 100644 --- a/npm/ng-packs/packages/components/package.json +++ b/npm/ng-packs/packages/components/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.components", - "version": "3.2.0-rc.2", + "version": "3.2.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "peerDependencies": { - "@abp/ng.core": ">=3.2.0-rc.2", + "@abp/ng.core": ">=3.2.0", "@ng-bootstrap/ng-bootstrap": ">=6.0.0" }, "dependencies": { diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index 58b7d6d087..494aa62d6f 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.core", - "version": "3.2.0-rc.2", + "version": "3.2.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/utils": "^3.2.0-rc.2", + "@abp/utils": "^3.2.0", "@angular/localize": "~10.0.10", "@ngxs/router-plugin": "^3.7.0", "@ngxs/storage-plugin": "^3.7.0", diff --git a/npm/ng-packs/packages/feature-management/package.json b/npm/ng-packs/packages/feature-management/package.json index 5fe64b1791..80ccfa562c 100644 --- a/npm/ng-packs/packages/feature-management/package.json +++ b/npm/ng-packs/packages/feature-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.feature-management", - "version": "3.2.0-rc.2", + "version": "3.2.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.2.0-rc.2", + "@abp/ng.theme.shared": "~3.2.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/identity/package.json b/npm/ng-packs/packages/identity/package.json index 471e553017..d0dc3eb54c 100644 --- a/npm/ng-packs/packages/identity/package.json +++ b/npm/ng-packs/packages/identity/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.identity", - "version": "3.2.0-rc.2", + "version": "3.2.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.permission-management": "~3.2.0-rc.2", - "@abp/ng.theme.shared": "~3.2.0-rc.2", + "@abp/ng.permission-management": "~3.2.0", + "@abp/ng.theme.shared": "~3.2.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/permission-management/package.json b/npm/ng-packs/packages/permission-management/package.json index c49d37f554..1d5a965074 100644 --- a/npm/ng-packs/packages/permission-management/package.json +++ b/npm/ng-packs/packages/permission-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.permission-management", - "version": "3.2.0-rc.2", + "version": "3.2.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.2.0-rc.2", + "@abp/ng.theme.shared": "~3.2.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/schematics/package.json b/npm/ng-packs/packages/schematics/package.json index 20d4447275..e404d5cedd 100644 --- a/npm/ng-packs/packages/schematics/package.json +++ b/npm/ng-packs/packages/schematics/package.json @@ -1,6 +1,6 @@ { "name": "@abp/ng.schematics", - "version": "3.2.0-rc.2", + "version": "3.2.0", "description": "Schematics that works with ABP Backend", "keywords": [ "schematics" diff --git a/npm/ng-packs/packages/setting-management/package.json b/npm/ng-packs/packages/setting-management/package.json index 1801d460bc..7927944a5a 100644 --- a/npm/ng-packs/packages/setting-management/package.json +++ b/npm/ng-packs/packages/setting-management/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.setting-management", - "version": "3.2.0-rc.2", + "version": "3.2.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.2.0-rc.2", + "@abp/ng.theme.shared": "~3.2.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/tenant-management/package.json b/npm/ng-packs/packages/tenant-management/package.json index e27d018fc0..346263467b 100644 --- a/npm/ng-packs/packages/tenant-management/package.json +++ b/npm/ng-packs/packages/tenant-management/package.json @@ -1,14 +1,14 @@ { "name": "@abp/ng.tenant-management", - "version": "3.2.0-rc.2", + "version": "3.2.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.feature-management": "~3.2.0-rc.2", - "@abp/ng.theme.shared": "~3.2.0-rc.2", + "@abp/ng.feature-management": "~3.2.0", + "@abp/ng.theme.shared": "~3.2.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-basic/package.json b/npm/ng-packs/packages/theme-basic/package.json index 6cfd129be2..c571438d84 100644 --- a/npm/ng-packs/packages/theme-basic/package.json +++ b/npm/ng-packs/packages/theme-basic/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.basic", - "version": "3.2.0-rc.2", + "version": "3.2.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.theme.shared": "~3.2.0-rc.2", + "@abp/ng.theme.shared": "~3.2.0", "tslib": "^2.0.0" }, "publishConfig": { diff --git a/npm/ng-packs/packages/theme-shared/package.json b/npm/ng-packs/packages/theme-shared/package.json index 74b482a40d..eed100dff9 100644 --- a/npm/ng-packs/packages/theme-shared/package.json +++ b/npm/ng-packs/packages/theme-shared/package.json @@ -1,13 +1,13 @@ { "name": "@abp/ng.theme.shared", - "version": "3.2.0-rc.2", + "version": "3.2.0", "homepage": "https://abp.io", "repository": { "type": "git", "url": "https://github.com/abpframework/abp.git" }, "dependencies": { - "@abp/ng.core": "~3.2.0-rc.2", + "@abp/ng.core": "~3.2.0", "@fortawesome/fontawesome-free": "^5.14.0", "@ng-bootstrap/ng-bootstrap": "^7.0.0", "@ngx-validate/core": "^0.0.11", diff --git a/npm/packs/anchor-js/package.json b/npm/packs/anchor-js/package.json index da7bd645b8..e19192bbd5 100644 --- a/npm/packs/anchor-js/package.json +++ b/npm/packs/anchor-js/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/anchor-js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "anchor-js": "^4.2.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json index 5c01d66e81..642eec4e55 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.basic/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/aspnetcore.mvc.ui.theme.basic", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.shared": "~3.2.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json index 435970714c..900bccfb31 100644 --- a/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json +++ b/npm/packs/aspnetcore.mvc.ui.theme.shared/package.json @@ -1,24 +1,24 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/aspnetcore.mvc.ui.theme.shared", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui": "~3.2.0-rc.2", - "@abp/bootstrap": "~3.2.0-rc.2", - "@abp/bootstrap-datepicker": "~3.2.0-rc.2", - "@abp/datatables.net-bs4": "~3.2.0-rc.2", - "@abp/font-awesome": "~3.2.0-rc.2", - "@abp/jquery-form": "~3.2.0-rc.2", - "@abp/jquery-validation-unobtrusive": "~3.2.0-rc.2", - "@abp/lodash": "~3.2.0-rc.2", - "@abp/luxon": "~3.2.0-rc.2", - "@abp/malihu-custom-scrollbar-plugin": "~3.2.0-rc.2", - "@abp/select2": "~3.2.0-rc.2", - "@abp/sweetalert": "~3.2.0-rc.2", - "@abp/timeago": "~3.2.0-rc.2", - "@abp/toastr": "~3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui": "~3.2.0", + "@abp/bootstrap": "~3.2.0", + "@abp/bootstrap-datepicker": "~3.2.0", + "@abp/datatables.net-bs4": "~3.2.0", + "@abp/font-awesome": "~3.2.0", + "@abp/jquery-form": "~3.2.0", + "@abp/jquery-validation-unobtrusive": "~3.2.0", + "@abp/lodash": "~3.2.0", + "@abp/luxon": "~3.2.0", + "@abp/malihu-custom-scrollbar-plugin": "~3.2.0", + "@abp/select2": "~3.2.0", + "@abp/sweetalert": "~3.2.0", + "@abp/timeago": "~3.2.0", + "@abp/toastr": "~3.2.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/aspnetcore.mvc.ui/package.json b/npm/packs/aspnetcore.mvc.ui/package.json index 545eb74ab1..6bbaad44eb 100644 --- a/npm/packs/aspnetcore.mvc.ui/package.json +++ b/npm/packs/aspnetcore.mvc.ui/package.json @@ -1,5 +1,5 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/aspnetcore.mvc.ui", "publishConfig": { "access": "public" diff --git a/npm/packs/blogging/package.json b/npm/packs/blogging/package.json index 843591c10f..ec72ff3331 100644 --- a/npm/packs/blogging/package.json +++ b/npm/packs/blogging/package.json @@ -1,14 +1,14 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/blogging", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.shared": "~3.2.0-rc.2", - "@abp/owl.carousel": "~3.2.0-rc.2", - "@abp/prismjs": "~3.2.0-rc.2", - "@abp/tui-editor": "~3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.shared": "~3.2.0", + "@abp/owl.carousel": "~3.2.0", + "@abp/prismjs": "~3.2.0", + "@abp/tui-editor": "~3.2.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/bootstrap-datepicker/package.json b/npm/packs/bootstrap-datepicker/package.json index 83afa518ee..dde7632f9b 100644 --- a/npm/packs/bootstrap-datepicker/package.json +++ b/npm/packs/bootstrap-datepicker/package.json @@ -1,5 +1,5 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/bootstrap-datepicker", "publishConfig": { "access": "public" diff --git a/npm/packs/bootstrap/package.json b/npm/packs/bootstrap/package.json index a6c0cd8c36..f85cb12d85 100644 --- a/npm/packs/bootstrap/package.json +++ b/npm/packs/bootstrap/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/bootstrap", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "bootstrap": "^4.5.0", "bootstrap-v4-rtl": "4.4.1-2" }, diff --git a/npm/packs/chart.js/package.json b/npm/packs/chart.js/package.json index 0864e7b0d3..7ab437b75c 100644 --- a/npm/packs/chart.js/package.json +++ b/npm/packs/chart.js/package.json @@ -1,5 +1,5 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/chart.js", "publishConfig": { "access": "public" diff --git a/npm/packs/clipboard/package.json b/npm/packs/clipboard/package.json index 56b3efbd21..46c477a0c7 100644 --- a/npm/packs/clipboard/package.json +++ b/npm/packs/clipboard/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/clipboard", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "clipboard": "^2.0.6" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/codemirror/package.json b/npm/packs/codemirror/package.json index 0041199ffb..0d2c6cbd12 100644 --- a/npm/packs/codemirror/package.json +++ b/npm/packs/codemirror/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/codemirror", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "codemirror": "^5.54.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/core/package.json b/npm/packs/core/package.json index d2d87d8f85..2e70056ee8 100644 --- a/npm/packs/core/package.json +++ b/npm/packs/core/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/core", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/utils": "^3.2.0-rc.2" + "@abp/utils": "^3.2.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/cropperjs/package.json b/npm/packs/cropperjs/package.json index 61b028a349..8730203935 100644 --- a/npm/packs/cropperjs/package.json +++ b/npm/packs/cropperjs/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/cropperjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "cropperjs": "^1.5.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/datatables.net-bs4/package.json b/npm/packs/datatables.net-bs4/package.json index 95d1e24b01..f0ba9af1b8 100644 --- a/npm/packs/datatables.net-bs4/package.json +++ b/npm/packs/datatables.net-bs4/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/datatables.net-bs4", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/datatables.net": "~3.2.0-rc.2", + "@abp/datatables.net": "~3.2.0", "datatables.net-bs4": "^1.10.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/datatables.net/package.json b/npm/packs/datatables.net/package.json index dca81c797e..6af41c035f 100644 --- a/npm/packs/datatables.net/package.json +++ b/npm/packs/datatables.net/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/datatables.net", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0-rc.2", + "@abp/jquery": "~3.2.0", "datatables.net": "^1.10.21" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/docs/package.json b/npm/packs/docs/package.json index e69e963d60..0f74d41885 100644 --- a/npm/packs/docs/package.json +++ b/npm/packs/docs/package.json @@ -1,15 +1,15 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/docs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/anchor-js": "~3.2.0-rc.2", - "@abp/clipboard": "~3.2.0-rc.2", - "@abp/malihu-custom-scrollbar-plugin": "~3.2.0-rc.2", - "@abp/popper.js": "~3.2.0-rc.2", - "@abp/prismjs": "~3.2.0-rc.2" + "@abp/anchor-js": "~3.2.0", + "@abp/clipboard": "~3.2.0", + "@abp/malihu-custom-scrollbar-plugin": "~3.2.0", + "@abp/popper.js": "~3.2.0", + "@abp/prismjs": "~3.2.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/flag-icon-css/package.json b/npm/packs/flag-icon-css/package.json index 5ba331e800..4bbedfd30b 100644 --- a/npm/packs/flag-icon-css/package.json +++ b/npm/packs/flag-icon-css/package.json @@ -1,5 +1,5 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/flag-icon-css", "publishConfig": { "access": "public" diff --git a/npm/packs/font-awesome/package.json b/npm/packs/font-awesome/package.json index ec682426c7..6039de5eec 100644 --- a/npm/packs/font-awesome/package.json +++ b/npm/packs/font-awesome/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/font-awesome", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "@fortawesome/fontawesome-free": "^5.13.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/highlight.js/package.json b/npm/packs/highlight.js/package.json index 7db03d42c9..11d950f58e 100644 --- a/npm/packs/highlight.js/package.json +++ b/npm/packs/highlight.js/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/highlight.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2" + "@abp/core": "~3.2.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/npm/packs/jquery-form/package.json b/npm/packs/jquery-form/package.json index 01517e902b..7f2691f24f 100644 --- a/npm/packs/jquery-form/package.json +++ b/npm/packs/jquery-form/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/jquery-form", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0-rc.2", + "@abp/jquery": "~3.2.0", "jquery-form": "^4.3.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery-validation-unobtrusive/package.json b/npm/packs/jquery-validation-unobtrusive/package.json index 0010af7c88..7e1810082d 100644 --- a/npm/packs/jquery-validation-unobtrusive/package.json +++ b/npm/packs/jquery-validation-unobtrusive/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/jquery-validation-unobtrusive", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery-validation": "~3.2.0-rc.2", + "@abp/jquery-validation": "~3.2.0", "jquery-validation-unobtrusive": "^3.2.11" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery-validation/package.json b/npm/packs/jquery-validation/package.json index 4337942550..453ed73717 100644 --- a/npm/packs/jquery-validation/package.json +++ b/npm/packs/jquery-validation/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/jquery-validation", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0-rc.2", + "@abp/jquery": "~3.2.0", "jquery-validation": "^1.19.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jquery/package.json b/npm/packs/jquery/package.json index 64f982c936..26bc94fa2c 100644 --- a/npm/packs/jquery/package.json +++ b/npm/packs/jquery/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/jquery", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "jquery": "~3.5.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/jstree/package.json b/npm/packs/jstree/package.json index 98302cc6c9..f617e79eb3 100644 --- a/npm/packs/jstree/package.json +++ b/npm/packs/jstree/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/jstree", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0-rc.2", + "@abp/jquery": "~3.2.0", "jstree": "^3.3.9" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/lodash/package.json b/npm/packs/lodash/package.json index 8e46a551b7..70079af1e2 100644 --- a/npm/packs/lodash/package.json +++ b/npm/packs/lodash/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/lodash", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "lodash": "^4.17.15" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/luxon/package.json b/npm/packs/luxon/package.json index c0a5b8e2b1..c136a899ba 100644 --- a/npm/packs/luxon/package.json +++ b/npm/packs/luxon/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/luxon", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "luxon": "^1.24.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/malihu-custom-scrollbar-plugin/package.json b/npm/packs/malihu-custom-scrollbar-plugin/package.json index fc19016a58..cea5d3c47f 100644 --- a/npm/packs/malihu-custom-scrollbar-plugin/package.json +++ b/npm/packs/malihu-custom-scrollbar-plugin/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/malihu-custom-scrollbar-plugin", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "malihu-custom-scrollbar-plugin": "^3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/markdown-it/package.json b/npm/packs/markdown-it/package.json index 7e939b0566..23412e06b2 100644 --- a/npm/packs/markdown-it/package.json +++ b/npm/packs/markdown-it/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/markdown-it", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "markdown-it": "^11.0.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/owl.carousel/package.json b/npm/packs/owl.carousel/package.json index 1726b513de..bc56aa7c46 100644 --- a/npm/packs/owl.carousel/package.json +++ b/npm/packs/owl.carousel/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/owl.carousel", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "owl.carousel": "^2.3.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/popper.js/package.json b/npm/packs/popper.js/package.json index 8e8631aa95..988a522538 100644 --- a/npm/packs/popper.js/package.json +++ b/npm/packs/popper.js/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/popper.js", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "popper.js": "^1.16.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/prismjs/package.json b/npm/packs/prismjs/package.json index 2ae777fcd4..b5842be17b 100644 --- a/npm/packs/prismjs/package.json +++ b/npm/packs/prismjs/package.json @@ -1,12 +1,12 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/prismjs", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~3.2.0-rc.2", - "@abp/core": "~3.2.0-rc.2", + "@abp/clipboard": "~3.2.0", + "@abp/core": "~3.2.0", "prismjs": "^1.20.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/select2/package.json b/npm/packs/select2/package.json index 392a6d81dd..96ff6b4cbe 100644 --- a/npm/packs/select2/package.json +++ b/npm/packs/select2/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/select2", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "select2": "^4.0.13" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/signalr/package.json b/npm/packs/signalr/package.json index a43a72f618..3bfd1169cc 100644 --- a/npm/packs/signalr/package.json +++ b/npm/packs/signalr/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/signalr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "@microsoft/signalr": "~3.1.5" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/star-rating-svg/package.json b/npm/packs/star-rating-svg/package.json index 4c5ac00e7f..ca198bb5fe 100644 --- a/npm/packs/star-rating-svg/package.json +++ b/npm/packs/star-rating-svg/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/star-rating-svg", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0-rc.2", + "@abp/jquery": "~3.2.0", "star-rating-svg": "^3.5.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/sweetalert/package.json b/npm/packs/sweetalert/package.json index 91fbec3fc3..019edcbac6 100644 --- a/npm/packs/sweetalert/package.json +++ b/npm/packs/sweetalert/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/sweetalert", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "sweetalert": "^2.1.2" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/timeago/package.json b/npm/packs/timeago/package.json index 5507793481..303c3adc76 100644 --- a/npm/packs/timeago/package.json +++ b/npm/packs/timeago/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/timeago", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0-rc.2", + "@abp/jquery": "~3.2.0", "timeago": "^1.6.7" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/toastr/package.json b/npm/packs/toastr/package.json index 61e55facfc..bf3827df65 100644 --- a/npm/packs/toastr/package.json +++ b/npm/packs/toastr/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/toastr", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/jquery": "~3.2.0-rc.2", + "@abp/jquery": "~3.2.0", "toastr": "^2.1.4" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/tui-editor/package.json b/npm/packs/tui-editor/package.json index 5c39397dcf..b7460e54b8 100644 --- a/npm/packs/tui-editor/package.json +++ b/npm/packs/tui-editor/package.json @@ -1,14 +1,14 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/tui-editor", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/codemirror": "~3.2.0-rc.2", - "@abp/highlight.js": "~3.2.0-rc.2", - "@abp/jquery": "~3.2.0-rc.2", - "@abp/markdown-it": "~3.2.0-rc.2", + "@abp/codemirror": "~3.2.0", + "@abp/highlight.js": "~3.2.0", + "@abp/jquery": "~3.2.0", + "@abp/markdown-it": "~3.2.0", "tui-editor": "^1.4.10" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/uppy/package.json b/npm/packs/uppy/package.json index 2bf4722eb4..7286abc02a 100644 --- a/npm/packs/uppy/package.json +++ b/npm/packs/uppy/package.json @@ -1,11 +1,11 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/uppy", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/core": "~3.2.0-rc.2", + "@abp/core": "~3.2.0", "uppy": "^1.16.1" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index 483e9a1590..2e4788bed1 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "3.2.0-rc.2", + "version": "3.2.0", "scripts": { "prepublish": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", diff --git a/npm/packs/virtual-file-explorer/package.json b/npm/packs/virtual-file-explorer/package.json index b06b1c6b4a..20605a9942 100644 --- a/npm/packs/virtual-file-explorer/package.json +++ b/npm/packs/virtual-file-explorer/package.json @@ -1,12 +1,12 @@ { - "version": "3.2.0-rc.2", + "version": "3.2.0", "name": "@abp/virtual-file-explorer", "publishConfig": { "access": "public" }, "dependencies": { - "@abp/clipboard": "~3.2.0-rc.2", - "@abp/prismjs": "~3.2.0-rc.2" + "@abp/clipboard": "~3.2.0", + "@abp/prismjs": "~3.2.0" }, "gitHead": "bb4ea17d5996f01889134c138d00b6c8f858a431" } diff --git a/templates/app/angular/package.json b/templates/app/angular/package.json index df7c39a260..68a90c79ea 100644 --- a/templates/app/angular/package.json +++ b/templates/app/angular/package.json @@ -12,11 +12,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~3.2.0-rc.2", - "@abp/ng.identity": "~3.2.0-rc.2", - "@abp/ng.setting-management": "~3.2.0-rc.2", - "@abp/ng.tenant-management": "~3.2.0-rc.2", - "@abp/ng.theme.basic": "~3.2.0-rc.2", + "@abp/ng.account": "~3.2.0", + "@abp/ng.identity": "~3.2.0", + "@abp/ng.setting-management": "~3.2.0", + "@abp/ng.tenant-management": "~3.2.0", + "@abp/ng.theme.basic": "~3.2.0", "@angular/animations": "~10.1.2", "@angular/common": "~10.1.2", "@angular/compiler": "~10.1.2", @@ -30,7 +30,7 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@abp/ng.schematics": "~3.2.0-rc.2", + "@abp/ng.schematics": "~3.2.0", "@angular-devkit/build-angular": "~0.1001.2", "@angular-devkit/build-ng-packagr": "~0.1001.2", "@angular/cli": "~10.1.2", diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json index 89e2d444b3..9b79ab6170 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock index 72db4ebbce..523197e919 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.HttpApi.HostWithIds/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json index 35d97dedec..fba2dab1f7 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index cd75357668..72a5d2df3d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json index 89e2d444b3..9b79ab6170 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock index cd75357668..72a5d2df3d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json index 89e2d444b3..9b79ab6170 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" } } \ No newline at end of file diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock index 72db4ebbce..523197e919 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/templates/module/angular/package.json b/templates/module/angular/package.json index a4240fc61b..328dd7f8e0 100644 --- a/templates/module/angular/package.json +++ b/templates/module/angular/package.json @@ -15,11 +15,11 @@ }, "private": true, "dependencies": { - "@abp/ng.account": "~3.2.0-rc.2", - "@abp/ng.identity": "~3.2.0-rc.2", - "@abp/ng.setting-management": "~3.2.0-rc.2", - "@abp/ng.tenant-management": "~3.2.0-rc.2", - "@abp/ng.theme.basic": "~3.2.0-rc.2", + "@abp/ng.account": "~3.2.0", + "@abp/ng.identity": "~3.2.0", + "@abp/ng.setting-management": "~3.2.0", + "@abp/ng.tenant-management": "~3.2.0", + "@abp/ng.theme.basic": "~3.2.0", "@angular/animations": "~10.1.2", "@angular/common": "~10.1.2", "@angular/compiler": "~10.1.2", @@ -33,7 +33,7 @@ "zone.js": "~0.10.2" }, "devDependencies": { - "@abp/ng.schematics": "~3.2.0-rc.2", + "@abp/ng.schematics": "~3.2.0", "@angular-devkit/build-angular": "~0.1001.2", "@angular-devkit/build-ng-packagr": "~0.1001.2", "@angular/cli": "~10.1.2", diff --git a/templates/module/angular/projects/my-project-name/package.json b/templates/module/angular/projects/my-project-name/package.json index 60b5503f3c..5393668be9 100644 --- a/templates/module/angular/projects/my-project-name/package.json +++ b/templates/module/angular/projects/my-project-name/package.json @@ -4,8 +4,8 @@ "peerDependencies": { "@angular/common": "^9.1.11", "@angular/core": "^9.1.11", - "@abp/ng.core": ">=3.2.0-rc.2", - "@abp/ng.theme.shared": ">=3.2.0-rc.2" + "@abp/ng.core": ">=3.2.0", + "@abp/ng.theme.shared": ">=3.2.0" }, "dependencies": { "tslib": "^2.0.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json index 35d97dedec..fba2dab1f7 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/package.json @@ -3,6 +3,6 @@ "name": "my-app-identityserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock index cd75357668..72a5d2df3d 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.IdentityServer/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json index 89e2d444b3..9b79ab6170 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock index cd75357668..72a5d2df3d 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Host/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json index 89e2d444b3..9b79ab6170 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/package.json @@ -3,6 +3,6 @@ "name": "my-app", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0-rc.2" + "@abp/aspnetcore.mvc.ui.theme.basic": "^3.2.0" } } \ No newline at end of file diff --git a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock index 9ef4b570e9..1a8ccc322d 100644 --- a/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock +++ b/templates/module/aspnet-core/host/MyCompanyName.MyProjectName.Web.Unified/yarn.lock @@ -2,37 +2,37 @@ # yarn lockfile v1 -"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0-rc.2.tgz#c13c12f3e9350f4a9153ca04ea9b91891410f106" - integrity sha512-qUaOs14GqI2hauMP/LltrS+YUj/sHgnSyTqmCIdSA6AINcAxPj5JpTFSTzub66qmlo6PrDOp+wGbwiG+NURGjA== - dependencies: - "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0-rc.2.tgz#c785f00f7f6590024c40dd9f99d6b140a6fb817c" - integrity sha512-+9vHqD9oIxxmQI28tcbYxclMKOmeWR07JJn/w/2X7zEj2uE4ZnjFWroKsTSb6zvPLKxZi+Sh6SlrJ0xcOZJmvQ== - dependencies: - "@abp/aspnetcore.mvc.ui" "~3.2.0-rc.2" - "@abp/bootstrap" "~3.2.0-rc.2" - "@abp/bootstrap-datepicker" "~3.2.0-rc.2" - "@abp/datatables.net-bs4" "~3.2.0-rc.2" - "@abp/font-awesome" "~3.2.0-rc.2" - "@abp/jquery-form" "~3.2.0-rc.2" - "@abp/jquery-validation-unobtrusive" "~3.2.0-rc.2" - "@abp/lodash" "~3.2.0-rc.2" - "@abp/luxon" "~3.2.0-rc.2" - "@abp/malihu-custom-scrollbar-plugin" "~3.2.0-rc.2" - "@abp/select2" "~3.2.0-rc.2" - "@abp/sweetalert" "~3.2.0-rc.2" - "@abp/timeago" "~3.2.0-rc.2" - "@abp/toastr" "~3.2.0-rc.2" - -"@abp/aspnetcore.mvc.ui@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0-rc.2.tgz#0467845f12c38693a8e06d877b2e8c256588fbdc" - integrity sha512-ECXJXij6d32O4OkI3g8Z5CUGPlvqmXqIyMXoK80QlhtokbxEK+wZZyIZm3QXw//8XWDTF9ujW7eDaNBiVSR6vg== +"@abp/aspnetcore.mvc.ui.theme.basic@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.basic/-/aspnetcore.mvc.ui.theme.basic-3.2.0.tgz#207277419356a14f686421de0ee320fad0d6857f" + integrity sha512-4xn4BPQu9QL3sM47QtPNwOei9/fnRw3dXCL7vlJBCU70jL8911C6D/Pj/CBqCEMMVPI6M4GE7Ls4AwKTvgFeTw== + dependencies: + "@abp/aspnetcore.mvc.ui.theme.shared" "~3.2.0" + +"@abp/aspnetcore.mvc.ui.theme.shared@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui.theme.shared/-/aspnetcore.mvc.ui.theme.shared-3.2.0.tgz#bed24c1d28f6e85d58fa963911a09e8b2998c1b6" + integrity sha512-Ap1dPCvL7r31oFyi+3YPviFkDly5FZfWbHq2bURsEbscembpc6DOSfXehvuZ2BjqsZF3n/HX0Y1lX4irUqKqjg== + dependencies: + "@abp/aspnetcore.mvc.ui" "~3.2.0" + "@abp/bootstrap" "~3.2.0" + "@abp/bootstrap-datepicker" "~3.2.0" + "@abp/datatables.net-bs4" "~3.2.0" + "@abp/font-awesome" "~3.2.0" + "@abp/jquery-form" "~3.2.0" + "@abp/jquery-validation-unobtrusive" "~3.2.0" + "@abp/lodash" "~3.2.0" + "@abp/luxon" "~3.2.0" + "@abp/malihu-custom-scrollbar-plugin" "~3.2.0" + "@abp/select2" "~3.2.0" + "@abp/sweetalert" "~3.2.0" + "@abp/timeago" "~3.2.0" + "@abp/toastr" "~3.2.0" + +"@abp/aspnetcore.mvc.ui@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/aspnetcore.mvc.ui/-/aspnetcore.mvc.ui-3.2.0.tgz#01f80b9f663f4d95ceac733761833cf4648e92b5" + integrity sha512-NzH1UxEoE/FVT0LLjMNq5eSsiORLe5dE+aKr7jjbaxcuVr7QI7KI9ry6xWAZk+0cbGvsUAY0xqrMxxqiLpskxQ== dependencies: ansi-colors "^4.1.1" extend-object "^1.0.0" @@ -41,145 +41,145 @@ path "^0.12.7" rimraf "^3.0.2" -"@abp/bootstrap-datepicker@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0-rc.2.tgz#fbd33fc5dc675ab5356b24c15d8e2467e3aff3e0" - integrity sha512-gS2IhD4T/KK2xMtA/f7cpwD/TiGkHchXJxxGWpTYAQYHB0MEkf+nHXrNx7wH+KtNhJbXPf0VcC0ghOnDR1xoNA== +"@abp/bootstrap-datepicker@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap-datepicker/-/bootstrap-datepicker-3.2.0.tgz#0a1813d8a84dd6eb6cf647244a4a91900364deb1" + integrity sha512-w7YyA5TRZqGL3qYyArwfrRc4/qWQMT0BPYDOsGMrtPJZDWeZL7WPezuiIvKNdI71BfUq6XiA1+wwMfqjcClZ2g== dependencies: bootstrap-datepicker "^1.9.0" -"@abp/bootstrap@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0-rc.2.tgz#91a756303da1b7436b3c27f93597bc08cfa7fce0" - integrity sha512-UXBuAATzjoSWcCNETifBomu9YDWPb7jxpWeBVr2f4LQNpaLg+PjonVisYtlm83/EIxzZ294krCX43K4mLLkqzw== +"@abp/bootstrap@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/bootstrap/-/bootstrap-3.2.0.tgz#d249338b0151734f99b8e366aea6fc17d5ef9b37" + integrity sha512-hx9r7EGb1vJrHAdw3D8Cpudv++hrM4dKoKtOKnQbxGG+Q9vwVS6SKquVxJum+bEZWa1CgXvT6co0IDOlW3pDhg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" bootstrap "^4.5.0" bootstrap-v4-rtl "4.4.1-2" -"@abp/core@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0-rc.2.tgz#e9197ba392dcea16fd1543c65002807b7b2e63d0" - integrity sha512-d6DTWkvP9pr9gmxBxYd/UgLw/CR3C55DZXFThv76P0+KGEzuEKOybAWIr8+d7wClYXRKCigHNex7ecAvWXpN7g== +"@abp/core@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/core/-/core-3.2.0.tgz#e9f07bde581b07e1b904bec3b12e0ccfc2a50125" + integrity sha512-X3iWv8QxAbqKJMoTb3vfvwGYmD9uZ+p+zn5q5Hoybyq9fjEcevpkdX7OiLvO8M+NEwCKa81wtkvvM2BnEV6Igg== dependencies: - "@abp/utils" "^3.2.0-rc.2" + "@abp/utils" "^3.2.0" -"@abp/datatables.net-bs4@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0-rc.2.tgz#3e003126dd1bef827d06864cf9d01774d93dbf89" - integrity sha512-fsUaJVdx3BbgrN7q9dC85mW+YJap/vp7BWNX/t3TerLkLm5it6i7wNQKER5Tx94r+8TZ/VYc5jYpBEQxa02XCw== +"@abp/datatables.net-bs4@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net-bs4/-/datatables.net-bs4-3.2.0.tgz#8551c0ac5e29b037a86b141f41052e7a3038be89" + integrity sha512-i2LVTKAllgzhc21rb0GQ0YHtmOMyCT+6P3ZelqkoLdp56D63rVhdAOHrqjebrEHMehsuCUV2XH908kakXWIPXA== dependencies: - "@abp/datatables.net" "~3.2.0-rc.2" + "@abp/datatables.net" "~3.2.0" datatables.net-bs4 "^1.10.21" -"@abp/datatables.net@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0-rc.2.tgz#0c90543627f8fd56f92e374f286754116161a608" - integrity sha512-jMhv6fNfZ7vqtjS5Qmy8Sb3/SqbTX1sQQRKlEVGFDjBcFz3FQrUyAB2T0sdpQlebHrql739Wt/NzwT1tCKscpw== +"@abp/datatables.net@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/datatables.net/-/datatables.net-3.2.0.tgz#effd0ec603b15c0de2d1db993d1416b46f4e3146" + integrity sha512-6UX/WqdlRfb3BQ2cw7LbUlMimDXtx7rHanTTWq44g+Wc8fn4fVcYyo9RWCYYOd2MWm9pElEvuzG1AzaOamjW9Q== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" datatables.net "^1.10.21" -"@abp/font-awesome@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0-rc.2.tgz#4b8ab19530e757ec3ef1090c50328d12d39ef810" - integrity sha512-/SLu953KUoszJKm1+gFkosyP6RFIb4lyyVWjKmrBQ62P40jk4GrKFrGE9CHWtn2gGsdPiYUtT6fDxGxsGiiB8g== +"@abp/font-awesome@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/font-awesome/-/font-awesome-3.2.0.tgz#ad75daf1c084c2c6a0aeccc092057627ce898652" + integrity sha512-FAWBYWwg2ZtKO+0/lS/bc4YFnR7IehQ2Y+y1srIypgSY/739X4aUWb0YDW1tE0QrrFfQ//f16AyIKPynGl0T5Q== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" "@fortawesome/fontawesome-free" "^5.13.0" -"@abp/jquery-form@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0-rc.2.tgz#3134714e4c269877d8a3a9e293bb83262809c8fd" - integrity sha512-HhIDl0p66+vyGexwLE1wFg+2EkDy7FjOzao4a9319vfBs+qm16/mHAlDa1BqhymTZTt4vPLoFTvVCjX1ylD5Kw== +"@abp/jquery-form@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-form/-/jquery-form-3.2.0.tgz#b1b408c0f380c8dfd99c063251f2f1fd86dff14c" + integrity sha512-ZC38zLqlMm67nONg+7ZSC7ExzLZApZ2nZ3/yM6J5LNa7IOgzDGPZgbDRBiwFdC3vIB04LhnNr83YrEvIaUnIzQ== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-form "^4.3.0" -"@abp/jquery-validation-unobtrusive@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0-rc.2.tgz#15e84a4143e74ef8ca0f8d55215c0636bcda0ad8" - integrity sha512-Nf1Y1oztQlA28bsCkdgYkD5qvxxzzu2/Bj+DIHHAK03/SgWXfC0WX66suM720Mq3E9vvxk2e4MSVRgTsI6mM9w== +"@abp/jquery-validation-unobtrusive@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation-unobtrusive/-/jquery-validation-unobtrusive-3.2.0.tgz#91b996c743e5b1423a4d01d8808788a4bf4adb32" + integrity sha512-FSkGWvIkZTd2LITbTCdyno0ml30PZZmGYCazowHprh1iuhx0C+yCd9U/kfZ3rLoZAFtWjz0ZUq1Z7G5xXHB97A== dependencies: - "@abp/jquery-validation" "~3.2.0-rc.2" + "@abp/jquery-validation" "~3.2.0" jquery-validation-unobtrusive "^3.2.11" -"@abp/jquery-validation@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0-rc.2.tgz#7a5f4fc8c18ce1d53d1886f1a4f047e03fb6c728" - integrity sha512-TgIBaynQfRmRJE7ts4H4DsyIg4EL7BZ2cldLR7H5XFo2VWVwSNqDnDyyN5R9+PUBHaQo8vvQklaOBH7zPig/Zg== +"@abp/jquery-validation@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery-validation/-/jquery-validation-3.2.0.tgz#1de41e9167b41a956ce2f6e3d6f16d023fccd078" + integrity sha512-FlP7btUvAJfGoi0g8Hm474jlhtweyd/P6dRu2spApUOpKjMyUNFpp/nphmr0iQvx7JGeeaAaUhQJ2v5UKy/Z8w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" jquery-validation "^1.19.2" -"@abp/jquery@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0-rc.2.tgz#478f4ad1e40fd05b3e9bdcbc3d8fd4343b09ea11" - integrity sha512-vsOKJl7DSnNqqHh6ojWZQFT3+aWAR7KD3q7O+Ry3UGO0ExVR73l6iDueWJ67OpkRsRjQbI7ajWP3yhnGS6QXpQ== +"@abp/jquery@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/jquery/-/jquery-3.2.0.tgz#eabc0bafef3cf2b64f672c562bda1f1002b07b7c" + integrity sha512-tlvQ79cqyJ+tXEf17Vdwi6O8yo0+7bmicyy5A/iYyWWJUjXGkiouQHjHkoZ2jeyxwvqn85tBbfjeRumcZdYRMA== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" jquery "~3.5.1" -"@abp/lodash@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0-rc.2.tgz#1bc077230296d74b41c956cb6b695c9940f9a475" - integrity sha512-eaVqNCd8kKnbyfhLrDtTV9bW9rQ+spdc6dlGY8uMuG4svPC7EGhQlKhX5exuxNmj7ZGHVFAeaLeD7baheDPDTA== +"@abp/lodash@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/lodash/-/lodash-3.2.0.tgz#63e8c51fe9e760d7debca9129bfbf01be8c12d18" + integrity sha512-/rGkJMCgbA0JLkjMXenxz6q0BXRDwvYSLUu7XotNj/cbiHpT5yHHTnWQgwxVUKEVA9xtmYUH1h20J25n/VD/tg== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" lodash "^4.17.15" -"@abp/luxon@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0-rc.2.tgz#c8de3eccd787bbbf304d028f0dd05f3d0e961536" - integrity sha512-kU6+MPU6yUEZ9i/GY/2au3DcMgUOqBcGyB/kCnMiMMQmVRqxNA8N1ijsENfvXHZwAN7YNtQ24hOHHgLdUnanww== +"@abp/luxon@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/luxon/-/luxon-3.2.0.tgz#f94b595d15d78868a4acf73803a9da8609096d39" + integrity sha512-3FF9/W+Smp4FqRJ6F5vNxydXYraVgEUsrOBkaBexVkzT/l3zBkCmrJ8i+Eib8xBXpS6Ku4nmpqbqm1VYhlxKTQ== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" luxon "^1.24.1" -"@abp/malihu-custom-scrollbar-plugin@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0-rc.2.tgz#55838bf814df9833a1367315ace5f6383ff7a104" - integrity sha512-EiC9wT/oaqSi3eAHOVm250DAlvUR0900VrkPkPkL4RLuzQiiwpWqN/v4J4wG0NGVTJkAhwforNkRphxUM23SSw== +"@abp/malihu-custom-scrollbar-plugin@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/malihu-custom-scrollbar-plugin/-/malihu-custom-scrollbar-plugin-3.2.0.tgz#bd11a36a37ec23d38cba116934398696379158b1" + integrity sha512-BYGICB55RsYHmaICnyWdCewo0uEbopmuuUuCJlE+2IY1I4JchSWG2mV//F+jOZQmlOsjYufK70BrQQEIr+ewXw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" malihu-custom-scrollbar-plugin "^3.1.5" -"@abp/select2@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0-rc.2.tgz#82d256e0852556d4b5c81b5aedc2b3fac6bafb61" - integrity sha512-AwZ3VjKpcBWYywSYXGNgYJWRXDKLodEWUVCafUBOvd6yVrlXuDevkOPgTAeuOj+84oG2Qw/c+Um+gyq7o7Nq6A== +"@abp/select2@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/select2/-/select2-3.2.0.tgz#729f82695bbfd7ab3d7a90059a198f338037c867" + integrity sha512-83V8jIR8RGFJ3II5G7/bitlv44OHOEENKDrT639OYIxHfgWEWm4CBhcyCnlZJqv6xB2AVDfFPgCPlDGl3x3tmw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" select2 "^4.0.13" -"@abp/sweetalert@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0-rc.2.tgz#30e4cd0895708d32cedf9b4b7b431b75532358b0" - integrity sha512-gq7irAt7pvNseCpEXr9hX3moL7svT+Or1h9oquzhc+mt3RoQlnWfVwBZ8Qq482GSSObhMxJzKu6GCm8xwmLwOA== +"@abp/sweetalert@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/sweetalert/-/sweetalert-3.2.0.tgz#05040b7276ca2ce62ffc20865d64fb6e0fdb62cb" + integrity sha512-BEgbWwWX2uOsVS/zV6OzlxRBCtSlqeAYdSkmDjQ7pzCthwZXPPFr1o8UXyp9W7GKwDg3lfWTQPkkm+2y587xEw== dependencies: - "@abp/core" "~3.2.0-rc.2" + "@abp/core" "~3.2.0" sweetalert "^2.1.2" -"@abp/timeago@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0-rc.2.tgz#b90faae2a57c724b897d1a26551bf358a89beadd" - integrity sha512-iUhVCq07+1sU5RK///In9U368ijlvKkVBUy3Ngd96NDSnKBcoSm/dzd2mj/MtyBfEyuXTKUBnH/0oG1FEcw0xA== +"@abp/timeago@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/timeago/-/timeago-3.2.0.tgz#e4a207566c00ccb3161ee91c6f6ce26419e4bbaf" + integrity sha512-VUk8c3hITZfu5aA21XB2Qaw5fwoeAl36Piy0Cb3aUOCFjyGWg19htXxDoT7rzqZ5UJFN0VRYg9MzciXZrFN5/w== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" timeago "^1.6.7" -"@abp/toastr@~3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0-rc.2.tgz#8630f6d96019dc6cd1a430db3056662deccec58d" - integrity sha512-r43TNLjBeWNMP/hN1JaT7y+BQZ/SMwKzDSOcBbsDgPIwiUzJIfg2zwy08f4iYjWO9UkNTeOxfotwdEUPR1Nr/w== +"@abp/toastr@~3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/toastr/-/toastr-3.2.0.tgz#059e1e1e998207a6f75db2bfe717bec2a0b6d955" + integrity sha512-EKikZVQDaX/uQfc0rWsW2x+UDsO4r80KC3pLvRaLXW5IEwEhTpYwZDUGReOEQ8YEk7UKOXrVJA07mxkbdOzyAw== dependencies: - "@abp/jquery" "~3.2.0-rc.2" + "@abp/jquery" "~3.2.0" toastr "^2.1.4" -"@abp/utils@^3.2.0-rc.2": - version "3.2.0-rc.2" - resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0-rc.2.tgz#84697871830e7b061e255c1b7a2f66a92b2a6560" - integrity sha512-DWsu2uwj7BeqROTYk9VXT29+kkDSbUeh86GRFvaDBrkeE+XGAiCW+rG43j6y1mdJHwmuaAkCDoV4xEBYdi/sVA== +"@abp/utils@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-3.2.0.tgz#084918379f2c5e43c1e52291ba6667f3ea3c1f33" + integrity sha512-DZsvF/I5o3r0D1+2B61KvJX78/tJ5uj9MaPq00Z/sxXdqsP2SQQmjhMm+Lb0FgGMK06XIoF9eDgM3Hu0y0H3cQ== dependencies: just-compare "^1.3.0" From 42114a263cfc5d89f0db2bc0a7600233a429979c Mon Sep 17 00:00:00 2001 From: Ahmet Date: Thu, 1 Oct 2020 13:12:17 +0300 Subject: [PATCH 100/143] Update AbpIdentityBlazorAutoMapperProfile.cs --- .../AbpIdentityBlazorAutoMapperProfile.cs | 5 ----- 1 file changed, 5 deletions(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorAutoMapperProfile.cs b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorAutoMapperProfile.cs index bbe57e91fd..989986ce6d 100644 --- a/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorAutoMapperProfile.cs +++ b/modules/identity/src/Volo.Abp.Identity.Blazor/AbpIdentityBlazorAutoMapperProfile.cs @@ -14,11 +14,6 @@ namespace Volo.Abp.Identity.Blazor CreateMap() .MapExtraProperties(); - - CreateMap() - .Ignore(x => x.Password) - .Ignore(x => x.RoleNames) - .MapExtraProperties(); } } } From 342eac954138947567466e8ce73d484ec8a4b351 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Thu, 1 Oct 2020 14:49:24 +0300 Subject: [PATCH 101/143] Update Manage.cshtml --- .../src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml index ec48e5bcde..29608f3e54 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Manage.cshtml @@ -23,7 +23,7 @@ } -e +
    From 48d73aa60753d192236ce5b4a3a167f85fb5b53b Mon Sep 17 00:00:00 2001 From: Ahmet Date: Thu, 1 Oct 2020 14:52:57 +0300 Subject: [PATCH 102/143] Added ManageYourAccount navigation to Blazor LoginDisplay --- .../Themes/Basic/LoginDisplay.razor | 3 ++ .../Themes/Basic/LoginDisplay.razor.cs | 40 +++++++++++++++++-- 2 files changed, 39 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor index f55685e665..3d3dd26fae 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor @@ -17,6 +17,9 @@ @menuItem.DisplayName } } + + @UiLocalizer["ManageYourAccount"] + Logout diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs index e0ad688513..17718dbcfb 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/LoginDisplay.razor.cs @@ -1,18 +1,50 @@ -using System.Threading.Tasks; +using System; +using System.Threading.Tasks; +using Localization.Resources.AbpUi; using Microsoft.AspNetCore.Components; +using Microsoft.AspNetCore.Components.Routing; +using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Options; +using Volo.Abp.Http.Client; using Volo.Abp.UI.Navigation; namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic { - public partial class LoginDisplay + public partial class LoginDisplay : IDisposable { - [Inject] protected IMenuManager MenuManager { get; set; } - + [Inject] + protected IMenuManager MenuManager { get; set; } + + [Inject] + protected IStringLocalizer UiLocalizer { get; set; } + + [Inject] + protected IOptions RemoteServiceOptions { get; set; } + protected ApplicationMenu Menu { get; set; } + protected string ServerUrl { get; set; } + protected string ServerAccountUrl { get; set; } + protected override async Task OnInitializedAsync() { Menu = await MenuManager.GetAsync(StandardMenus.User); + + ServerUrl = RemoteServiceOptions.Value.RemoteServices.Default?.BaseUrl?.TrimEnd('/'); + ServerAccountUrl = ServerUrl + "/Account/Manage?returnUrl=" + Navigation.Uri; + + Navigation.LocationChanged += OnLocationChanged; + } + + protected virtual void OnLocationChanged(object sender, LocationChangedEventArgs e) + { + ServerAccountUrl = ServerUrl + "/Account/Manage?returnUrl=" + Navigation.Uri; + StateHasChanged(); + } + + public void Dispose() + { + Navigation.LocationChanged -= OnLocationChanged; } } } \ No newline at end of file From a7799b3d66ccfc82665c633e9632852265f9f748 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 1 Oct 2020 15:07:52 +0300 Subject: [PATCH 103/143] add license type to api key result #3507. closes #3507 --- .../Abp/Cli/Licensing/DeveloperApiKeyResult.cs | 3 ++- .../Volo/Abp/Cli/Licensing/LicenseType.cs | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/LicenseType.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/DeveloperApiKeyResult.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/DeveloperApiKeyResult.cs index eb781c27b1..4230735680 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/DeveloperApiKeyResult.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/DeveloperApiKeyResult.cs @@ -12,7 +12,8 @@ namespace Volo.Abp.Cli.Licensing public string LicenseCode { get; set; } public string ErrorMessage { get; set; } public LicenseErrorType? ErrorType { get; set; } - + public LicenseType LicenseType { get; set; } + public enum LicenseErrorType { NotAuthenticated = 1, diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/LicenseType.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/LicenseType.cs new file mode 100644 index 0000000000..48bc818914 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Licensing/LicenseType.cs @@ -0,0 +1,14 @@ +namespace Volo.Abp.Cli.Licensing +{ + public enum LicenseType : byte + { + Personal = 1, + Team = 2, + Business = 3, + Enterprise = 4, + Personal_Discounted = 5, + Team_Discounted = 6, + Business_Discounted = 7, + Enterprise_Discounted = 8, + } +} \ No newline at end of file From 3d649abcf837f287b4b15fa9ffc714318b6f25ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 1 Oct 2020 15:49:05 +0300 Subject: [PATCH 104/143] Update NavToolbar.razor.cs --- .../Themes/Basic/NavToolbar.razor.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs index c2f08568e4..6fddf263b3 100644 --- a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme/Themes/Basic/NavToolbar.razor.cs @@ -10,8 +10,6 @@ namespace Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme.Themes.Basic [Inject] private IToolbarManager ToolbarManager { get; set; } - private RenderFragment ToolbarRender { get; set; } - private List ToolbarItemRenders { get; set; } = new List(); protected override async Task OnInitializedAsync() From d9144f45f71afb75ff97f465e106472c06c33c82 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 1 Oct 2020 15:57:49 +0300 Subject: [PATCH 105/143] Update Getting-Started.md --- docs/en/Getting-Started.md | 28 +--------------------------- 1 file changed, 1 insertion(+), 27 deletions(-) diff --git a/docs/en/Getting-Started.md b/docs/en/Getting-Started.md index 1ca6a61b1a..1e473b266f 100644 --- a/docs/en/Getting-Started.md +++ b/docs/en/Getting-Started.md @@ -43,24 +43,6 @@ The following tools should be installed on your development machine: > ABP CLI is a free & open source tool for the ABP framework. -{{if UI == "Blazor"}} - -BLAZOR UI IS ONLY AVAILABLE WITH THE PREVIEW VERSION. SO, YOU NEED TO INSTALL THE PREVIEW VERSION OF THE ABP CLI - -First, you need to install the ABP CLI **RC.2** using the following command: - -````shell -dotnet tool install Volo.Abp.Cli -g --version 3.2.0-rc.2 -```` - -If you've already installed, you can update it using the following command: - -````shell -dotnet tool update Volo.Abp.Cli -g --version 3.2.0-rc.2 -```` - -{{else}} - First, you need to install the ABP CLI using the following command: ````shell @@ -73,22 +55,14 @@ If you've already installed, you can update it using the following command: dotnet tool update -g Volo.Abp.Cli ```` -{{end}} - ## Create a New Project Use the `new` command of the ABP CLI to create a new project: ````shell -abp new Acme.BookStore{{if UI == "NG"}} -u angular{{else if UI == "Blazor"}} -u blazor --preview{{end}}{{if DB == "Mongo"}} -d mongodb{{end}}{{if Tiered == "Yes"}}{{if UI == "MVC"}} --tiered{{else}} --separate-identity-server{{end}}{{end}} +abp new Acme.BookStore{{if UI == "NG"}} -u angular{{else if UI == "Blazor"}} -u blazor{{end}}{{if DB == "Mongo"}} -d mongodb{{end}}{{if Tiered == "Yes"}}{{if UI == "MVC"}} --tiered{{else}} --separate-identity-server{{end}}{{end}} ```` -{{if UI == "Blazor"}} - -> BLAZOR UI IS ONLY AVAILABLE WITH THE PREVIEW VERSION. THIS IS WHY IT IS REQUIRED TO SET THE `--PREVIEW` OPTION. - -{{end}} - > You can use different level of namespaces; e.g. BookStore, Acme.BookStore or Acme.Retail.BookStore. > Alternatively, you can select the "Direct Download" tab from the [ABP Framework web site](https://abp.io/get-started) to create a new solution. From 3849f1423ea2baa3e7f9cf533225ee94272c39c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 1 Oct 2020 16:22:16 +0300 Subject: [PATCH 106/143] Blog post for v3.2 release. --- .../2020-10-01 v3_2_Release_Stable/POST.md | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 docs/en/Blog-Posts/2020-10-01 v3_2_Release_Stable/POST.md diff --git a/docs/en/Blog-Posts/2020-10-01 v3_2_Release_Stable/POST.md b/docs/en/Blog-Posts/2020-10-01 v3_2_Release_Stable/POST.md new file mode 100644 index 0000000000..75ea442f0d --- /dev/null +++ b/docs/en/Blog-Posts/2020-10-01 v3_2_Release_Stable/POST.md @@ -0,0 +1,47 @@ +# ABP Framework 3.2 Final Has Been Released + +ABP Framework & ABP Commercial 3.2 have been released today. + +Since all the new features are already explained in details with the [3.2 RC Announcement Post](https://blog.abp.io/abp/ABP-Framework-ABP-Commercial-3.2-RC-With-The-New-Blazor-UI), I will not repeat all the details again. Please read [the RC post](https://blog.abp.io/abp/ABP-Framework-ABP-Commercial-3.2-RC-With-The-New-Blazor-UI) for **new feature and changes** you may need to do for your solution while upgrading to the version 3.2. + +## Creating New Solutions + +You can create a new solution with the ABP Framework version 3.2 by either using the `abp new` command or using the **direct download** tab on the [get started page](https://abp.io/get-started). + +> See the [getting started document](https://docs.abp.io/en/abp/latest/Getting-Started) for details. + +## How to Upgrade an Existing Solution + +### Install/Update the ABP CLI + +First of all, install the ABP CLI or upgrade to the latest version. + +If you haven't installed yet: + +````bash +dotnet tool install -g Volo.Abp.Cli +```` + +To update an existing installation: + +```bash +dotnet tool update -g Volo.Abp.Cli +``` + +### ABP UPDATE Command + +[ABP CLI](https://docs.abp.io/en/abp/latest/CLI) provides a handy command to update all the ABP related NuGet and NPM packages in your solution with a single command: + +````bash +abp update +```` + +After the update command, check [the RC blog post](https://blog.abp.io/abp/ABP-Framework-ABP-Commercial-3.2-RC-With-The-New-Blazor-UI) to learn if you need to make any changes in your solution. + +> You may want to see the new [upgrading document](https://docs.abp.io/en/abp/latest/Upgrading). + +## About the Next Versions + +The next two versions (3.3 & 4.0) will be mostly related to completing the Blazor UI features and upgrading the ABP Framework & ecosystem to the .NET 5.0. + +The ultimate goal is to complete the version 4.0 with a stable Blazor UI with the fundamental features implemented and publish it just after the Microsoft lunches .NET 5 in this November. \ No newline at end of file From 5e19bc8c4c92f764ddc3bc17cedc77cf1214bc79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 1 Oct 2020 17:56:58 +0300 Subject: [PATCH 107/143] Revised the caching document. --- docs/en/Caching.md | 205 ++++++++++++++++++++++++++++----------------- 1 file changed, 126 insertions(+), 79 deletions(-) diff --git a/docs/en/Caching.md b/docs/en/Caching.md index bb11b2b45a..fb563e26a9 100644 --- a/docs/en/Caching.md +++ b/docs/en/Caching.md @@ -1,45 +1,31 @@ # Caching -ABP framework extends ASP.NET Core's distributed caching system. +ABP Framework extends the [ASP.NET Core distributed cache](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed). ## Volo.Abp.Caching Package -> This package is already installed by default with the startup template. So, most of the time, you don't need to install it manually. +> This package is already installed by default with the [application startup template](Startup-Templates/Application.md). So, most of the time, you don't need to install it manually. -Volo.Abp.Caching is the core package of the caching system. Install it to your project using the package manager console (PMC): +[Volo.Abp.Caching](https://www.nuget.org/packages/Volo.Abp.Caching) is the main package of the caching system. You can install it a project using the add-package command of the [ABP CLI](CLI.md): ``` -Install-Package Volo.Abp.Caching +abp add-package Volo.Abp.Caching ``` -Then you can add **AbpCachingModule** dependency to your module: - -```c# -using Volo.Abp.Modularity; -using Volo.Abp.Caching; - -namespace MyCompany.MyProject -{ - [DependsOn(typeof(AbpCachingModule))] - public class MyModule : AbpModule - { - //... - } -} -``` +You need to run this command on a command line terminal in a folder containing a `csproj` file (see [other options](https://abp.io/package-detail/Volo.Abp.Caching) to install). ## `IDistributedCache` Interface -ASP.NET Core defines the `IDistributedCache` interface to get/set cache values. But it has some difficulties: +ASP.NET Core defines the `IDistributedCache` interface to get/set the cache values. But it has some difficulties: * It works with **byte arrays** rather than .NET objects. So, you need to **serialize/deserialize** the objects you need to cache. * It provides a **single key pool** for all cache items, so; * You need to care about the keys to distinguish **different type of objects**. - * You need to care about the cache items of **different tenants** (see [multi-tenancy](Multi-Tenancy.md)). + * You need to care about the cache items of **different tenants** in a [multi-tenant](Multi-Tenancy.md) system. > `IDistributedCache` is defined in the `Microsoft.Extensions.Caching.Abstractions` package. That means it is not only usable for ASP.NET Core applications, but also available to **any type of applications**. -> Default implementation of the `IDistributedCache` interface is the `MemoryDistributedCache` which works **in-memory**. See [ASP.NET Core's documentation](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed) to see how to switch to **Redis** or another cache provider. +> Default implementation of the `IDistributedCache` interface is the `MemoryDistributedCache` which works **in-memory**. See [ASP.NET Core's documentation](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed) to see how to switch to Redis or another cache provider. See [ASP.NET Core's distributed caching document](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed) for more information. @@ -50,52 +36,63 @@ ABP framework defines the generic `IDistributedCache` interface in t `IDistributedCache` solves the difficulties explained above; * It internally **serializes/deserializes** the cached objects. Uses **JSON** serialization by default, but can be overridden by replacing the `IDistributedCacheSerializer` service in the [dependency injection](Dependency-Injection.md) system. -* It automatically adds a **cache name** prefix to the cache keys based on the object type stored in the cache. Default cache name is the full name of the cache item class (`CacheItem` postfix is removed if your cache item class ends with it). You can use the `CacheName` attribute on the cache item class to set the cache name. -* It automatically adds the **current tenant id** to the cache key to distinguish cache items for different tenants (only works if your application is [multi-tenant](Multi-Tenancy.md)). Define `IgnoreMultiTenancy` attribute on the cache item class to disable this if you want to share the cached objects among all tenants in a multi-tenant application. -* Allows to define a **global cache key prefix** per application, so different applications can use their isolated key pools in a shared distributed cache source. +* It automatically adds a **cache name** prefix to the cache keys based on the object type stored in the cache. Default cache name is the full name of the cache item class (`CacheItem` postfix is removed if your cache item class ends with it). You can use the **`CacheName` attribute** on the cache item class to set the cache name. +* It automatically adds the **current tenant id** to the cache key to distinguish cache items for different tenants (if your application is [multi-tenant](Multi-Tenancy.md)). Define `IgnoreMultiTenancy` attribute on the cache item class to disable this if you want to share the cached objects among all tenants in a multi-tenant application. +* Allows to define a **global cache key prefix** per application, so different applications can use their isolated key pools in a shared distributed cache server. +* ABP's distributed cache also **can tolerate errors** wherever possible and bypasses the cache. This is useful when you have temporary problems on the cache server. ### Usage An example class to store an item in the cache: ````csharp -public class BookCacheItem +namespace MyProject { - public string Name { get; set; } + public class BookCacheItem + { + public string Name { get; set; } - public float Price { get; set; } + public float Price { get; set; } + } } ```` -You can inject and use the `IDistributedCache` service to get/set `BookCacheItem` objects. - -Example usage: +You can inject and use the `IDistributedCache` service to get/set `BookCacheItem` objects: ````csharp -public class BookService : ITransientDependency -{ - private readonly IDistributedCache _cache; - - public BookService(IDistributedCache cache) - { - _cache = cache; - } - - public async Task GetAsync(Guid bookId) - { - return await _cache.GetOrAddAsync( - bookId.ToString(), //Cache key - async () => await GetBookFromDatabaseAsync(bookId), - () => new DistributedCacheEntryOptions - { - AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) - } - ); - } +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Caching.Distributed; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; - private Task GetBookFromDatabaseAsync(Guid bookId) +namespace MyProject +{ + public class BookService : ITransientDependency { - //TODO: get from database + private readonly IDistributedCache _cache; + + public BookService(IDistributedCache cache) + { + _cache = cache; + } + + public async Task GetAsync(Guid bookId) + { + return await _cache.GetOrAddAsync( + bookId.ToString(), //Cache key + async () => await GetBookFromDatabaseAsync(bookId), + () => new DistributedCacheEntryOptions + { + AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) + } + ); + } + + private Task GetBookFromDatabaseAsync(Guid bookId) + { + //TODO: get from database + } } } ```` @@ -108,53 +105,69 @@ Other methods of the `IDistributedCache` are same as ASP.NET Core ## `IDistributedCache` Interface -`IDistributedCache` interface assumes that the type of your cache key is `string` (so, you need to manually convert your key to string if you need to use a different kind of cache key). `IDistributedCache` can be used when your cache key type is not `string`. +`IDistributedCache` interface assumes that the type of your **cache key** is `string` (so, you need to manually convert your key to string if you need to use a different kind of cache key). While this is not a big deal, `IDistributedCache` can be used when your cache key type is not `string`. ### Usage An example class to store an item in the cache: ````csharp -public class BookCacheItem +using Volo.Abp.Caching; + +namespace MyProject { - public string Name { get; set; } + [CacheName("Books")] + public class BookCacheItem + { + public string Name { get; set; } - public float Price { get; set; } + public float Price { get; set; } + } } ```` Example usage (assumes that your cache key type is `Guid`): ````csharp -public class BookService : ITransientDependency -{ - private readonly IDistributedCache _cache; - - public BookService(IDistributedCache cache) - { - _cache = cache; - } +using System; +using System.Threading.Tasks; +using Microsoft.Extensions.Caching.Distributed; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; - public async Task GetAsync(Guid bookId) - { - return await _cache.GetOrAddAsync( - bookId, //Guid type used as the cache key - async () => await GetBookFromDatabaseAsync(bookId), - () => new DistributedCacheEntryOptions - { - AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) - } - ); - } - private Task GetBookFromDatabaseAsync(Guid bookId) +namespace MyProject +{ + public class BookService : ITransientDependency { - //TODO: get from database + private readonly IDistributedCache _cache; + + public BookService(IDistributedCache cache) + { + _cache = cache; + } + + public async Task GetAsync(Guid bookId) + { + return await _cache.GetOrAddAsync( + bookId, //Guid type used as the cache key + async () => await GetBookFromDatabaseAsync(bookId), + () => new DistributedCacheEntryOptions + { + AbsoluteExpiration = DateTimeOffset.Now.AddHours(1) + } + ); + } + private Task GetBookFromDatabaseAsync(Guid bookId) + { + //TODO: get from database + } } } ```` * This sample service uses the `GetOrAddAsync()` method to get a book item from the cache. * Since cache explicitly implemented as using `Guid` as cache key, `Guid` value passed to `_cache_GetOrAddAsync()` method. +* This example uses the `CacheName` attribute for the `BookCacheItem` class. `IDistributedCache` internally uses `ToString()` method of the key object to convert it to a string. If you need to use a complex object as the cache key, you need to override `ToString` method of your class. @@ -192,7 +205,41 @@ public class BookService : ITransientDependency } ```` -### DistributedCacheOptions +## Error Handling TODO +## Configuration + +### AbpDistributedCacheOptions + +`AbpDistributedCacheOptions` is the main [options class](Options.md) to configure the caching. + +**Example: Set the cache key prefix for the application** + +```csharp +Configure(options => +{ + options.KeyPrefix = "MyApp1"; +}); +``` + +> Write that code inside the `ConfigureServices` method of your [module class](Module-Development-Basics.md). + +#### Available Options + +* `HideErrors` (`bool`, default: `true`): Enables/disables hiding the errors on writing/reading values from the cache server. +* `KeyPrefix` (`string`, default: `null`): If your cache server is shared by multiple applications, you can set a prefix for the cache keys for your application. In this case, different applications can not overwrite each other's cache items. +* `GlobalCacheEntryOptions` (`DistributedCacheEntryOptions`): Used to set default distributed cache options (like `AbsoluteExpiration` and `SlidingExpiration`) used when you don't specify the options while saving cache items. Default value uses the `SlidingExpiration` as 20 minutes. + +## Advanced Topics + +### IDistributedCacheSerializer + +`IDistributedCacheSerializer` service is used to serialize and deserialize the cache items. Default implementation is the `Utf8JsonDistributedCacheSerializer` class that uses `IJsonSerializer` service to convert objects to [JSON](Json.md) and vice verse. Then it uses UTC8 encoding to convert the JSON string to a byte array which is accepted by the distributed cache. + +You can [replace](Dependency-Injection.md) this service by your own implementation if you want to implement your own serialization logic. + +### IDistributedCacheKeyNormalizer + +`IDistributedCacheKeyNormalizer` is implemented by the `DistributedCacheKeyNormalizer` class by default. It adds cache name, application cache prefix and current tenant id to the cache key. If you need a more advanced key normalization, you can [replace](Dependency-Injection.md) this service by your own implementation. \ No newline at end of file From 3d6ae45db33a717bbbc406977b8e6927d5437951 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 1 Oct 2020 18:09:11 +0300 Subject: [PATCH 108/143] Error Handling section in the cache doc. --- docs/en/Caching.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/en/Caching.md b/docs/en/Caching.md index fb563e26a9..7de7d82f1e 100644 --- a/docs/en/Caching.md +++ b/docs/en/Caching.md @@ -207,7 +207,13 @@ public class BookService : ITransientDependency ## Error Handling -TODO +When you design a cache for your objects, you typically try to get the value from cache first. If not found in the cache, you query the object from the **original source**. It may be located in a **database** or may require to perform an HTTP call to a remote server. + +In most cases, you want to **tolerate the cache errors**; If you get error from the cache server you don't want to cancel the operation. Instead, you silently hide (and log) the error and **query from the original source**. This is what the ABP Framework does by default. + +ABP's Distributed Cache [handle](Exception-Handling.md), log and hide errors by default. There is an option to change this globally (see the options below). + +In addition, all of the `IDistributedCache` (and `IDistributedCache`) methods have an optional `hideErrors` parameter, which is `null` by default. The global value is used if this parameter left as `null`, otherwise you can decide to hide or throw the exceptions for individual method calls. ## Configuration From dcf3763ad8d5678bce6bf83987e939c3409bcda5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 1 Oct 2020 20:45:05 +0300 Subject: [PATCH 109/143] Added Unit Of Work Level Cache --- docs/en/Caching.md | 51 ++++++++++++++++++++++++++-------------------- 1 file changed, 29 insertions(+), 22 deletions(-) diff --git a/docs/en/Caching.md b/docs/en/Caching.md index 7de7d82f1e..0f175c488e 100644 --- a/docs/en/Caching.md +++ b/docs/en/Caching.md @@ -2,7 +2,7 @@ ABP Framework extends the [ASP.NET Core distributed cache](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed). -## Volo.Abp.Caching Package +## Installation > This package is already installed by default with the [application startup template](Startup-Templates/Application.md). So, most of the time, you don't need to install it manually. @@ -14,7 +14,9 @@ abp add-package Volo.Abp.Caching You need to run this command on a command line terminal in a folder containing a `csproj` file (see [other options](https://abp.io/package-detail/Volo.Abp.Caching) to install). -## `IDistributedCache` Interface +## Usage + +### `IDistributedCache` Interface ASP.NET Core defines the `IDistributedCache` interface to get/set the cache values. But it has some difficulties: @@ -29,7 +31,7 @@ ASP.NET Core defines the `IDistributedCache` interface to get/set the cache valu See [ASP.NET Core's distributed caching document](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed) for more information. -## `IDistributedCache` Interface +### `IDistributedCache` Interface ABP framework defines the generic `IDistributedCache` interface in the [Volo.Abp.Caching](https://www.nuget.org/packages/Volo.Abp.Caching/) package. `TCacheItem` is the type of the object stored in the cache. @@ -41,9 +43,7 @@ ABP framework defines the generic `IDistributedCache` interface in t * Allows to define a **global cache key prefix** per application, so different applications can use their isolated key pools in a shared distributed cache server. * ABP's distributed cache also **can tolerate errors** wherever possible and bypasses the cache. This is useful when you have temporary problems on the cache server. -### Usage - -An example class to store an item in the cache: +**Example: Store Book names and prices in the cache** ````csharp namespace MyProject @@ -103,13 +103,11 @@ namespace MyProject Other methods of the `IDistributedCache` are same as ASP.NET Core's `IDistributedCache` interface, so you can refer [it's documentation](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed). -## `IDistributedCache` Interface +### `IDistributedCache` Interface `IDistributedCache` interface assumes that the type of your **cache key** is `string` (so, you need to manually convert your key to string if you need to use a different kind of cache key). While this is not a big deal, `IDistributedCache` can be used when your cache key type is not `string`. -### Usage - -An example class to store an item in the cache: +**Example: Store Book names and prices in the cache** ````csharp using Volo.Abp.Caching; @@ -126,7 +124,9 @@ namespace MyProject } ```` -Example usage (assumes that your cache key type is `Guid`): +* This example uses the `CacheName` attribute for the `BookCacheItem` class to set the cache name. + +You can inject and use the `IDistributedCache` service to get/set `BookCacheItem` objects: ````csharp using System; @@ -167,7 +167,8 @@ namespace MyProject * This sample service uses the `GetOrAddAsync()` method to get a book item from the cache. * Since cache explicitly implemented as using `Guid` as cache key, `Guid` value passed to `_cache_GetOrAddAsync()` method. -* This example uses the `CacheName` attribute for the `BookCacheItem` class. + +#### Complex Types as the Cache Key `IDistributedCache` internally uses `ToString()` method of the key object to convert it to a string. If you need to use a complex object as the cache key, you need to override `ToString` method of your class. @@ -205,16 +206,6 @@ public class BookService : ITransientDependency } ```` -## Error Handling - -When you design a cache for your objects, you typically try to get the value from cache first. If not found in the cache, you query the object from the **original source**. It may be located in a **database** or may require to perform an HTTP call to a remote server. - -In most cases, you want to **tolerate the cache errors**; If you get error from the cache server you don't want to cancel the operation. Instead, you silently hide (and log) the error and **query from the original source**. This is what the ABP Framework does by default. - -ABP's Distributed Cache [handle](Exception-Handling.md), log and hide errors by default. There is an option to change this globally (see the options below). - -In addition, all of the `IDistributedCache` (and `IDistributedCache`) methods have an optional `hideErrors` parameter, which is `null` by default. The global value is used if this parameter left as `null`, otherwise you can decide to hide or throw the exceptions for individual method calls. - ## Configuration ### AbpDistributedCacheOptions @@ -238,8 +229,24 @@ Configure(options => * `KeyPrefix` (`string`, default: `null`): If your cache server is shared by multiple applications, you can set a prefix for the cache keys for your application. In this case, different applications can not overwrite each other's cache items. * `GlobalCacheEntryOptions` (`DistributedCacheEntryOptions`): Used to set default distributed cache options (like `AbsoluteExpiration` and `SlidingExpiration`) used when you don't specify the options while saving cache items. Default value uses the `SlidingExpiration` as 20 minutes. +## Error Handling + +When you design a cache for your objects, you typically try to get the value from cache first. If not found in the cache, you query the object from the **original source**. It may be located in a **database** or may require to perform an HTTP call to a remote server. + +In most cases, you want to **tolerate the cache errors**; If you get error from the cache server you don't want to cancel the operation. Instead, you silently hide (and log) the error and **query from the original source**. This is what the ABP Framework does by default. + +ABP's Distributed Cache [handle](Exception-Handling.md), log and hide errors by default. There is an option to change this globally (see the options below). + +In addition, all of the `IDistributedCache` (and `IDistributedCache`) methods have an optional `hideErrors` parameter, which is `null` by default. The global value is used if this parameter left as `null`, otherwise you can decide to hide or throw the exceptions for individual method calls. + ## Advanced Topics +### Unit Of Work Level Cache + +Distributed cache service provides an interesting feature. Assume that you've updated the price of a book in the database, then set the new price to the cache, so you can use the cached value later. What if you have an exception after setting the cache and you **rollback the transaction** that updates the price of the book? In this case, cache value will be incorrect. + +`IDistributedCache<..>` methods gets an optional parameter, named `considerOuw`, which is `false` by default. If you set it to `true`, then the changes you made for the cache are not actually applied to the real cache store, but associated with the current [unit of work](Unit-Of-Work.md). You get the value you set in the same unit of work, but the changes are applied **only if the current unit of work succeed**. + ### IDistributedCacheSerializer `IDistributedCacheSerializer` service is used to serialize and deserialize the cache items. Default implementation is the `Utf8JsonDistributedCacheSerializer` class that uses `IJsonSerializer` service to convert objects to [JSON](Json.md) and vice verse. Then it uses UTC8 encoding to convert the JSON string to a byte array which is accepted by the distributed cache. From 14bd12b176b6edf3b1ed519d77361c280f088f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 1 Oct 2020 21:15:23 +0300 Subject: [PATCH 110/143] Add the Redis-Cache document --- docs/en/Caching.md | 8 ++++++-- docs/en/Redis-Cache.md | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 docs/en/Redis-Cache.md diff --git a/docs/en/Caching.md b/docs/en/Caching.md index 0f175c488e..7a29247628 100644 --- a/docs/en/Caching.md +++ b/docs/en/Caching.md @@ -27,7 +27,7 @@ ASP.NET Core defines the `IDistributedCache` interface to get/set the cache valu > `IDistributedCache` is defined in the `Microsoft.Extensions.Caching.Abstractions` package. That means it is not only usable for ASP.NET Core applications, but also available to **any type of applications**. -> Default implementation of the `IDistributedCache` interface is the `MemoryDistributedCache` which works **in-memory**. See [ASP.NET Core's documentation](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed) to see how to switch to Redis or another cache provider. +> Default implementation of the `IDistributedCache` interface is the `MemoryDistributedCache` which works **in-memory**. See [ASP.NET Core's documentation](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed) to see how to switch to Redis or another cache provider. Also, see the [Redis Cache](Redis-Cache.md) document if you want to use the Redis as the distributed cache server. See [ASP.NET Core's distributed caching document](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed) for more information. @@ -255,4 +255,8 @@ You can [replace](Dependency-Injection.md) this service by your own implementati ### IDistributedCacheKeyNormalizer -`IDistributedCacheKeyNormalizer` is implemented by the `DistributedCacheKeyNormalizer` class by default. It adds cache name, application cache prefix and current tenant id to the cache key. If you need a more advanced key normalization, you can [replace](Dependency-Injection.md) this service by your own implementation. \ No newline at end of file +`IDistributedCacheKeyNormalizer` is implemented by the `DistributedCacheKeyNormalizer` class by default. It adds cache name, application cache prefix and current tenant id to the cache key. If you need a more advanced key normalization, you can [replace](Dependency-Injection.md) this service by your own implementation. + +## See Also + +* [Redis Cache](Redis-Cache.md) \ No newline at end of file diff --git a/docs/en/Redis-Cache.md b/docs/en/Redis-Cache.md new file mode 100644 index 0000000000..ee6b7056ae --- /dev/null +++ b/docs/en/Redis-Cache.md @@ -0,0 +1,39 @@ +# Redis Cache + +ABP Framework [Caching System](Caching.md) extends the [ASP.NET Core distributed cache](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed). So, **any provider** supported by the standard ASP.NET Core distributed cache can be usable in your application and can be configured just like **documented by Microsoft**. + +However, ABP provides an **integration package** for Redis Cache: [Volo.Abp.Caching.StackExchangeRedis](https://www.nuget.org/packages/Volo.Abp.Caching.StackExchangeRedis). There are two reasons for using this package, instead of the standard [Microsoft.Extensions.Caching.StackExchangeRedis](https://www.nuget.org/packages/Microsoft.Extensions.Caching.StackExchangeRedis/) package. + +1. It implements `SetManyAsync` and `GetManyAsync` methods. These are not standard methods of the Microsoft Caching library, but added by the ABP Framework [Caching](Caching.md) system. They **significiantly increases the performance** when you need to set/get multiple cache items with a single method call. +2. It **simplifies** the Redis cache **configuration** (will be explained below). + +> Volo.Abp.Caching.StackExchangeRedis is already depends on the Microsoft.Extensions.Caching.StackExchangeRedis package, but extends and improves it. + +## Installation + +> This package is already installed in the application startup template if it is using Redis. + +Open a command line in the folder of your `.csproj` file and type the following ABP CLI command: + +````bash +abp add-package Volo.Abp.Caching.StackExchangeRedis +```` + +## Configuration + +Volo.Abp.Caching.StackExchangeRedis package automatically gets the redis [configuration](Configuration.md) from the `IConfiguration`. So, for example, you can set your configuration inside the `appsettings.json`: + +````js +"Redis": { + "Configuration": "127.0.0.1" +} +```` + +Alternatively you can configure the standard [RedisCacheOptions](https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.caching.stackexchangeredis.rediscacheoptions) [options](Options.md) class in the `ConfigureServices` method of your [module](Module-Development-Basics.md): + +````csharp +Configure(options => +{ + //... +}); +```` \ No newline at end of file From 9058e97cdccd20c6edc28155552b39cf637582f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 1 Oct 2020 21:28:54 +0300 Subject: [PATCH 111/143] Added Batch Operations section to the cache document --- docs/en/Caching.md | 16 +++++++++++++--- docs/en/Redis-Cache.md | 2 +- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/docs/en/Caching.md b/docs/en/Caching.md index 7a29247628..4da27e4e98 100644 --- a/docs/en/Caching.md +++ b/docs/en/Caching.md @@ -41,7 +41,8 @@ ABP framework defines the generic `IDistributedCache` interface in t * It automatically adds a **cache name** prefix to the cache keys based on the object type stored in the cache. Default cache name is the full name of the cache item class (`CacheItem` postfix is removed if your cache item class ends with it). You can use the **`CacheName` attribute** on the cache item class to set the cache name. * It automatically adds the **current tenant id** to the cache key to distinguish cache items for different tenants (if your application is [multi-tenant](Multi-Tenancy.md)). Define `IgnoreMultiTenancy` attribute on the cache item class to disable this if you want to share the cached objects among all tenants in a multi-tenant application. * Allows to define a **global cache key prefix** per application, so different applications can use their isolated key pools in a shared distributed cache server. -* ABP's distributed cache also **can tolerate errors** wherever possible and bypasses the cache. This is useful when you have temporary problems on the cache server. +* It **can tolerate errors** wherever possible and bypasses the cache. This is useful when you have temporary problems on the cache server. +* It has methods like `GetManyAsync` and `SetManyAsync` which significantly improve the performance on **batch operations**. **Example: Store Book names and prices in the cache** @@ -97,11 +98,11 @@ namespace MyProject } ```` -* This sample service uses the `GetOrAddAsync()` method to get a book item from the cache. +* This sample service uses the `GetOrAddAsync()` method to get a book item from the cache. `GetOrAddAsync` is an additional method that was added by the ABP Framework to the standard ASP.NET Core distributed cache methods. * If the book was not found in the cache, it calls the factory method (`GetBookFromDatabaseAsync` in this case) to retrieve the book item from the original source. * `GetOrAddAsync` optionally gets a `DistributedCacheEntryOptions` which can be used to set the lifetime of the cached item. -Other methods of the `IDistributedCache` are same as ASP.NET Core's `IDistributedCache` interface, so you can refer [it's documentation](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed). +`IDistributedCache` supports the same methods of the ASP.NET Core's standard `IDistributedCache` interface, so you can refer [it's documentation](https://docs.microsoft.com/en-us/aspnet/core/performance/caching/distributed). ### `IDistributedCache` Interface @@ -239,6 +240,15 @@ ABP's Distributed Cache [handle](Exception-Handling.md), log and hide errors by In addition, all of the `IDistributedCache` (and `IDistributedCache`) methods have an optional `hideErrors` parameter, which is `null` by default. The global value is used if this parameter left as `null`, otherwise you can decide to hide or throw the exceptions for individual method calls. +## Batch Operations + +ABP's distributed cache interfaces provide methods to perform batch get/set methods those improves the performance when you want to get or set multiple cache items in a single method call. + +* `SetManyAsync` and `SetMany` methods can be used to set multiple values to the cache. +* `GetManyAsync` and `GetMany` methods can be used to retrieve multiple values from the cache. + +> These are not standard methods of the ASP.NET Core caching. So, a provide may not support them. They are supported by the [ABP Redis Cache integration package](Redis-Cache.md). + ## Advanced Topics ### Unit Of Work Level Cache diff --git a/docs/en/Redis-Cache.md b/docs/en/Redis-Cache.md index ee6b7056ae..584ae40306 100644 --- a/docs/en/Redis-Cache.md +++ b/docs/en/Redis-Cache.md @@ -7,7 +7,7 @@ However, ABP provides an **integration package** for Redis Cache: [Volo.Abp.Cach 1. It implements `SetManyAsync` and `GetManyAsync` methods. These are not standard methods of the Microsoft Caching library, but added by the ABP Framework [Caching](Caching.md) system. They **significiantly increases the performance** when you need to set/get multiple cache items with a single method call. 2. It **simplifies** the Redis cache **configuration** (will be explained below). -> Volo.Abp.Caching.StackExchangeRedis is already depends on the Microsoft.Extensions.Caching.StackExchangeRedis package, but extends and improves it. +> Volo.Abp.Caching.StackExchangeRedis is already uses the Microsoft.Extensions.Caching.StackExchangeRedis package, but extends and improves it. ## Installation From 4a1fa49faefb813eee223fda6200fa8a5c78cba4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Thu, 1 Oct 2020 21:32:57 +0300 Subject: [PATCH 112/143] Update Caching.md --- docs/en/Caching.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Caching.md b/docs/en/Caching.md index 4da27e4e98..042f13ffe0 100644 --- a/docs/en/Caching.md +++ b/docs/en/Caching.md @@ -247,7 +247,7 @@ ABP's distributed cache interfaces provide methods to perform batch get/set meth * `SetManyAsync` and `SetMany` methods can be used to set multiple values to the cache. * `GetManyAsync` and `GetMany` methods can be used to retrieve multiple values from the cache. -> These are not standard methods of the ASP.NET Core caching. So, a provide may not support them. They are supported by the [ABP Redis Cache integration package](Redis-Cache.md). +> These are not standard methods of the ASP.NET Core caching. So, some providers may not support them. They are supported by the [ABP Redis Cache integration package](Redis-Cache.md). If the provider doesn't support, it fallbacks to `SetAsync` and `GetAsync` methods (called once for each item). ## Advanced Topics From b7e2a6e2d05d0e86559340ccab6b22723b082893 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 2 Oct 2020 08:09:45 +0300 Subject: [PATCH 113/143] Add redis cache to docs nav menu --- docs/en/Redis-Cache.md | 6 +++++- docs/en/docs-nav.json | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/en/Redis-Cache.md b/docs/en/Redis-Cache.md index 584ae40306..42679679c6 100644 --- a/docs/en/Redis-Cache.md +++ b/docs/en/Redis-Cache.md @@ -36,4 +36,8 @@ Configure(options => { //... }); -```` \ No newline at end of file +```` + +## See Also + +* [Caching](Caching.md) \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 9116fca5a0..a9f9ed6bba 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -156,7 +156,13 @@ }, { "text": "Caching", - "path": "Caching.md" + "path": "Caching.md", + "items": [ + { + "text": "Redis Cache", + "path": "Redis-Cache.md" + } + ] }, { "text": "Logging", From ee11ba9fa4f85f66a8ce0bd5fe671e9e0f9a75ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 2 Oct 2020 08:29:31 +0300 Subject: [PATCH 114/143] Added initial Blazor docs --- docs/en/UI/Blazor/Overall.md | 6 ++++++ docs/en/UI/Blazor/Services/Notification.md | 3 +++ docs/en/docs-nav.json | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 docs/en/UI/Blazor/Overall.md create mode 100644 docs/en/UI/Blazor/Services/Notification.md diff --git a/docs/en/UI/Blazor/Overall.md b/docs/en/UI/Blazor/Overall.md new file mode 100644 index 0000000000..74c469e3c4 --- /dev/null +++ b/docs/en/UI/Blazor/Overall.md @@ -0,0 +1,6 @@ +# Blazor UI for the ABP Framework + +The detailed documentation for the Blazor UI is in progress. However, you can follow the documents below to start with the Blazor UI today. + +* [Get started](https://docs.abp.io/en/abp/latest/Getting-Started?UI=Blazor) with the Blazor UI for the ABP Framework. +* [Web Application Development Tutorial](https://docs.abp.io/en/abp/latest/Tutorials/Part-1?UI=Blazor) with the Blazor UI. \ No newline at end of file diff --git a/docs/en/UI/Blazor/Services/Notification.md b/docs/en/UI/Blazor/Services/Notification.md new file mode 100644 index 0000000000..0e5ababa0e --- /dev/null +++ b/docs/en/UI/Blazor/Services/Notification.md @@ -0,0 +1,3 @@ +# Blazor UI Notification + +`UiNotificationService` is used to show toastr style notifications on the user interface. The documentation is in progress... \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index a9f9ed6bba..1235d75429 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -430,6 +430,24 @@ } ] }, + { + "text": "Blazor", + "items": [ + { + "text": "Overall", + "path": "UI/Blazor/Overall.md" + }, + { + "text": "Services", + "items": [ + { + "text": "Overall", + "path": "UI/Blazor/Services/Notification.md" + } + ] + } + ] + }, { "text": "Angular", "items": [ From ee7a635979b47c523bc259588dbcf596596e094f Mon Sep 17 00:00:00 2001 From: dellins Date: Fri, 2 Oct 2020 07:48:06 +0100 Subject: [PATCH 115/143] Update Distributed-Event-Bus-Kafka-Integration.md Corrected text referencing multiple RabbitMQ server in the Kafka integration guide. --- docs/en/Distributed-Event-Bus-Kafka-Integration.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/Distributed-Event-Bus-Kafka-Integration.md b/docs/en/Distributed-Event-Bus-Kafka-Integration.md index e4796adf55..57a90c4b83 100644 --- a/docs/en/Distributed-Event-Bus-Kafka-Integration.md +++ b/docs/en/Distributed-Event-Bus-Kafka-Integration.md @@ -89,7 +89,7 @@ Defining multiple connections is allowed. In this case, you can specify the conn } ```` -This allows you to use multiple RabbitMQ server in your application, but select one of them for the event bus. +This allows you to use multiple Kafka cluster in your application, but select one of them for the event bus. You can use any of the [ClientConfig](https://docs.confluent.io/current/clients/confluent-kafka-dotnet/api/Confluent.Kafka.ClientConfig.html) properties as the connection properties. @@ -164,4 +164,4 @@ Configure(options => }); ```` -Using these options classes can be combined with the `appsettings.json` way. Configuring an option property in the code overrides the value in the configuration file. \ No newline at end of file +Using these options classes can be combined with the `appsettings.json` way. Configuring an option property in the code overrides the value in the configuration file. From 3cb44cc209b348bb40ba01ce7300e306c20183c2 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Fri, 2 Oct 2020 10:28:53 +0300 Subject: [PATCH 116/143] docs: add document on PWAs --- docs/en/.vscode/settings.json | 2 + docs/en/UI/Angular/PWA-Configuration.md | 342 ++++++++++++++++++ .../images/pwa-configuration-ng-add.png | Bin 0 -> 252484 bytes 3 files changed, 344 insertions(+) create mode 100644 docs/en/UI/Angular/PWA-Configuration.md create mode 100644 docs/en/UI/Angular/images/pwa-configuration-ng-add.png diff --git a/docs/en/.vscode/settings.json b/docs/en/.vscode/settings.json index 88052badbc..d04572b96c 100644 --- a/docs/en/.vscode/settings.json +++ b/docs/en/.vscode/settings.json @@ -7,7 +7,9 @@ "formatter", "md", "monorepo", + "ngsw", "npx", + "pwa", "rootNamespace" ] } \ No newline at end of file diff --git a/docs/en/UI/Angular/PWA-Configuration.md b/docs/en/UI/Angular/PWA-Configuration.md new file mode 100644 index 0000000000..918aa4970d --- /dev/null +++ b/docs/en/UI/Angular/PWA-Configuration.md @@ -0,0 +1,342 @@ +# PWA Configuration + +[Progressive Web Apps](https://web.dev/progressive-web-apps/) are web applications which, although not as integrated to the OS as a native app, can take advantage of native features. They can be discovered via search engines, installed on devices with a single tap or click, and shared via a regular link. They also can work offline and get updates when new content is available. + +Converting your Angular application to a PWA is easy. + +## 1. Install Angular PWA + +Run the following command in the root folder of your Angular application: + +```shell +yarn ng add @angular/pwa +``` + +...or... + +```shell +npm run ng add @angular/pwa +``` + +This will install the `@angular/service-worker` package and make your default app a PWA. Alternatively, you may add `project` parameter to target a specific app in your workspace: + +```shell +yarn ng add @angular/pwa --project MyProjectName +``` + +Here is the output of the command: + +Angular PWA updates and creates files + +So, Angular CLI updates some files and add a few others: + +- **ngsw-config.json** is where the [service worker configuration](https://angular.io/guide/service-worker-config) is placed. Not all PWAs have this file. It is specific to Angular. +- **manifest.webmanifest** is a [web app manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) and provides information about your app in JSON format. +- **icons** are placeholder icons that are referred to in your web app manifest. We will replace these in a minute. +- **angular.json** has following modifications: + - `assets` include _manifest.webmanifest_. + - `serviceWorker` is `true` in production build. + - `ngswConfigPath` refers to _ngsw-config.json_. +- **package.json** has _@angular/service-worker_ as a new dependency. +- **app.module.ts** imports `ServiceWorkerModule` and registers a service worker filename. +- **index.html** has following modifications: + - A `` element that refers to _manifest.webmanifest_. + - A `` tag that sets a theme color. + +## 2. Update the Web App Manifest + +### 2.1. Set the Name of Your App + +The `name` and the `short_name` properties in the generated manifest are derived from your project name. Let's change them. + +Open the _manifest.webmanifest_ file and update `name` and `short_name` props: + +```json +{ + /* rest of the manifest meta data */ + "short_name": "My Project", + "name": "My Project: My Catch-Phrase" +} +``` + +The short name must be really short because it will be displayed on anywhere with limited space, like the launcher and the home screen. + +### 2.2. Add a Description + +The `@angular/pwa` schematic we just added does not insert a description to your manifest file, but, according to [web app manifest standards](https://www.w3.org/TR/appmanifest/#description-member), you should. + +So, open the _manifest.webmanifest_ file and place the description as seen below: + +```json +{ + /* rest of the manifest meta data */ + "description": "My short project description giving a slightly better idea about my app" +} +``` + +As a bonus, providing a description [along with other criteria](https://docs.microsoft.com/en-us/microsoft-edge/progressive-web-apps-edgehtml/microsoft-store#criteria-for-automatic-submission) helps Bing web crawler to index your app and automatically submit your app to Microsoft Store in `.appx` format. + +### 2.3. Set App Colors + +Angular generates the manifest file with a default `theme_color` and `background_color`. Change these according to your brand identity: + +Open the _manifest.webmanifest_ file and update `theme_color` and `background_color` properties: + +```json +{ + /* rest of the manifest meta data */ + "theme_color": "#000000", + "background_color": "#ffffff" +} +``` + +Then open _index.html_ and change the theme color meta tag as below: + +```html + +``` + +### 2.4. Replace App Icons & Add Splash Screens + +We need to update the icons and add some splash screens. This normally is time-consuming, but we will use the marvelous [pwa-asset-generator](https://github.com/onderceylan/pwa-asset-generator#readme) library. + +First, open the _manifest.webmanifest_ file and remove all elements in the `icons` property: + +```json +{ + /* rest of the manifest meta data */ + "icons": [] +} +``` + +Then, run the following command in your terminal (changing the path of course): + +```shell +npx pwa-asset-generator /path/to/your/logo.png ./src/assets/pwa -i ./src/index.html -m ./src/manifest.webmanifest +``` + +Open the _manifest.webmanifest_ file again. You will see this: + +```json +{ + /* rest of the manifest meta data */ + "icons": [ + { + "src": "../manifest-icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable any" + }, + { + "src": "../manifest-icon-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable any" + } + ] +} +``` + +In addition to updated icons, the library will generate splash screens. However, Apple requires all splash screens to be added in your _index.html_ and displays a blank screen at startup otherwise. So, the following tags will be inserted into the _index.html_ file: + +```html + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +``` + +## 3. Configure Service Worker + +### 3.1 Modify Asset Groups + +Angular has defined some static files to be cached by the service worker, but they are not 100% accurate. Let's change it. + +Open _ngsw-config.json_ file and replace its content with this: + +```json +{ + "$schema": "./node_modules/@angular/service-worker/config/schema.json", + "index": "/index.html", + "assetGroups": [ + { + "name": "app", + "installMode": "prefetch", + "resources": { + "files": [ + "/favicon.ico", + "/index.html", + "/manifest.webmanifest", + "/*.css", + "/common-es2015.*.js", + "/main-es2015.*.js", + "/polyfills-es2015.*.js", + "/runtime-es2015.*.js", + "/vendor-es2015.*.js" + ] + } + }, + { + "name": "modules", + "installMode": "lazy", + "updateMode": "prefetch", + "resources": { + "files": [ + "/*-es2015.*.js", + "!/common-es2015.*.js", + "!/main-es2015.*.js", + "!/polyfills-es2015.*.js", + "!/runtime-es2015.*.js", + "!/vendor-es2015.*.js" + ] + } + }, + { + "name": "assets", + "installMode": "lazy", + "updateMode": "prefetch", + "resources": { + "files": [ + "/assets/**", + "/*.(eot|svg|cur|jpg|png|webp|gif|otf|ttf|woff|woff2|ani)" + ] + } + } + ] +} +``` + +In case you want to cache other static files, please refer to the [service worker configuration document](https://angular.io/guide/service-worker-config#assetgroups) on Angular.io. + +### 3.2 Set Data Groups + +This part is unique to your project. We recommend being very careful about which endpoints to cache. Please refer to [service worker configuration document](https://angular.io/guide/service-worker-config#datagroups) on Angular.io for details. diff --git a/docs/en/UI/Angular/images/pwa-configuration-ng-add.png b/docs/en/UI/Angular/images/pwa-configuration-ng-add.png new file mode 100644 index 0000000000000000000000000000000000000000..f96ac3bef16ede88f64287682f820b7446e08d06 GIT binary patch literal 252484 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 z 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 z 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
  • 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 U74+4Q?|^@@(n?Z=lKOuC2W@0qga7~l literal 0 HcmV?d00001 From 2be063c75e5d7605e11fe8f747dea8f681e8f0c4 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Fri, 2 Oct 2020 10:29:07 +0300 Subject: [PATCH 117/143] docs: add PWA doc to navigation --- docs/en/docs-nav.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 9116fca5a0..dfeea6d98c 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -449,6 +449,10 @@ { "text": "Service Proxies", "path": "UI/Angular/Service-Proxies.md" + }, + { + "text": "PWA Configuration", + "path": "UI/Angular/PWA-Configuration.md" } ] }, From 8cf87094f92001946adc99ca58969d8617735faf Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Fri, 2 Oct 2020 10:32:33 +0300 Subject: [PATCH 118/143] docs: add links to/from PWA configuration document --- docs/en/UI/Angular/PWA-Configuration.md | 4 ++++ docs/en/UI/Angular/Service-Proxies.md | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/PWA-Configuration.md b/docs/en/UI/Angular/PWA-Configuration.md index 918aa4970d..a6aee244ba 100644 --- a/docs/en/UI/Angular/PWA-Configuration.md +++ b/docs/en/UI/Angular/PWA-Configuration.md @@ -340,3 +340,7 @@ In case you want to cache other static files, please refer to the [service worke ### 3.2 Set Data Groups This part is unique to your project. We recommend being very careful about which endpoints to cache. Please refer to [service worker configuration document](https://angular.io/guide/service-worker-config#datagroups) on Angular.io for details. + +## What's Next? + +- [Config State](./Config-State.md) diff --git a/docs/en/UI/Angular/Service-Proxies.md b/docs/en/UI/Angular/Service-Proxies.md index becec11ed9..92c4b01871 100644 --- a/docs/en/UI/Angular/Service-Proxies.md +++ b/docs/en/UI/Angular/Service-Proxies.md @@ -140,4 +140,4 @@ export class BookComponent implements OnInit { ## What's Next? -- [Config State](./Config-State.md) +- [PWA Configuration](./PWA-Configuration.md) From 0b238863759a24b1f2ed6085c82464c8cd2f03dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 2 Oct 2020 10:50:54 +0300 Subject: [PATCH 119/143] Create Forms-Validation.md --- docs/en/UI/AspNetCore/Forms-Validation.md | 83 +++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 docs/en/UI/AspNetCore/Forms-Validation.md diff --git a/docs/en/UI/AspNetCore/Forms-Validation.md b/docs/en/UI/AspNetCore/Forms-Validation.md new file mode 100644 index 0000000000..2bac932311 --- /dev/null +++ b/docs/en/UI/AspNetCore/Forms-Validation.md @@ -0,0 +1,83 @@ +# ASP.NET Core MVC / Razor Pages: Forms & Validation + +ABP Framework provides infrastructure and conventions to make easier to create forms, localize display names for the form elements and handle server & client side validation; + +* [abp-dynamic-form](Tag-Helpers/Dynamic-Forms.md) tag helper automates **creating a complete form** from a C# model class: Creates the input elements, handles localization and client side validation. +* [ABP Form tag helpers](Tag-Helpers/Form-elements.md) (`abp-input`, `abp-select`, `abp-radio`...) render **a single form element** with handling localization and client side validation. +* ABP Framework automatically **localizes the display name** of a form element without needing to add a `[DisplayName]` attribute. +* **Validation errors** are automatically localized based on the user culture. + +> This document is for the **client side validation** and it doesn't cover the server side validation. Check the [validation document](../../Validation.md) for server side validation infrastructure. + +## The Classic Way + +In a typical Bootstrap based ASP.NET Core MVC / Razor Pages UI, you [need to write](https://docs.microsoft.com/en-us/aspnet/core/mvc/models/validation#client-side-validation) such a boilerplate code to create a simple form element: + +````html +

    +```` + +You can continue to use this approach if you need or prefer it. However, ABP Form tag helpers can produce the same output with a minimal code. + +## ABP Dynamic Forms + +[abp-dynamic-form](Tag-Helpers/Dynamic-Forms.md) tag helper completely automates the form creation. Take this model class as an example: + +```csharp +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form; + +namespace MyProject.Web.Pages +{ + public class MovieViewModel + { + [Required] + [StringLength(256)] + public string Name { get; set; } + + [Required] + [DataType(DataType.Date)] + public DateTime ReleaseDate { get; set; } + + [Required] + [TextArea] + [StringLength(1000)] + public string Description { get; set; } + + public Genre Genre { get; set; } + + public float? Price { get; set; } + + public bool PreOrder { get; set; } + } +} +``` + +It uses the data annotation attributes to define validation rules and UI styles for the properties. `Genre`, is an `enum` in this example: + +````csharp +namespace MyProject.Web.Pages +{ + public enum Genre + { + Classic, + Action, + Fiction, + Fantasy, + Animation + } +} +```` + +## ABP Form Tag Helpers + + + +## See Also + +* [Server Side Validation](../../Validation.md) \ No newline at end of file From 59688af816f54968742f15426247b8ea3b2e10f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 2 Oct 2020 10:55:13 +0300 Subject: [PATCH 120/143] Created empty IUiNotificationService for Blazor --- .../WebAssembly/IUiNotificationService.cs | 9 +++++++++ .../WebAssembly/NullUiNotificationService.cs | 13 +++++++++++++ .../BlazoriseUI/BlazoriseUiNotificationService.cs | 15 +++++++++++++++ 3 files changed, 37 insertions(+) create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs create mode 100644 framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs create mode 100644 framework/src/Volo.Abp.BlazoriseUI/Volo/Abp/BlazoriseUI/BlazoriseUiNotificationService.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs new file mode 100644 index 0000000000..a25bf75ae0 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/IUiNotificationService.cs @@ -0,0 +1,9 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + public interface IUiNotificationService + { + Task Info(string message); + } +} diff --git a/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs new file mode 100644 index 0000000000..d93aaa8e83 --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Components.WebAssembly/Volo/Abp/AspNetCore/Components/WebAssembly/NullUiNotificationService.cs @@ -0,0 +1,13 @@ +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.AspNetCore.Components.WebAssembly +{ + public class NullUiNotificationService : IUiNotificationService, ITransientDependency + { + public Task Info(string message) + { + return Task.CompletedTask; + } + } +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.BlazoriseUI/Volo/Abp/BlazoriseUI/BlazoriseUiNotificationService.cs b/framework/src/Volo.Abp.BlazoriseUI/Volo/Abp/BlazoriseUI/BlazoriseUiNotificationService.cs new file mode 100644 index 0000000000..00ef875790 --- /dev/null +++ b/framework/src/Volo.Abp.BlazoriseUI/Volo/Abp/BlazoriseUI/BlazoriseUiNotificationService.cs @@ -0,0 +1,15 @@ +using System.Threading.Tasks; +using Volo.Abp.AspNetCore.Components.WebAssembly; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.BlazoriseUI +{ + [Dependency(ReplaceServices = true)] + public class BlazoriseUiNotificationService : IUiNotificationService, ITransientDependency + { + public Task Info(string message) + { + throw new System.NotImplementedException(); + } + } +} From 28bf833e5489dac64157862a1e044065ff47864c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 2 Oct 2020 11:06:06 +0300 Subject: [PATCH 121/143] Used logger for BlazoriseUiNotificationService --- .../BlazoriseUI/BlazoriseUiNotificationService.cs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.BlazoriseUI/Volo/Abp/BlazoriseUI/BlazoriseUiNotificationService.cs b/framework/src/Volo.Abp.BlazoriseUI/Volo/Abp/BlazoriseUI/BlazoriseUiNotificationService.cs index 00ef875790..5163e05467 100644 --- a/framework/src/Volo.Abp.BlazoriseUI/Volo/Abp/BlazoriseUI/BlazoriseUiNotificationService.cs +++ b/framework/src/Volo.Abp.BlazoriseUI/Volo/Abp/BlazoriseUI/BlazoriseUiNotificationService.cs @@ -1,4 +1,6 @@ using System.Threading.Tasks; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Volo.Abp.AspNetCore.Components.WebAssembly; using Volo.Abp.DependencyInjection; @@ -7,9 +9,17 @@ namespace Volo.Abp.BlazoriseUI [Dependency(ReplaceServices = true)] public class BlazoriseUiNotificationService : IUiNotificationService, ITransientDependency { + public ILogger Logger { get; set; } + + public BlazoriseUiNotificationService() + { + Logger = NullLogger.Instance; + } + public Task Info(string message) { - throw new System.NotImplementedException(); + Logger.LogInformation(message); + return Task.CompletedTask; } } } From 489e855bc057342c40a8b3ea7a25aa73e1962a44 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 2 Oct 2020 11:28:53 +0300 Subject: [PATCH 122/143] Cli add-module improvements & blazor support resolves https://github.com/abpframework/abp/issues/5454 resolves https://github.com/abpframework/abp/issues/5680 --- .../ProjectModification/NuGetPackageTarget.cs | 5 +- .../Cli/ProjectModification/ProjectFinder.cs | 6 +- .../SolutionFileModifier.cs | 61 +++++++++++++++- .../SolutionModuleAdder.cs | 69 +++++++++++++++++-- 4 files changed, 127 insertions(+), 14 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs index 890053049f..10274f3528 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/NuGetPackageTarget.cs @@ -12,6 +12,7 @@ Web = 7, EntityFrameworkCore = 8, MongoDB = 9, - SignalR = 10 + SignalR = 10, + Blazor = 11 } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs index d4b3a62b94..0c02f8cb87 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/ProjectFinder.cs @@ -45,6 +45,8 @@ namespace Volo.Abp.Cli.ProjectModification return FindProjectEndsWith(projectFiles, assemblyNames, ".SignalR") ?? FindProjectEndsWith(projectFiles, assemblyNames, ".Web") ?? FindProjectEndsWith(projectFiles, assemblyNames, ".HttpApi.Host"); + case NuGetPackageTarget.Blazor: + return FindProjectEndsWith(projectFiles, assemblyNames, ".Blazor"); default: return null; } @@ -103,8 +105,8 @@ namespace Volo.Abp.Cli.ProjectModification private static string FindProjectEndsWith( string[] projectFiles, - string[] assemblyNames, - string postfix, + string[] assemblyNames, + string postfix, string excludePostfix = null) { for (var i = 0; i < assemblyNames.Length; i++) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs index 4eabeaa846..a24b31e5f1 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionFileModifier.cs @@ -10,6 +10,61 @@ namespace Volo.Abp.Cli.ProjectModification { public class SolutionFileModifier : ITransientDependency { + public async Task RemoveProjectFromSolutionFileAsync(string solutionFile, string projectName) + { + var solutionFileContent = File.ReadAllText(solutionFile); + solutionFileContent.NormalizeLineEndings(); + var lines = solutionFileContent.Split(new[] {Environment.NewLine, "\n"}, StringSplitOptions.None); + File.WriteAllText(solutionFile, RemoveProject(lines.ToList(), projectName).JoinAsString(Environment.NewLine)); + } + + private List RemoveProject(List solutionFileLines, string projectName) + { + var projectKey = FindProjectKey(solutionFileLines, projectName); + + if (projectKey == null) + { + return solutionFileLines; + } + + var newSolutionFileLines = new List(); + var firstOccurence = true; + + for (var i = 0; i < solutionFileLines.Count; ++i) + { + if (solutionFileLines[i].Contains(projectKey)) + { + if (firstOccurence) + { + firstOccurence = false; + ++i; //Skip "EndProject" line too. + } + + continue; + } + + newSolutionFileLines.Add(solutionFileLines[i]); + } + + return newSolutionFileLines; + } + + private string FindProjectKey(List solutionFileLines, string projectName) + { + var projectNameWithQuotes = $"\"{projectName}\""; + foreach (var solutionFileLine in solutionFileLines) + { + if (solutionFileLine.Contains(projectNameWithQuotes)) + { + var curlyBracketStartIndex = solutionFileLine.LastIndexOf("{", StringComparison.OrdinalIgnoreCase); + var curlyBracketEndIndex = solutionFileLine.LastIndexOf("}", StringComparison.OrdinalIgnoreCase); + return solutionFileLine.Substring(curlyBracketStartIndex + 1, curlyBracketEndIndex - curlyBracketStartIndex - 1); + } + } + + return null; + } + public async Task AddModuleToSolutionFileAsync(ModuleWithMastersInfo module, string solutionFile) { await AddModule(module, solutionFile); @@ -19,7 +74,7 @@ namespace Volo.Abp.Cli.ProjectModification { var srcModuleFolderId = await AddNewFolderAndGetIdOrGetExistingId(solutionFile, module.Name, await AddNewFolderAndGetIdOrGetExistingId(solutionFile, "modules")); var testModuleFolderId = await AddNewFolderAndGetIdOrGetExistingId(solutionFile, module.Name + ".Tests", await AddNewFolderAndGetIdOrGetExistingId(solutionFile, "test")); - + var file = File.ReadAllText(solutionFile); var lines = file.Split(Environment.NewLine).ToList(); @@ -52,7 +107,7 @@ namespace Volo.Abp.Cli.ProjectModification + Environment.NewLine + "EndProject"; lines.InsertAfter(l => l.Trim().Equals("EndProject"), newProjectLine); - + var newPostSolutionLine = " {" + projectGuid + "}.Debug|Any CPU.ActiveCfg = Debug|Any CPU" + Environment.NewLine + " {" + projectGuid + "}.Debug|Any CPU.Build.0 = Debug|Any CPU" + Environment.NewLine + @@ -60,7 +115,7 @@ namespace Volo.Abp.Cli.ProjectModification " {" + projectGuid + "}.Release|Any CPU.Build.0 = Release|Any CPU"; lines.InsertAfter(l=>l.Contains("GlobalSection") && l.Contains("ProjectConfigurationPlatforms"), newPostSolutionLine); - + var newPreSolutionLine = " {"+ projectGuid + "} = {"+ parentFolderId + "}"; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs index 4cbeb2ba26..cc563f97cf 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectModification/SolutionModuleAdder.cs @@ -76,7 +76,8 @@ namespace Volo.Abp.Cli.ProjectModification var module = await FindModuleInfoAsync(moduleName); - Logger.LogInformation($"Installing module '{module.Name}' to the solution '{Path.GetFileNameWithoutExtension(solutionFile)}'"); + Logger.LogInformation( + $"Installing module '{module.Name}' to the solution '{Path.GetFileNameWithoutExtension(solutionFile)}'"); var projectFiles = ProjectFinder.GetProjectFiles(solutionFile); @@ -86,6 +87,7 @@ namespace Volo.Abp.Cli.ProjectModification { var modulesFolderInSolution = Path.Combine(Path.GetDirectoryName(solutionFile), "modules"); await DownloadSourceCodesToSolutionFolder(module, modulesFolderInSolution, version); + await RemoveUnnecessaryProjectsAsync(Path.GetDirectoryName(solutionFile), module, projectFiles); if (addSourceCodeToSolutionFile) { @@ -103,6 +105,53 @@ namespace Volo.Abp.Cli.ProjectModification ModifyDbContext(projectFiles, module, startupProject, skipDbMigrations); } + private async Task RemoveUnnecessaryProjectsAsync(string solutionDirectory, ModuleWithMastersInfo module, string[] projectFiles) + { + var moduleDirectory = Path.Combine(solutionDirectory, "modules", module.Name); + var moduleSolutionFile = Directory.GetFiles(moduleDirectory, "*.sln", SearchOption.TopDirectoryOnly).First(); + var isProjectTiered = await IsProjectTiered(projectFiles); + + if (!projectFiles.Any(p => p.EndsWith(".Blazor.csproj"))) + { + await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Blazor,isProjectTiered); + } + + if (!projectFiles.Any(p => p.EndsWith(".Web.csproj"))) + { + await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.Web, isProjectTiered); + } + + if (!projectFiles.Any(p => p.EndsWith(".MongoDB.csproj"))) + { + await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.MongoDB, isProjectTiered); + } + + if (!projectFiles.Any(p => p.EndsWith(".EntityFrameworkCore.csproj"))) + { + await RemoveProjectByTarget(module, moduleSolutionFile, NuGetPackageTarget.EntityFrameworkCore, isProjectTiered); + } + } + + private async Task RemoveProjectByTarget(ModuleWithMastersInfo module, string moduleSolutionFile, NuGetPackageTarget target, bool isTieredProject) + { + var packages = module.NugetPackages.Where(n => + (isTieredProject && n.TieredTarget != NuGetPackageTarget.Undefined + ? n.TieredTarget + : n.Target) == target + ).ToList(); + + foreach (var package in packages) + { + await SolutionFileModifier.RemoveProjectFromSolutionFileAsync(moduleSolutionFile, package.Name); + + var projectPath = Path.Combine(Path.GetDirectoryName(moduleSolutionFile), "src", package.Name); + if (Directory.Exists(projectPath)) + { + Directory.Delete(projectPath, true); + } + } + } + private async Task AddAngularPackages(string solutionFilePath, ModuleWithMastersInfo module) { var angularPath = Path.Combine(Path.GetDirectoryName(Path.GetDirectoryName(solutionFilePath)), "angular"); @@ -112,7 +161,8 @@ namespace Volo.Abp.Cli.ProjectModification return; } - var angularPackages = module.NpmPackages?.Where(p => p.ApplicationType.HasFlag(NpmApplicationType.Angular)).ToList(); + var angularPackages = module.NpmPackages?.Where(p => p.ApplicationType.HasFlag(NpmApplicationType.Angular)) + .ToList(); if (!angularPackages.IsNullOrEmpty()) { @@ -150,7 +200,8 @@ namespace Volo.Abp.Cli.ProjectModification } } - private async Task DownloadSourceCodesToSolutionFolder(ModuleWithMastersInfo module, string modulesFolderInSolution, string version = null) + private async Task DownloadSourceCodesToSolutionFolder(ModuleWithMastersInfo module, + string modulesFolderInSolution, string version = null) { var targetModuleFolder = Path.Combine(modulesFolderInSolution, module.Name); @@ -216,7 +267,8 @@ namespace Volo.Abp.Cli.ProjectModification await ProjectNugetPackageAdder.AddAsync(targetProjectFile, nugetPackage); } - var mvcNpmPackages = module.NpmPackages?.Where(p => p.ApplicationType.HasFlag(NpmApplicationType.Mvc)).ToList(); + var mvcNpmPackages = module.NpmPackages?.Where(p => p.ApplicationType.HasFlag(NpmApplicationType.Mvc)) + .ToList(); if (!mvcNpmPackages.IsNullOrEmpty()) { @@ -240,7 +292,8 @@ namespace Volo.Abp.Cli.ProjectModification } } - protected void ModifyDbContext(string[] projectFiles, ModuleInfo module, string startupProject, bool skipDbMigrations = false) + protected void ModifyDbContext(string[] projectFiles, ModuleInfo module, string startupProject, + bool skipDbMigrations = false) { if (string.IsNullOrWhiteSpace(module.EfCoreConfigureMethodName)) { @@ -275,11 +328,13 @@ namespace Volo.Abp.Cli.ProjectModification if (dbContextFile == null) { - Logger.LogDebug($"{dbMigrationsProject} project doesn't have a class that is derived from \"AbpDbContext\"."); + Logger.LogDebug( + $"{dbMigrationsProject} project doesn't have a class that is derived from \"AbpDbContext\"."); return; } - var addedNewBuilder = DbContextFileBuilderConfigureAdder.Add(dbContextFile, module.EfCoreConfigureMethodName); + var addedNewBuilder = + DbContextFileBuilderConfigureAdder.Add(dbContextFile, module.EfCoreConfigureMethodName); if (!skipDbMigrations) { From cacf4bc351f040d8bb53d5510aff65dbde4fc3de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 2 Oct 2020 13:54:40 +0300 Subject: [PATCH 123/143] Added ABP Form Tag Helpers section --- docs/en/UI/AspNetCore/Forms-Validation.md | 51 +++++++++++++++++- .../AspNetCore/Tag-Helpers/Dynamic-Forms.md | 8 +-- docs/en/images/abp-dynamic-form-result.png | Bin 0 -> 55351 bytes 3 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 docs/en/images/abp-dynamic-form-result.png diff --git a/docs/en/UI/AspNetCore/Forms-Validation.md b/docs/en/UI/AspNetCore/Forms-Validation.md index 2bac932311..e8ef7b7ee7 100644 --- a/docs/en/UI/AspNetCore/Forms-Validation.md +++ b/docs/en/UI/AspNetCore/Forms-Validation.md @@ -74,9 +74,58 @@ namespace MyProject.Web.Pages } ```` -## ABP Form Tag Helpers +In order to create the form in a razor page, create a property in your `PageModel` class: + +```csharp +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.RazorPages; + +namespace MyProject.Web.Pages +{ + public class CreateMovieModel : PageModel + { + [BindProperty] + public MovieViewModel Movie { get; set; } + + public void OnGet() + { + Movie = new MovieViewModel(); + } + + public async Task OnPostAsync() + { + if (ModelState.IsValid) + { + //TODO: Save the Movie + } + } + } +} +``` +Then you can render the form in the `.cshtml` file: + +```html +@page +@model MyProject.Web.Pages.CreateMovieModel + +

    Create a new Movie

    + + +``` + +The result is shown below: + +![abp-dynamic-form-result](../../images/abp-dynamic-form-result.png) + +See the *Localization & Validation* section below to localize the field display names and see how the validation works. + +> See [its own document](Tag-Helpers/Dynamic-Forms.md) for all options of the `abp-dynamic-form` tag helper. + +## ABP Form Tag Helpers +## Localization & Validation ## See Also diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Dynamic-Forms.md b/docs/en/UI/AspNetCore/Tag-Helpers/Dynamic-Forms.md index 3992c7d8a1..0c374a9cf8 100644 --- a/docs/en/UI/AspNetCore/Tag-Helpers/Dynamic-Forms.md +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Dynamic-Forms.md @@ -1,7 +1,5 @@ # Dynamic Forms -`Warning:` Before getting into this document, be sure that you have clearly understood [abp form elements](Form-elements.md) document. - ## Introduction `abp-dynamic-form` creates a bootstrap form for a given c# model. @@ -272,4 +270,8 @@ You can set it yourself by using `[Display()]` attribute of Asp.Net Core. You ca ````csharp [Display(Name = "Name")] public string Name { get; set; } -```` \ No newline at end of file +```` + +## See Also + +* [Form Elements](Form-elements.md) \ No newline at end of file diff --git a/docs/en/images/abp-dynamic-form-result.png b/docs/en/images/abp-dynamic-form-result.png new file mode 100644 index 0000000000000000000000000000000000000000..f9ecf14bd0c4c7e9a9dfb94d5bb996bf4015d822 GIT binary patch literal 55351 zcmdpd=U^7b?@dMNy?3Pd&mzZNqtcF%s7Df=p~>sQCQ`4?%Krnt`BR67y5D~9w4Dol5FQln|;U3@P2AJ-?CP=-xhkN{C;(c=W^>wV=-Q#WO|4U6* z9*;yuMw%C};b!uZF&^*In2-F%C*!c>iSpyek#rJRKfk~!B<{xx|MSenTvu8=qwgu> z_TfIph843ESi>E9rHQv1^mury9f2N4>f1s4rBmx&Qy=~8Br~fEOE83his)pW4SH(Q zcS4RUmJY;7NEw-9W!cgu0RATsp$27HCOw3Xf8;uh^!4}AFBd?HQVXf`R3c;~Cr?@#a;fRC?sGvC zx8e%-o{pY?EKUA9EvQ-8; QfTHzO03zDfEqtqG4)-+*+&QkIif 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�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%0AiM~1e>NJD`;`M03u;-gYZgdNkp|yPK9g| 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 fKTPPS^riIA_o@1?cYXN=3{VD7S3j3^P6 Date: Fri, 2 Oct 2020 14:19:06 +0300 Subject: [PATCH 124/143] abp-imput checkbox margin-bottom-2 --- .../TagHelpers/Form/AbpInputTagHelperService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs index 5bebab0257..9436acbbbf 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Form/AbpInputTagHelperService.cs @@ -97,7 +97,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Form protected virtual string SurroundInnerHtmlAndGet(TagHelperContext context, TagHelperOutput output, string innerHtml, bool isCheckbox) { - return "
    " + + return "
    " + Environment.NewLine + innerHtml + Environment.NewLine + "
    "; } From f10f3d59375e3483b1dd88ab45a9d5fe6198465a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Fri, 2 Oct 2020 14:54:23 +0300 Subject: [PATCH 125/143] Update Environment.md --- docs/en/UI/Angular/Environment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Environment.md b/docs/en/UI/Angular/Environment.md index ab2a99c8d8..708f77b91c 100644 --- a/docs/en/UI/Angular/Environment.md +++ b/docs/en/UI/Angular/Environment.md @@ -54,7 +54,7 @@ Everything else will be sent to `"https://localhost:8080"` * `rootNamespace` **(new)** : Root namespace of the related API. e.g. Acme.BookStore -## Application +## Application ```js export interface Application { From 1bcd6a0cafc1c988a56e765461a823a31f1af721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Fri, 2 Oct 2020 14:54:58 +0300 Subject: [PATCH 126/143] Update Environment.md --- docs/en/UI/Angular/Environment.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Environment.md b/docs/en/UI/Angular/Environment.md index 708f77b91c..1b78a11cc6 100644 --- a/docs/en/UI/Angular/Environment.md +++ b/docs/en/UI/Angular/Environment.md @@ -69,7 +69,7 @@ Everything else will be sent to `"https://localhost:8080"` * `baseUrl`: [For detailed information](./Multi-Tenancy.md#domain-tenant-resolver) -## AuthConfig +## AuthConfig For authentication, we use angular-oauth2-oidc. Please check their [docs](https://github.com/manfredsteyer/angular-oauth2-oidc) out From bc8d19fd3108e32d705129dbd3f0e2f10e989b8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Levent=20Arman=20=C3=96zak?= Date: Fri, 2 Oct 2020 14:56:56 +0300 Subject: [PATCH 127/143] Update Toaster-Service.md --- docs/en/UI/Angular/Toaster-Service.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Angular/Toaster-Service.md b/docs/en/UI/Angular/Toaster-Service.md index d2c1fc08f3..f6d5c71e99 100644 --- a/docs/en/UI/Angular/Toaster-Service.md +++ b/docs/en/UI/Angular/Toaster-Service.md @@ -67,7 +67,7 @@ With the options above, the toast overlay looks like this: ![toast](./images/toast.png) -### How to Remove a Toast Overlay +### How to Remove a Toast Overlay The open toast overlay can be removed manually via the `remove` method by passing the `id` of toast: From bf194cc68275feba7acc94a4f75d70008b3a61d4 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Fri, 2 Oct 2020 15:22:38 +0300 Subject: [PATCH 128/143] Fix: Links with `.md#` are failing resolves https://github.com/volosoft/volo/issues/3575 --- .../Markdown/MarkdownDocumentToHtmlConverter.cs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs index 9942c52309..48daaff769 100644 --- a/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs +++ b/modules/docs/src/Volo.Docs.Web/Markdown/MarkdownDocumentToHtmlConverter.cs @@ -74,6 +74,15 @@ namespace Volo.Docs.Markdown return Regex.Replace(content, MarkdownLinkRegExp, delegate (Match match) { var link = match.Groups[3].Value; + + var hashPart = ""; + if (link.Contains("#")) + { + var linkSplitted = link.Split("#"); + link = linkSplitted[0]; + hashPart = linkSplitted[1]; + } + if (UrlHelper.IsExternalLink(link)) { return match.Value; @@ -100,6 +109,11 @@ namespace Volo.Docs.Markdown documentLocalDirectoryNormalized = "/" + documentLocalDirectoryNormalized; } + if (!string.IsNullOrEmpty(hashPart)) + { + documentName += $"#{hashPart}"; + } + return string.Format( MdLinkFormat, displayText, From 54512b5412083a8958d6e6a000ffc21b2cb49b4d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 2 Oct 2020 15:29:22 +0300 Subject: [PATCH 129/143] Completed the Forms & Validation document for ASP.NET Core MVC / Razor Pages --- docs/en/Localization.md | 5 +- docs/en/UI/AspNetCore/Forms-Validation.md | 76 +++++++++++++++++- docs/en/docs-nav.json | 6 +- ...orm-input-validation-error-french-name.png | Bin 0 -> 4382 bytes ...abp-form-input-validation-error-french.png | Bin 0 -> 4892 bytes .../abp-form-input-validation-error.png | Bin 0 -> 4401 bytes 6 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 docs/en/images/abp-form-input-validation-error-french-name.png create mode 100644 docs/en/images/abp-form-input-validation-error-french.png create mode 100644 docs/en/images/abp-form-input-validation-error.png diff --git a/docs/en/Localization.md b/docs/en/Localization.md index 954fe8620f..37104a4878 100644 --- a/docs/en/Localization.md +++ b/docs/en/Localization.md @@ -2,7 +2,7 @@ ABP's localization system is seamlessly integrated to the `Microsoft.Extensions.Localization` package and compatible with the [Microsoft's localization documentation](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/localization). It adds some useful features and enhancements to make it easier to use in real life application scenarios. -## Volo.Abp.Localization Package +## Installation > This package is already installed by default with the startup template. So, most of the time, you don't need to install it manually. @@ -242,4 +242,5 @@ Both of the samples above produce the output `Hello John, welcome!`. ## See Also -* [Localization in Angular UI](UI/Angular/Localization.md) \ No newline at end of file +* [Localization in Angular UI](UI/Angular/Localization.md) +* [Forms & Validation](UI/AspNetCore/Forms-Validation.md) for the ASP.NET Core MVC / Razor Pages UI \ No newline at end of file diff --git a/docs/en/UI/AspNetCore/Forms-Validation.md b/docs/en/UI/AspNetCore/Forms-Validation.md index e8ef7b7ee7..2934e81658 100644 --- a/docs/en/UI/AspNetCore/Forms-Validation.md +++ b/docs/en/UI/AspNetCore/Forms-Validation.md @@ -125,7 +125,81 @@ See the *Localization & Validation* section below to localize the field display ## ABP Form Tag Helpers -## Localization & Validation +While `abp-dynamic-form` covers most of the scenarios and allows you to control and customize the form using the attributes. + +However, if you want to **render the form body yourself** (for example, you may want to fully control the **form layout**), you can directly use the [ABP Form Tag Helpers](Tag-Helpers/Form-elements.md). The same auto-generated form above can be created using the ABP Form Tag Helpers as shown below: + +```html +@page +@model MyProject.Web.Pages.CreateMovieModel + +

    Create a new Movie

    + +
    + + + + + + + Save + +``` + +> See the [ABP Form Tag Helpers](Tag-Helpers/Form-elements.md) document for details of these tag helpers and their options. + +## Validation & Localization + +Both of the Dynamic Form and the Form Tag Helpers **automatically validate** the input based on the data annotation attributes and shows validation error messages on the user interface. Error messages are **automatically localized** based on the current culture. + +**Example: User leaves empty a requires string property** + +![abp-form-input-validation-error](../../images/abp-form-input-validation-error.png) + +The error message below is shown if the language is French: + +![abp-form-input-validation-error](../../images/abp-form-input-validation-error-french.png) + +Validation errors are already [translated](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.Validation/Volo/Abp/Validation/Localization) a lot of languages. You can [contribute](../../Contribution/Index.md) to the translation for your own language or override the texts for your own application by following the [localization](../../Localization.md) documentation. + +## Display Name Localization + +ABP Framework uses the property name as the field name on the user interface. You typically want to [localize](../../Localization.md) this name based on the current culture. + +ABP Framework can conventionally localize the fields on the UI when you add the localization keys to the localization JSON files. + +Example: French localization for the *Name* property (add into the `fr.json` in the application): + +````js +"Name": "Nom" +```` + +Then the UI will use the given name for French language: + +![abp-form-input-validation-error](../../images/abp-form-input-validation-error-french-name.png) + +### Using the `DisplayName:` Prefix + +Directly using the property name as the localization key may be a problem if you need to use the property name for other purpose, which a different translation value. In this case, use the `DisplayName:` prefix for the localization key: + +````js +"DisplayName:Name": "Nom" +```` + +ABP prefers to use the `DisplayName:Name` key over the `Name` key if it does exists. + +### Using a Custom Localization Key + +If you need, you can use the `[DisplayName]` attribute to specify the localization key for a specific property: + +````csharp +[DisplayName("MyNameKey")] +public string Name { get; set; } +```` + +In this case, you can add an entry to the localization file using the key `MyNameKey`. + +> If you use the `[DisplayName]` but not add a corresponding entity to the localization file, then ABP Framework shows the given key as the field name, `MyNameKey` for this case. So, it provides a way to specify a hard coded display name even if you don't need to use the localization system. ## See Also diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index d6991ccc98..423ee8db9d 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -392,7 +392,7 @@ "text": "User Interface", "items": [ { - "text": "ASP.NET Core", + "text": "ASP.NET Core MVC / Razor Pages", "items": [ { "text": "Client Side Package Management", @@ -402,6 +402,10 @@ "text": "Bundling & Minification", "path": "UI/AspNetCore/Bundling-Minification.md" }, + { + "text": "Forms & Validation", + "path": "UI/AspNetCore/Forms-Validation.md" + }, { "text": "Tag Helpers", "path": "UI/AspNetCore/Tag-Helpers/Index.md", diff --git a/docs/en/images/abp-form-input-validation-error-french-name.png b/docs/en/images/abp-form-input-validation-error-french-name.png new file mode 100644 index 0000000000000000000000000000000000000000..5112cd259723391eced00322ec853aec352e5a05 GIT binary patch literal 4382 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 Date: Fri, 2 Oct 2020 15:34:49 +0300 Subject: [PATCH 130/143] docs: update link to RoutesService document --- docs/en/Tutorials/Part-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index 61271b1c93..ed59070cec 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -443,7 +443,7 @@ function configureRoutes(routes: RoutesService) { * `order` is the order of the menu item. * `layout` is the layout of the BooksModule's routes (there are three types of pre-defined layouts: `eLayoutType.application`, `eLayoutType.account` or `eLayoutType.empty`). -For more information, see the [RoutesService document](https://docs.abp.io/en/abp/latest/UI/Angular/Modifying-the-Menu.md#via-routesservice). +For more information, see the [RoutesService document](../UI/Angular/Modifying-the-Menu.md#via-routesservice). ### Service Proxy Generation From 12b90a9b5c223c4f9432f3768a898bce6d526bb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 2 Oct 2020 15:38:02 +0300 Subject: [PATCH 131/143] Update Forms-Validation.md --- docs/en/UI/AspNetCore/Forms-Validation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/AspNetCore/Forms-Validation.md b/docs/en/UI/AspNetCore/Forms-Validation.md index 2934e81658..e62a6dc807 100644 --- a/docs/en/UI/AspNetCore/Forms-Validation.md +++ b/docs/en/UI/AspNetCore/Forms-Validation.md @@ -125,7 +125,7 @@ See the *Localization & Validation* section below to localize the field display ## ABP Form Tag Helpers -While `abp-dynamic-form` covers most of the scenarios and allows you to control and customize the form using the attributes. +`abp-dynamic-form` covers most of the scenarios and allows you to control and customize the form using the attributes. However, if you want to **render the form body yourself** (for example, you may want to fully control the **form layout**), you can directly use the [ABP Form Tag Helpers](Tag-Helpers/Form-elements.md). The same auto-generated form above can be created using the ABP Form Tag Helpers as shown below: From e65f5bfd7378ddb691b57f130a896797a3d183ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Fri, 2 Oct 2020 17:47:21 +0300 Subject: [PATCH 132/143] Update Using-DevExtremeAngularComponents-With-The-ABP-Framework.md --- ...ngularComponents-With-The-ABP-Framework.md | 46 ++++++++++--------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md index 4637f07e57..c20b796073 100644 --- a/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md +++ b/docs/en/Community-Articles/2020-09-28-Using-DevExtremeAngularComponents-With-The-ABP-Framework/Using-DevExtremeAngularComponents-With-The-ABP-Framework.md @@ -1,34 +1,39 @@ -## Using DevExtreme Angular Components With the ABP Framework +# Using DevExtreme Angular Components With the ABP Framework -Hello, this is a follow up on the article [Using DevExtreme Components With the ABP Framework](https://community.abp.io/articles/using-devextreme-components-with-the-abp-framework-zb8z7yqv) - -We will create the same application using Angular as the UI framework and integrate [DevExpress Angular components](https://js.devexpress.com/Documentation/Guide/Angular_Components/DevExtreme_Angular_Components/). +In this article, I will show you how to integrate the [DevExpress Angular components](https://js.devexpress.com/Documentation/Guide/Angular_Components/DevExtreme_Angular_Components/) to a project created using the ABP Framework startup templates. Then I will use the [DataGrid](https://js.devexpress.com/Documentation/Guide/Widgets/DataGrid/Overview/) component to show a list of users on the UI. ## Create the Project -For detail information about how to generate and start up a project, please refer to the [official docs](https://docs.abp.io/en/abp/latest/Getting-Started?UI=NG&DB=EF&Tiered=No). For the scope of this post, we will not go into details of the backend applications. - -Let's create an application using [ABP CLI](https://docs.abp.io/en/abp/latest/CLI#new) +Let's create a new web application with the Angular UI using [ABP CLI](https://docs.abp.io/en/abp/latest/CLI#new): ```shell abp new DevExtremeAngular -u angular ``` -After the project is created, you should run following projects in order +> For detail information about how to generate and start up a project, please refer to the [official docs](https://docs.abp.io/en/abp/latest/Getting-Started?UI=NG&DB=EF&Tiered=No). For the scope of this post, we will not go into details of the backend applications. + +## Running the Solution + +### The Server Side + +Server side contains multiple projects in the solution: ![A screenshot showing DevExtremeAngular.DbMigrator and DevExtremeAngular.HttpApi.Host](project-setup.png) -Firstly, run `DevExtremeAngular.DbMigrator` for db migration and then run `DevExtremeAngular.HttpApi.Host` for backend APIs. +Run following projects in order; + +* Run `DevExtremeAngular.DbMigrator` to create the database and seed the initial data. +* Run `DevExtremeAngular.HttpApi.Host` project to make the backend API up & running. -After the backend is ready, navigate to `angular` folder and run `yarn` or `npm install` based on which package you are using. +### The Angular Application -After installation process is done, you can start your angular project by running `yarn start` or `npm start` +Open a command line terminal and navigate to `angular` folder then run `yarn` or `npm install` based on which package you are using. -Everything should run smoothly and when you go to http://localhost:4200 in the browser, you should see your application up and running. +After installation process is done, you can start your angular project by running `yarn start` or `npm start`. This command should serve the application and open the application in your default browser. If it doesn't open, you can navigate to http://localhost:4200 in your browser: ![A screenshot showing localhost is running](localhost-running.png) -You can login to the application by using following credentials +You can login to the application by using following credentials: > _Default admin username is **admin** and password is **1q2w3E\***_ @@ -38,18 +43,17 @@ After successful login, you should be redirected to home page. ## Install DevExtreme -Let's start with installing DevExtreme into our project before writing any code. - You can follow [the guide](https://js.devexpress.com/Documentation/Guide/Angular_Components/Getting_Started/Add_DevExtreme_to_an_Angular_CLI_Application/) provided by **DevExtreme** team or apply the following steps. * `npm install devextreme devextreme-angular` or `yarn add devextreme devextreme-angular` -* Import following two styles in `angular.json` +* Import given two following styles in `angular.json` file: ```javascript // ... "styles": [ // ... "src/styles.scss", + "node_modules/devextreme/dist/css/dx.common.css", "node_modules/devextreme/dist/css/dx.light.css" ] @@ -240,7 +244,7 @@ It should display a table on the screen Since, we did not specify any columns, `dx-data-grid` displayed every column avaliable. Let's pick some columns to make it more readable. -Change `dev-extreme.component.html` to the following +Change `dev-extreme.component.html` to the following: ```html @@ -273,7 +277,7 @@ import { CoreModule } from '@abp/ng.core'; export class DevExtremeModule {} ``` -And change the template to the following +And change the template to the following: ```html @@ -302,12 +306,12 @@ And change the template to the following ``` -The headers should change when a new language is selected +The headers should change when a new language is selected; ![A gif showing the headers of the table getting translated into the chosen language](devextreme-final.gif) ## Conclusion -In this article, we have seen how to integrate `DevExtreme` angular components into a project generated by `ABP CLI` +In this article, we have seen how to integrate `DevExtreme` angular components into a project generated by `ABP CLI`. -You can download the code of [the demo here](https://github.com/abpframework/abp-samples/tree/master/DevExtreme-Angular) +You can download source code of [the demo here](https://github.com/abpframework/abp-samples/tree/master/DevExtreme-Angular). From f57520755bc0a970f59472fb20796693c50048ec Mon Sep 17 00:00:00 2001 From: Ahmet Date: Sat, 3 Oct 2020 01:40:33 +0300 Subject: [PATCH 133/143] Added Setting Management Blazor UI Closes: #5541 --- .../Volo.Abp.SettingManagement.sln | 7 +++ .../AbpSettingManagementBlazorModule.cs | 36 +++++++++++ .../FodyWeavers.xml | 3 + .../FodyWeavers.xsd | 30 ++++++++++ .../ISettingComponentContributor.cs | 11 ++++ .../Menus/SettingManagementMenuContributor.cs | 60 +++++++++++++++++++ .../Menus/SettingManagementMenus.cs | 7 +++ .../SettingManagement/SettingManagement.razor | 57 ++++++++++++++++++ .../SettingManagement.razor.cs | 45 ++++++++++++++ .../SettingComponentCreationContext.cs | 20 +++++++ .../SettingComponentGroup.cs | 39 ++++++++++++ ...ettingManagementBlazorAutoMapperProfile.cs | 12 ++++ .../SettingManagementComponentOptions.cs | 14 +++++ .../Volo.Abp.SettingManagement.Blazor.csproj | 20 +++++++ .../_Imports.razor | 5 ++ 15 files changed, 366 insertions(+) create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/AbpSettingManagementBlazorModule.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xml create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xsd create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/ISettingComponentContributor.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenuContributor.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenus.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingComponentCreationContext.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingComponentGroup.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementComponentOptions.cs create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Volo.Abp.SettingManagement.Blazor.csproj create mode 100644 modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/_Imports.razor diff --git a/modules/setting-management/Volo.Abp.SettingManagement.sln b/modules/setting-management/Volo.Abp.SettingManagement.sln index 54a63cb48a..8292218678 100644 --- a/modules/setting-management/Volo.Abp.SettingManagement.sln +++ b/modules/setting-management/Volo.Abp.SettingManagement.sln @@ -25,6 +25,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Volo.Abp.SettingManagement. EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.Web", "src\Volo.Abp.SettingManagement.Web\Volo.Abp.SettingManagement.Web.csproj", "{AF6BE46D-AC88-4DEF-BBEC-F60A00847D43}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Volo.Abp.SettingManagement.Blazor", "src\Volo.Abp.SettingManagement.Blazor\Volo.Abp.SettingManagement.Blazor.csproj", "{BDF54E3C-C262-406E-8060-84C423335BDD}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -67,6 +69,10 @@ Global {AF6BE46D-AC88-4DEF-BBEC-F60A00847D43}.Debug|Any CPU.Build.0 = Debug|Any CPU {AF6BE46D-AC88-4DEF-BBEC-F60A00847D43}.Release|Any CPU.ActiveCfg = Release|Any CPU {AF6BE46D-AC88-4DEF-BBEC-F60A00847D43}.Release|Any CPU.Build.0 = Release|Any CPU + {BDF54E3C-C262-406E-8060-84C423335BDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BDF54E3C-C262-406E-8060-84C423335BDD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BDF54E3C-C262-406E-8060-84C423335BDD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BDF54E3C-C262-406E-8060-84C423335BDD}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -81,6 +87,7 @@ Global {AFF6A7B6-A80B-4569-9F6B-CD6C72EAB6D4} = {7E8D2943-ADE7-4C89-8048-0780CE07E0E0} {DF76DE74-1029-4FEA-8ADF-3C5636944757} = {7E8D2943-ADE7-4C89-8048-0780CE07E0E0} {AF6BE46D-AC88-4DEF-BBEC-F60A00847D43} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} + {BDF54E3C-C262-406E-8060-84C423335BDD} = {F1BE945B-F0CF-4712-BC2B-9AF8C02059EA} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {24B3A486-E7CA-4AA5-B76F-27D351A97E59} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/AbpSettingManagementBlazorModule.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/AbpSettingManagementBlazorModule.cs new file mode 100644 index 0000000000..2ff6f9b6cf --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/AbpSettingManagementBlazorModule.cs @@ -0,0 +1,36 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Components.WebAssembly.Theming.Routing; +using Volo.Abp.AutoMapper; +using Volo.Abp.Modularity; +using Volo.Abp.SettingManagement.Blazor.Menus; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.SettingManagement.Blazor +{ + [DependsOn( + typeof(AbpSettingManagementDomainSharedModule), + typeof(AbpAutoMapperModule) + )] + public class AbpSettingManagementBlazorModule : AbpModule + { + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAutoMapperObjectMapper(); + + Configure(options => + { + options.AddProfile(validate: true); + }); + + Configure(options => + { + options.MenuContributors.Add(new SettingManagementMenuContributor()); + }); + + Configure(options => + { + options.AdditionalAssemblies.Add(typeof(AbpSettingManagementBlazorModule).Assembly); + }); + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xml b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xml new file mode 100644 index 0000000000..be0de3a908 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xsd b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xsd new file mode 100644 index 0000000000..3f3946e282 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/ISettingComponentContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/ISettingComponentContributor.cs new file mode 100644 index 0000000000..19e8abb562 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/ISettingComponentContributor.cs @@ -0,0 +1,11 @@ +using System.Threading.Tasks; + +namespace Volo.Abp.SettingManagement.Blazor +{ + public interface ISettingComponentContributor + { + Task ConfigureAsync(SettingComponentCreationContext context); + + Task CheckPermissionsAsync(SettingComponentCreationContext context); + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenuContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenuContributor.cs new file mode 100644 index 0000000000..5b9b7a3c35 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenuContributor.cs @@ -0,0 +1,60 @@ +using System.Linq; +using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Volo.Abp.SettingManagement.Localization; +using Volo.Abp.UI.Navigation; + +namespace Volo.Abp.SettingManagement.Blazor.Menus +{ + public class SettingManagementMenuContributor : IMenuContributor + { + public async Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name == StandardMenus.Main) + { + await ConfigureMainMenu(context); + } + } + + private async Task ConfigureMainMenu(MenuConfigurationContext context) + { + var settingManagementPageOptions = context.ServiceProvider.GetRequiredService>().Value; + var settingPageCreationContext = new SettingComponentCreationContext(context.ServiceProvider); + if ( + !settingManagementPageOptions.Contributors.Any() || + !(await CheckAnyOfPagePermissionsGranted(settingManagementPageOptions, settingPageCreationContext)) + ) + { + return; + } + + var l = context.GetLocalizer(); + + context.Menu + .GetAdministration() + .AddItem( + new ApplicationMenuItem( + SettingManagementMenus.GroupName, + l["Settings"], + "/SettingManagement", + icon: "fa fa-cog" + ) + ); + } + + protected virtual async Task CheckAnyOfPagePermissionsGranted( + SettingManagementComponentOptions settingManagementComponentOptions, + SettingComponentCreationContext settingComponentCreationContext) + { + foreach (var contributor in settingManagementComponentOptions.Contributors) + { + if (await contributor.CheckPermissionsAsync(settingComponentCreationContext)) + { + return true; + } + } + return false; + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenus.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenus.cs new file mode 100644 index 0000000000..4e109b8d32 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenus.cs @@ -0,0 +1,7 @@ +namespace Volo.Abp.SettingManagement.Blazor.Menus +{ + public class SettingManagementMenus + { + public const string GroupName = "SettingManagement"; + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor new file mode 100644 index 0000000000..0586b5c5b6 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor @@ -0,0 +1,57 @@ +@page "/SettingManagement" +@using Microsoft.Extensions.Localization +@using Volo.Abp.SettingManagement.Localization +@inject IStringLocalizer L +@inherits SettingManagementBase + +@* ************************* PAGE HEADER ************************* *@ +
    +
    +

    @L["Settings"]

    +
    +
    + +
    +
    +
    + +
    +
    +
    + + + + + + @foreach (var group in SettingComponentCreationContext.Groups) + { + + @group.DisplayName + + } + + + @foreach (var group in SettingComponentCreationContext.Groups) + { + +

    @group.DisplayName

    + + + @{ + SettingItemRenders.Add(builder => + { + builder.OpenComponent(0, group.ComponentType); + builder.CloseComponent(); + }); + } + + @SettingItemRenders.Last() +
    + } +
    +
    +
    +
    \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs new file mode 100644 index 0000000000..3d41afd05f --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Components; +using Microsoft.Extensions.Options; + +namespace Volo.Abp.SettingManagement.Blazor.Pages.SettingManagement +{ + public abstract class SettingManagementBase : OwningComponentBase + { + [Inject] + protected IServiceProvider ServiceProvider { get; set; } + + protected SettingComponentCreationContext SettingComponentCreationContext { get; set; } + + [Inject] + protected IOptions _options { get; set; } + + protected SettingManagementComponentOptions Options => _options.Value; + + protected List SettingItemRenders { get; set; } = new List(); + + protected string SelectedGroup; + + protected override async Task OnInitializedAsync() + { + SettingComponentCreationContext = new SettingComponentCreationContext(ServiceProvider); + + foreach (var contributor in Options.Contributors) + { + await contributor.ConfigureAsync(SettingComponentCreationContext); + } + + SettingItemRenders.Clear(); + + SelectedGroup = GetNormalizedString(SettingComponentCreationContext.Groups.First().Id); + } + + protected string GetNormalizedString(string value) + { + return value.Replace('.', '_'); + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingComponentCreationContext.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingComponentCreationContext.cs new file mode 100644 index 0000000000..5898ace730 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingComponentCreationContext.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections.Generic; +using Volo.Abp.DependencyInjection; + +namespace Volo.Abp.SettingManagement.Blazor +{ + public class SettingComponentCreationContext : IServiceProviderAccessor + { + public IServiceProvider ServiceProvider { get; } + + public List Groups { get; } + + public SettingComponentCreationContext(IServiceProvider serviceProvider) + { + ServiceProvider = serviceProvider; + + Groups = new List(); + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingComponentGroup.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingComponentGroup.cs new file mode 100644 index 0000000000..22b59d83e1 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingComponentGroup.cs @@ -0,0 +1,39 @@ +using System; +using JetBrains.Annotations; + +namespace Volo.Abp.SettingManagement.Blazor +{ + public class SettingComponentGroup + { + public string Id + { + get => _id; + set => _id = Check.NotNullOrWhiteSpace(value, nameof(Id)); + } + private string _id; + + public string DisplayName + { + get => _displayName; + set => _displayName = Check.NotNullOrWhiteSpace(value, nameof(DisplayName)); + } + private string _displayName; + + public Type ComponentType + { + get => _componentType; + set => _componentType = Check.NotNull(value, nameof(ComponentType)); + } + private Type _componentType; + + public object Parameter { get; set; } + + public SettingComponentGroup([NotNull] string id, [NotNull] string displayName, [NotNull] Type componentType, object parameter = null) + { + Id = id; + DisplayName = displayName; + ComponentType = componentType; + Parameter = parameter; + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs new file mode 100644 index 0000000000..94946a9889 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementBlazorAutoMapperProfile.cs @@ -0,0 +1,12 @@ +using AutoMapper; + +namespace Volo.Abp.SettingManagement.Blazor +{ + public class SettingManagementBlazorAutoMapperProfile : Profile + { + public SettingManagementBlazorAutoMapperProfile() + { + + } + } +} \ No newline at end of file diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementComponentOptions.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementComponentOptions.cs new file mode 100644 index 0000000000..e49fe4aa2d --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/SettingManagementComponentOptions.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace Volo.Abp.SettingManagement.Blazor +{ + public class SettingManagementComponentOptions + { + public List Contributors { get; } + + public SettingManagementComponentOptions() + { + Contributors = new List(); + } + } +} diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Volo.Abp.SettingManagement.Blazor.csproj b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Volo.Abp.SettingManagement.Blazor.csproj new file mode 100644 index 0000000000..ea32179ddd --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Volo.Abp.SettingManagement.Blazor.csproj @@ -0,0 +1,20 @@ + + + + + + + netstandard2.1 + 3.0 + Volo.Abp.SettingManagement.Blazor + + + + + + + + + + + diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/_Imports.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/_Imports.razor new file mode 100644 index 0000000000..4685ac9893 --- /dev/null +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/_Imports.razor @@ -0,0 +1,5 @@ +@using Microsoft.AspNetCore.Components.Web +@using Volo.Abp.AspNetCore.Components.WebAssembly +@using Volo.Abp.BlazoriseUI +@using Blazorise +@using Blazorise.DataGrid \ No newline at end of file From 3fcdeeeb05810b7a2e162f212ef435b81d412aa5 Mon Sep 17 00:00:00 2001 From: Ahmet Date: Sat, 3 Oct 2020 01:42:01 +0300 Subject: [PATCH 134/143] update setting management blazor routing --- .../Menus/SettingManagementMenuContributor.cs | 2 +- .../Pages/SettingManagement/SettingManagement.razor | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenuContributor.cs b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenuContributor.cs index 5b9b7a3c35..214c0a7485 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenuContributor.cs +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Menus/SettingManagementMenuContributor.cs @@ -37,7 +37,7 @@ namespace Volo.Abp.SettingManagement.Blazor.Menus new ApplicationMenuItem( SettingManagementMenus.GroupName, l["Settings"], - "/SettingManagement", + "/setting-management", icon: "fa fa-cog" ) ); diff --git a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor index 0586b5c5b6..8f5285ff98 100644 --- a/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor +++ b/modules/setting-management/src/Volo.Abp.SettingManagement.Blazor/Pages/SettingManagement/SettingManagement.razor @@ -1,4 +1,4 @@ -@page "/SettingManagement" +@page "/setting-management" @using Microsoft.Extensions.Localization @using Volo.Abp.SettingManagement.Localization @inject IStringLocalizer L From a46df8a7a4ee429e3264c72efd801c2298bf6287 Mon Sep 17 00:00:00 2001 From: John Barrett <40014477+274188A@users.noreply.github.com> Date: Sat, 3 Oct 2020 11:07:19 +0800 Subject: [PATCH 135/143] Update Part-2.md grammar --- docs/en/Tutorials/Part-2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Tutorials/Part-2.md b/docs/en/Tutorials/Part-2.md index ed59070cec..e52fe7a46d 100644 --- a/docs/en/Tutorials/Part-2.md +++ b/docs/en/Tutorials/Part-2.md @@ -643,7 +643,7 @@ Open the `Books.razor` and replace the content as the following: ```` -> If you see some syntax errors, you can ignore them if your application property built and run. Visual Studio still has some bugs with Blazor. +> If you see some syntax errors, you can ignore them if your application properly built and run. Visual Studio still has some bugs with Blazor. * Inherited from the `BlazoriseCrudPageBase` which implements all the CRUD details for us. * `Entities`, `TotalCount`, `PageSize`, `OnDataGridReadAsync` are defined in the base blass. From b734bde85b5e839475f51f76eefbad17bcd1a866 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sat, 3 Oct 2020 16:52:32 +0300 Subject: [PATCH 136/143] Typo fix --- docs/en/UI/AspNetCore/Forms-Validation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/UI/AspNetCore/Forms-Validation.md b/docs/en/UI/AspNetCore/Forms-Validation.md index e62a6dc807..48d7937013 100644 --- a/docs/en/UI/AspNetCore/Forms-Validation.md +++ b/docs/en/UI/AspNetCore/Forms-Validation.md @@ -152,7 +152,7 @@ However, if you want to **render the form body yourself** (for example, you may Both of the Dynamic Form and the Form Tag Helpers **automatically validate** the input based on the data annotation attributes and shows validation error messages on the user interface. Error messages are **automatically localized** based on the current culture. -**Example: User leaves empty a requires string property** +**Example: User leaves empty a required string property** ![abp-form-input-validation-error](../../images/abp-form-input-validation-error.png) @@ -203,4 +203,4 @@ In this case, you can add an entry to the localization file using the key `MyNam ## See Also -* [Server Side Validation](../../Validation.md) \ No newline at end of file +* [Server Side Validation](../../Validation.md) From f1e6464b61fbd8716c396aaf5e44d9888db15a1a Mon Sep 17 00:00:00 2001 From: ChangYinShung Date: Sun, 4 Oct 2020 11:29:51 +0800 Subject: [PATCH 137/143] Update AbpUi 's zh-Hant --- .../Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json index 496e6e3e9d..c595a26476 100644 --- a/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json +++ b/framework/src/Volo.Abp.UI/Localization/Resources/AbpUi/zh-Hant.json @@ -17,6 +17,7 @@ "Error": "錯誤", "AreYouSure": "你確定嗎?", "Cancel": "取消", + "Clear": "清除", "Yes": "是", "No": "否", "Ok": "好", @@ -61,6 +62,9 @@ "500Message": "內部伺服器錯誤", "GoHomePage": "返回首頁", "GoBack": "返回", - "Search": "查詢" + "Search": "查詢", + "ItemWillBeDeletedMessageWithFormat": "{0} will be deleted!", + "ItemWillBeDeletedMessage": "This item will be deleted!", + "ManageYourAccount": "Manage your account" } } From dc58a58d9f99f26f4aa2e6cb2a1e2e0fc7cabe5b Mon Sep 17 00:00:00 2001 From: ChangYinShung Date: Sun, 4 Oct 2020 11:43:21 +0800 Subject: [PATCH 138/143] Update Identity's zh-Hant --- .../Volo/Abp/Identity/Localization/zh-Hant.json | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json index 54298f530d..98c649cd63 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json @@ -78,6 +78,12 @@ "Permission:ChangePermissions": "更改權限", "Permission:UserManagement": "使用者管理", "Permission:UserLookup": "使用者查詢", + "Feature:IdentityGroup": "身份識別", + "Feature:TwoFactor": "雙因素", + "Feature:TwoFactorDescription": "雙因素", + "Feature:TwoFactor.Optional": "選用", + "Feature:TwoFactor.Disabled": "關閉", + "Feature:TwoFactor.Forced": "強制啟用", "DisplayName:Abp.Identity.Password.RequiredLength": "長度需符合", "DisplayName:Abp.Identity.Password.RequiredUniqueChars": "需最小特殊字元數", "DisplayName:Abp.Identity.Password.RequireNonAlphanumeric": "需包含非數字字母", @@ -106,5 +112,9 @@ "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "決定使用者是否需電話認證後才能登入.", "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "決定使用者是否能更新帳號.", "Description:Abp.Identity.User.IsEmailUpdateEnabled": "決定使用者是否能更新信箱." + "DisplayName:Abp.Identity.TwoFactorBehaviour": "雙因素認證行為", + "Description:Abp.Identity.TwoFactorBehaviour": "雙因素認證行為", + "DisplayName:Abp.Identity.UsersCanChange": "允許使用者變更雙因素認證.", + "Description:Abp.Identity.UsersCanChange": "允許使用者變更雙因素認證." } } From ec97e73d3bd5650408d2ed27af26fc039ade8473 Mon Sep 17 00:00:00 2001 From: maliming <6908465+maliming@users.noreply.github.com> Date: Sun, 4 Oct 2020 16:19:31 +0800 Subject: [PATCH 139/143] Update zh-Hant.json --- .../Volo/Abp/Identity/Localization/zh-Hant.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json index 98c649cd63..dd8c9e0a17 100644 --- a/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json +++ b/modules/identity/src/Volo.Abp.Identity.Domain.Shared/Volo/Abp/Identity/Localization/zh-Hant.json @@ -111,7 +111,7 @@ "Description:Abp.Identity.SignIn.EnablePhoneNumberConfirmation": "是否啟用電話認證.", "Description:Abp.Identity.SignIn.RequireConfirmedPhoneNumber": "決定使用者是否需電話認證後才能登入.", "Description:Abp.Identity.User.IsUserNameUpdateEnabled": "決定使用者是否能更新帳號.", - "Description:Abp.Identity.User.IsEmailUpdateEnabled": "決定使用者是否能更新信箱." + "Description:Abp.Identity.User.IsEmailUpdateEnabled": "決定使用者是否能更新信箱.", "DisplayName:Abp.Identity.TwoFactorBehaviour": "雙因素認證行為", "Description:Abp.Identity.TwoFactorBehaviour": "雙因素認證行為", "DisplayName:Abp.Identity.UsersCanChange": "允許使用者變更雙因素認證.", From 9d9f5691fffbd97d3b54ab5dc3037de93e2bfb02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 4 Oct 2020 21:35:37 +0300 Subject: [PATCH 140/143] Documented Navigation Menu --- docs/en/UI/AspNetCore/Navigation-Menu.md | 143 ++++++++++++++++++ .../images/nav-main-menu-administration.png | Bin 0 -> 25300 bytes docs/en/images/nav-main-menu.png | Bin 0 -> 18329 bytes docs/en/images/user-menu.png | Bin 0 -> 9475 bytes 4 files changed, 143 insertions(+) create mode 100644 docs/en/images/nav-main-menu-administration.png create mode 100644 docs/en/images/nav-main-menu.png create mode 100644 docs/en/images/user-menu.png diff --git a/docs/en/UI/AspNetCore/Navigation-Menu.md b/docs/en/UI/AspNetCore/Navigation-Menu.md index 4e0164ec72..4a8db0a6c5 100644 --- a/docs/en/UI/AspNetCore/Navigation-Menu.md +++ b/docs/en/UI/AspNetCore/Navigation-Menu.md @@ -1,3 +1,146 @@ # Navigation Menu +Every application has a main menu to allow users to navigate to pages/screens of the application. Some applications may contain more than one menu in different sections of the UI. + +ABP Framework is a [modular](../../Module-Development-Basics.md) application development framework. **Every module may need to add items to the menu**. + +So, ABP Framework **provides a menu infrastructure** where; + +* The application or the modules can add items to a menu, without knowing how the menu is rendered. +* The [theme](Theming.md) properly renders the menu. + +## Adding Menu Items + +In order to add menu items (or manipulate the existing items) you need to create a class implementing the `IMenuContributor` interface. + +**Example: Add a *CRM* menu item with *Customers* and *Orders* sub menu items** + +```csharp +using System.Threading.Tasks; +using MyProject.Localization; +using Volo.Abp.UI.Navigation; + +namespace MyProject.Web.Menus +{ + public class MyProjectMenuContributor : IMenuContributor + { + public async Task ConfigureMenuAsync(MenuConfigurationContext context) + { + if (context.Menu.Name == StandardMenus.Main) + { + await ConfigureMainMenuAsync(context); + } + } + + private async Task ConfigureMainMenuAsync(MenuConfigurationContext context) + { + var l = context.GetLocalizer(); + + context.Menu.AddItem( + new ApplicationMenuItem("MyProject.Crm", l["Menu:CRM"]) + .AddItem(new ApplicationMenuItem( + name: "MyProject.Crm.Customers", + displayName: l["Menu:Customers"], + url: "/crm/customers") + ).AddItem(new ApplicationMenuItem( + name: "MyProject.Crm.Orders", + displayName: l["Menu:Orders"], + url: "/crm/orders") + ) + ); + } + } +} +``` + +* This example adds items only to the main menu (`StandardMenus.Main`: see the *Standard Menus* section below). +* It gets a `IStringLocalizer` from `context` to localize the display names of the menu items. +* Adds the Customers and Orders as children of the CRM menu. + +Once you create a menu contributor, you need to add it to the `AbpNavigationOptions` in the `ConfigureServices` method of your module: + +````csharp +Configure(options => +{ + options.MenuContributors.Add(new MyProjectMenuContributor()); +}); +```` + +When you run the application, you will see the menu items added to the main menu: + +![nav-main-menu](../../images/nav-main-menu.png) + +> The menu is rendered by the current UI theme. So, the look of the main menu can be completely different based on your theme. + +Here, a few notes on the menu contributors; + +* ABP Framework calls the `ConfigureMenuAsync` method **whenever need to render** the menu. +* Every menu item can have **children**. So, you can add menu items with **unlimited depth** (however, your UI theme may not support unlimited depth). +* Only leaf menu items have `url`s normally. When you click to a parent menu, its sub menu is opened or closed, you don't navigate the `url` of a parent menu item. +* If a menu item has no children and has no `url` defined, then it is not rendered on the UI. This simplifies to authorize the menu items: You only authorize the child items (see the next section). If none of the children are authorized, then the parent automatically disappears. + +### Authorization + +As seen above, a menu contributor contributes to the menu dynamically. So, you can perform any custom logic or get menu items from any source. + +One use case is the [authorization](Authorization.md). You typically want to add menu items by checking a permission. + +**Example: Check if the current user has a permission** + +````csharp +if (await context.IsGrantedAsync("MyPermissionName")) +{ + //...add menu items +} +```` + +> You can use `context.AuthorizationService` to directly access to the `IAuthorizationService`. + +### Resolving Dependencies + +`context.ServiceProvider` can be used to resolve any service dependency. + +**Example: Get a service** + +````csharp +var myService = context.ServiceProvider.GetRequiredService(); +//...use the service +```` + +> You don't need to care about releasing/disposing services. ABP Framework handles it. + +### The Administration Menu + +There is a special menu item in the menu menu that is added by the ABP Framework: The *Administration* menu. It is typically used by the pre-built admin [application modules](../../Modules/Index.md): + +![nav-main-menu-administration](../../images/nav-main-menu-administration.png) + +If you want to add menu items under the *Administration* menu item, you can use the `context.Menu.GetAdministration()` extension method: + +````csharp +context.Menu.GetAdministration().AddItem(...) +```` + +## Standard Menus + +A menu is a **named** component. An application may contain more than one menus with different, unique names. There are two pre-defined standard menus: + +* `Main`: The main menu of the application. Contains links to the page of the application. Defined as a constant: `Volo.Abp.UI.Navigation.StandardMenus.Main`. +* `User`: User profile menu. Defined as a constant: `Volo.Abp.UI.Navigation.StandardMenus.User`. + +The `Main` menu already covered above. The `User` menu is available when a user has logged in: + +![user-menu](../../images/user-menu.png) + +You can add items to the `User` menu by checking the `context.Menu.Name` as shown below: + +```csharp +if (context.Menu.Name == StandardMenus.User) +{ + //...add items +} +``` + +## IMenuManager + TODO \ No newline at end of file diff --git a/docs/en/images/nav-main-menu-administration.png b/docs/en/images/nav-main-menu-administration.png new file mode 100644 index 0000000000000000000000000000000000000000..21ad977264aa77f6e0ecb1d622e237091f00f226 GIT binary patch literal 25300 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 z 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 XIOtD~`@2&h!UieGs7jZDP5l24ZGoOr literal 0 HcmV?d00001 diff --git a/docs/en/images/nav-main-menu.png b/docs/en/images/nav-main-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..2784c035c2535de6e3afc6b49b56576df30a4753 GIT binary patch literal 18329 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 literal 0 HcmV?d00001 diff --git a/docs/en/images/user-menu.png b/docs/en/images/user-menu.png new file mode 100644 index 0000000000000000000000000000000000000000..af0671dbdc4119f5ce1eeb6f7429ef0b4e09f01c GIT binary patch literal 9475 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 WZ~08i{h_M~P?mouS1oH9{yzXuIeS Date: Sun, 4 Oct 2020 21:56:04 +0300 Subject: [PATCH 141/143] Added Menu Item Properties and IMenuManager sections --- docs/en/UI/AspNetCore/Navigation-Menu.md | 51 ++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/docs/en/UI/AspNetCore/Navigation-Menu.md b/docs/en/UI/AspNetCore/Navigation-Menu.md index 4a8db0a6c5..f10d907512 100644 --- a/docs/en/UI/AspNetCore/Navigation-Menu.md +++ b/docs/en/UI/AspNetCore/Navigation-Menu.md @@ -1,4 +1,4 @@ -# Navigation Menu +# ASP.NET Core MVC / Razor Pages UI: Navigation Menu Every application has a main menu to allow users to navigate to pages/screens of the application. Some applications may contain more than one menu in different sections of the UI. @@ -54,7 +54,7 @@ namespace MyProject.Web.Menus ``` * This example adds items only to the main menu (`StandardMenus.Main`: see the *Standard Menus* section below). -* It gets a `IStringLocalizer` from `context` to localize the display names of the menu items. +* It gets a `IStringLocalizer` from `context` to [localize](../../Localization.md) the display names of the menu items. * Adds the Customers and Orders as children of the CRM menu. Once you create a menu contributor, you need to add it to the `AbpNavigationOptions` in the `ConfigureServices` method of your module: @@ -79,6 +79,20 @@ Here, a few notes on the menu contributors; * Only leaf menu items have `url`s normally. When you click to a parent menu, its sub menu is opened or closed, you don't navigate the `url` of a parent menu item. * If a menu item has no children and has no `url` defined, then it is not rendered on the UI. This simplifies to authorize the menu items: You only authorize the child items (see the next section). If none of the children are authorized, then the parent automatically disappears. +### Menu Item Properties + +There are more options of a menu item (the constructor of the `ApplicationMenuItem` class). Here, the list of all available options; + +* `name` (`string`, required): The unique name of the menu item. +* `displayName` (`string`, required): Display name/text of the menu item. You can [localize](../../Localization.md) this as shown before. +* `url` (`string`): The URL of the menu item. +* `icon` (`string`): An icon name. Free [Font Awesome](https://fontawesome.com/) icon classes are supported out of the box. Example: `fa fa-book`. You can use any CSS font icon class as long as you include the necessary CSS files to your application. +* `order` (`int`): The order of the menu item. Default value is `1000`. Items are sorted by the adding order unless you specify an order value. +* `customData` (`object`): A custom object that you can associate to the menu item and use it while rendering the menu item. +* `target` (`string`): Target of the menu item. Can be `null` (default), "_blank", "_*self*", "_parent", "_*top*" or a frame name for web applications. +* `elementId` (`string`): Can be used to render the element with a specific HTML `id` attribute. +* `cssClass` (`string`): Additional string classes for the menu item. + ### Authorization As seen above, a menu contributor contributes to the menu dynamically. So, you can perform any custom logic or get menu items from any source. @@ -143,4 +157,35 @@ if (context.Menu.Name == StandardMenus.User) ## IMenuManager -TODO \ No newline at end of file +`IMenuManager` is generally used by the UI [theme](Theming.md) to render the menu items on the UI. So, **you generally don't need to directly use** the `IMenuManager`. + +**Example: Getting the `Main` menu items** + +```csharp +using System.Threading.Tasks; +using Microsoft.AspNetCore.Mvc.RazorPages; +using Volo.Abp.UI.Navigation; + +namespace MyProject.Web.Pages +{ + public class IndexModel : PageModel + { + private readonly IMenuManager _menuManager; + + public IndexModel(IMenuManager menuManager) + { + _menuManager = menuManager; + } + + public async Task OnGetAsync() + { + var mainMenu = await _menuManager.GetAsync(StandardMenus.Main); + + foreach (var menuItem in mainMenu.Items) + { + //... + } + } + } +} +``` \ No newline at end of file From d93b3c1749657f0b8b90db7cd0b8ccf3e77a9619 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 4 Oct 2020 22:02:59 +0300 Subject: [PATCH 142/143] Update Navigation-Menu.md --- docs/en/UI/AspNetCore/Navigation-Menu.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/en/UI/AspNetCore/Navigation-Menu.md b/docs/en/UI/AspNetCore/Navigation-Menu.md index f10d907512..ddbfbbd857 100644 --- a/docs/en/UI/AspNetCore/Navigation-Menu.md +++ b/docs/en/UI/AspNetCore/Navigation-Menu.md @@ -135,6 +135,19 @@ If you want to add menu items under the *Administration* menu item, you can use context.Menu.GetAdministration().AddItem(...) ```` +### Manipulating the Existing Menu Items + +ABP Framework executes the menu contributors by the [module dependency order](../../Module-Development-Basics.md). So, you can manipulate the menu items that your application or module (directly or indirectly) depends on. + +**Example: Set an icon for the `Users` menu item added by the [Identity Module](../../Modules/Identity.md)** + +````csharp +var userMenu = context.Menu.FindMenuItem(IdentityMenuNames.Users); +userMenu.Icon = "fa fa-users"; +```` + +> `context.Menu` gives you ability to access to all the menu items those have been added by the previous menu contributors. + ## Standard Menus A menu is a **named** component. An application may contain more than one menus with different, unique names. There are two pre-defined standard menus: @@ -188,4 +201,5 @@ namespace MyProject.Web.Pages } } } -``` \ No newline at end of file +``` + From 75c67b842346bb4d2bdfcf8c7f6defc2432e44a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 4 Oct 2020 22:06:56 +0300 Subject: [PATCH 143/143] Added Navigation / Menus to the docs navigation menu. --- docs/en/docs-nav.json | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 423ee8db9d..b75d98389a 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -394,6 +394,14 @@ { "text": "ASP.NET Core MVC / Razor Pages", "items": [ + { + "text": "Forms & Validation", + "path": "UI/AspNetCore/Forms-Validation.md" + }, + { + "text": "Navigation / Menus", + "path": "UI/AspNetCore/Navigation-Menu.md" + }, { "text": "Client Side Package Management", "path": "UI/AspNetCore/Client-Side-Package-Management.md" @@ -402,10 +410,6 @@ "text": "Bundling & Minification", "path": "UI/AspNetCore/Bundling-Minification.md" }, - { - "text": "Forms & Validation", - "path": "UI/AspNetCore/Forms-Validation.md" - }, { "text": "Tag Helpers", "path": "UI/AspNetCore/Tag-Helpers/Index.md",