From 175b6a416e813e963e88435ef415a719b129099b Mon Sep 17 00:00:00 2001 From: suravi999 Date: Thu, 19 Mar 2020 20:17:28 +0530 Subject: [PATCH 001/182] Update Background-Jobs-Hangfire.md Add Hangfire Configuration --- docs/en/Background-Jobs-Hangfire.md | 47 ++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/docs/en/Background-Jobs-Hangfire.md b/docs/en/Background-Jobs-Hangfire.md index 588fcace9e..ebaf8271b8 100644 --- a/docs/en/Background-Jobs-Hangfire.md +++ b/docs/en/Background-Jobs-Hangfire.md @@ -39,5 +39,50 @@ public class YourModule : AbpModule ```` ## Configuration +You can install any storage for Hangfire. The most common one is SQL Server (see the [Hangfire.SqlServer](https://www.nuget.org/packages/Hangfire.SqlServer) NuGet package). -TODO... \ No newline at end of file +After you have installed these NuGet packages, you need to configure your project to use Hangfire. + +1.First, we change the `HttpApiHostModule` class to add Hangfire configuration of the storage and connection string in the `ConfigureServices` method: + + +````csharp + public override void ConfigureServices(ServiceConfigurationContext context) + { + var configuration = context.Services.GetConfiguration(); + var hostingEnvironment = context.Services.GetHostingEnvironment(); + + //... other configarations + + ConfigureHangfire(context, configuration); + } + + private void ConfigureHangfire(ServiceConfigurationContext context, IConfiguration configuration) + { + context.Services.AddHangfire(config => + { + config.UsePostgreSqlStorage(configuration.GetConnectionString("Default")); + }); + } +```` + +2. We need to add `UseHangfireServer` call in the Configure method in `Startup` class + +If you want to use hangfire's dashboard, you can add it, too: by `UseHangfireDashboard` + +````csharp + public class Startup + { + public void ConfigureServices(IServiceCollection services) + { + services.AddApplication(); + } + + public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) + { + app.InitializeApplication(); + app.UseHangfireServer(); + app.UseHangfireDashboard(); + } + } +```` From 0e70f9e9b6fc8fc19a8e88a4eaba8eccf9180e40 Mon Sep 17 00:00:00 2001 From: suravi999 Date: Fri, 20 Mar 2020 12:33:59 +0530 Subject: [PATCH 002/182] Update Background-Jobs-Hangfire.md Add requested changes in documentation. --- docs/en/Background-Jobs-Hangfire.md | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/docs/en/Background-Jobs-Hangfire.md b/docs/en/Background-Jobs-Hangfire.md index ebaf8271b8..622558ac68 100644 --- a/docs/en/Background-Jobs-Hangfire.md +++ b/docs/en/Background-Jobs-Hangfire.md @@ -43,7 +43,7 @@ You can install any storage for Hangfire. The most common one is SQL Server (see After you have installed these NuGet packages, you need to configure your project to use Hangfire. -1.First, we change the `HttpApiHostModule` class to add Hangfire configuration of the storage and connection string in the `ConfigureServices` method: +1.First, we change the `Module` class (example: `HttpApiHostModule`) to add Hangfire configuration of the storage and connection string in the `ConfigureServices` method: ````csharp @@ -61,28 +61,24 @@ After you have installed these NuGet packages, you need to configure your projec { context.Services.AddHangfire(config => { - config.UsePostgreSqlStorage(configuration.GetConnectionString("Default")); + config.UseSqlServerStorage(configuration.GetConnectionString("Default")); }); } ```` -2. We need to add `UseHangfireServer` call in the Configure method in `Startup` class +2. We need to add `UseHangfireServer` call in the `OnApplicationInitialization` method in `Module` class If you want to use hangfire's dashboard, you can add it, too: by `UseHangfireDashboard` ````csharp - public class Startup + public override void OnApplicationInitialization(ApplicationInitializationContext context) { - public void ConfigureServices(IServiceCollection services) - { - services.AddApplication(); - } - - public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) - { - app.InitializeApplication(); - app.UseHangfireServer(); - app.UseHangfireDashboard(); - } + var app = context.GetApplicationBuilder(); + + // ... others + + app.UseHangfireServer(); + app.UseHangfireDashboard(); + } ```` From 806fec85d25e09d7c7cdb0bbc1801495a2c375a1 Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 20 Mar 2020 18:51:53 +0800 Subject: [PATCH 003/182] MongoDbRepository needs to filter when deleting entity based on Id. Resolve #3256 --- .../Repositories/MongoDB/MongoDbRepository.cs | 5 +-- .../Abp/TestApp/Testing/SoftDelete_Tests.cs | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs index 5533cb9f74..956bc7853f 100644 --- a/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs +++ b/framework/src/Volo.Abp.MongoDB/Volo/Abp/Domain/Repositories/MongoDB/MongoDbRepository.cs @@ -369,10 +369,7 @@ namespace Volo.Abp.Domain.Repositories.MongoDB bool autoSave = false, CancellationToken cancellationToken = default) { - return Collection.DeleteOneAsync( - CreateEntityFilter(id), - GetCancellationToken(cancellationToken) - ); + return DeleteAsync(x => x.Id.Equals(id), autoSave, cancellationToken); } protected override FilterDefinition CreateEntityFilter(TEntity entity, bool withConcurrencyStamp = false, string concurrencyStamp = null) diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs index 013c3eb3c8..b8618fd6a3 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/SoftDelete_Tests.cs @@ -39,6 +39,24 @@ namespace Volo.Abp.TestApp.Testing } } + [Fact] + public async Task Should_Cancel_Deletion_For_Soft_Delete_Entities_ById() + { + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); + await PersonRepository.DeleteAsync(douglas.Id); + + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas.ShouldBeNull(); + + using (DataFilter.Disable()) + { + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas.ShouldNotBeNull(); + douglas.IsDeleted.ShouldBeTrue(); + douglas.DeletionTime.ShouldNotBeNull(); + } + } + [Fact] public async Task Should_Handle_Deletion_On_Update_For_Soft_Delete_Entities() { @@ -82,5 +100,27 @@ namespace Volo.Abp.TestApp.Testing douglas.Phones.ShouldNotBeEmpty(); } } + + [Fact] + public async Task Cascading_Entities_Should_Not_Be_Deleted_When_Soft_Deleting_Entities_ById() + { + var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId); + douglas.Phones.ShouldNotBeEmpty(); + + await PersonRepository.DeleteAsync(douglas.Id); + + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas.ShouldBeNull(); + + using (DataFilter.Disable()) + { + douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId); + douglas.ShouldNotBeNull(); + douglas.IsDeleted.ShouldBeTrue(); + douglas.DeletionTime.ShouldNotBeNull(); + + douglas.Phones.ShouldNotBeEmpty(); + } + } } } From 3613f906627ea311a8dd89890051ac2cf2a28c76 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 21 Mar 2020 01:59:10 +0300 Subject: [PATCH 004/182] Added popover tag helper hoverable functionality --- .../TagHelpers/Popover/AbpPopoverTagHelper.cs | 2 ++ .../TagHelpers/Popover/AbpPopoverTagHelperService.cs | 10 ++++++++++ .../Pages/Components/Popovers.cshtml | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelper.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelper.cs index d23ac6c912..dfa2c2cfb1 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelper.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap/TagHelpers/Popover/AbpPopoverTagHelper.cs @@ -18,6 +18,8 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover public bool? Dismissible { get; set; } + public bool? Hoverable { get; set; } + public string AbpPopover { get; set; } public string AbpPopoverRight { get; set; } 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 b7bda04134..de5e844888 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 @@ -23,6 +23,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover protected virtual void SetDisabled(TagHelperContext context, TagHelperOutput output) { var triggerAsHtml = TagHelper.Dismissible ?? false ? "datatrigger=\"focus\" " : ""; + // If not dismissable for hoverable condition + if (string.IsNullOrEmpty(triggerAsHtml)) + { + triggerAsHtml = TagHelper.Hoverable ?? false ? "data-trigger=\"hover\" " : string.Empty; + } var dataPlacementAsHtml = "data-placement=\"" + GetDirectory().ToString().ToLowerInvariant() + "\" "; var titleAttribute = output.Attributes.FirstOrDefault(at => at.Name == "title"); var titleAsHtml = titleAttribute == null ? "" : "title=\"" + titleAttribute.Value + "\" "; @@ -40,6 +45,11 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover if (TagHelper.Dismissible ?? false) { output.Attributes.Add("data-trigger", "focus"); + } + // Dismissible has priority over hoverable + else if (TagHelper.Hoverable ?? false) + { + output.Attributes.Add("data-trigger", "hover"); } } diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml index b221ebc4f6..624f17cf20 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml @@ -36,7 +36,7 @@ Popover Default - + Popover With Title From f2f748f07b57ca928ad6632a7bfd5d187f55270a Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 21 Mar 2020 02:15:25 +0300 Subject: [PATCH 005/182] added popover documentation --- docs/en/UI/AspNetCore/Tag-Helpers/Popovers.md | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 docs/en/UI/AspNetCore/Tag-Helpers/Popovers.md diff --git a/docs/en/UI/AspNetCore/Tag-Helpers/Popovers.md b/docs/en/UI/AspNetCore/Tag-Helpers/Popovers.md new file mode 100644 index 0000000000..d56b3fa0a5 --- /dev/null +++ b/docs/en/UI/AspNetCore/Tag-Helpers/Popovers.md @@ -0,0 +1,42 @@ +# Popovers + +## Introduction + +`abp-popover` is the abp tag for popover messages. + +Basic usage: + +````xml + + Popover Default + +```` + + + +## Demo + +See the [popovers demo page](https://bootstrap-taghelpers.abp.io/Components/Popovers) to see it in action. + +## Attributes + +### disabled + +A value indicates if the element should be disabled for interaction. If this value is set to `true`, `dismissable` attribute will be ignored. Should be one of the following values: + +* `false` (default value) +* `true` + +### dismissable + +A value indicates to dismiss the popovers on the user's next click of a different element than the toggle element. If this value is set to `true`, `hoverable` attribute will be ignored. Should be one of the following values: + +* `false` (default value) +* `true` + +### hoverable + +A value indicates if the popover content will be displayed on mouse hover. Should be one of the following values: + +* `false` (default value) +* `true` \ No newline at end of file From 0492e2476d8c91a98745f0cf36ff078f4c764b15 Mon Sep 17 00:00:00 2001 From: Oliver Cooper Date: Sat, 21 Mar 2020 12:21:48 +0000 Subject: [PATCH 006/182] Added virtual to TenantCreateDto. --- .../Volo/Abp/TenantManagement/TenantCreateDto.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs index 189d7d0f80..7b52a6dd4b 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs @@ -12,11 +12,11 @@ namespace Volo.Abp.TenantManagement [Required] [EmailAddress] [MaxLength(256)] - public string AdminEmailAddress { get; set; } + public virtual string AdminEmailAddress { get; set; } [Required] [MaxLength(128)] - public string AdminPassword { get; set; } + public virtual string AdminPassword { get; set; } } } \ No newline at end of file From c4a1dd6be70920ffd8d7fcf76ebcb973c948d010 Mon Sep 17 00:00:00 2001 From: Yunus Emre Kalkan Date: Mon, 23 Mar 2020 10:16:16 +0300 Subject: [PATCH 007/182] Update AbpPopoverTagHelperService.cs --- .../Popover/AbpPopoverTagHelperService.cs | 218 +++++++++--------- 1 file changed, 109 insertions(+), 109 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 de5e844888..168d2a5a96 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,115 +1,115 @@ -using System.Linq; -using Microsoft.AspNetCore.Razor.TagHelpers; - -namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover -{ - public class AbpPopoverTagHelperService : AbpTagHelperService - { - public override void Process(TagHelperContext context, TagHelperOutput output) - { - if (!TagHelper.Disabled ?? true) - { - SetDataToggle(context, output); - SetDataPlacement(context, output); - SetPopoverData(context, output); - SetDataTriggerIfDismissible(context, output); - } - else - { - SetDisabled(context, output); - } - } - - protected virtual void SetDisabled(TagHelperContext context, TagHelperOutput output) - { - var triggerAsHtml = TagHelper.Dismissible ?? false ? "datatrigger=\"focus\" " : ""; - // If not dismissable for hoverable condition +using System.Linq; +using Microsoft.AspNetCore.Razor.TagHelpers; + +namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover +{ + public class AbpPopoverTagHelperService : AbpTagHelperService + { + public override void Process(TagHelperContext context, TagHelperOutput output) + { + if (!TagHelper.Disabled ?? true) + { + SetDataToggle(context, output); + SetDataPlacement(context, output); + SetPopoverData(context, output); + SetDataTriggerIfDismissible(context, output); + } + else + { + SetDisabled(context, output); + } + } + + protected virtual void SetDisabled(TagHelperContext context, TagHelperOutput output) + { + var triggerAsHtml = TagHelper.Dismissible ?? false ? "data-trigger=\"focus\" " : ""; + // If not dismissable for hoverable condition if (string.IsNullOrEmpty(triggerAsHtml)) { triggerAsHtml = TagHelper.Hoverable ?? false ? "data-trigger=\"hover\" " : string.Empty; - } - var dataPlacementAsHtml = "data-placement=\"" + GetDirectory().ToString().ToLowerInvariant() + "\" "; - var titleAttribute = output.Attributes.FirstOrDefault(at => at.Name == "title"); - var titleAsHtml = titleAttribute == null ? "" : "title=\"" + titleAttribute.Value + "\" "; - var preElementHtml = ""; - var postElementHtml = ""; - - output.PreElement.SetHtmlContent(preElementHtml); - output.PostElement.SetHtmlContent(postElementHtml); - - output.Attributes.Add("style", "pointer-events: none;"); - } - - protected virtual void SetDataTriggerIfDismissible(TagHelperContext context, TagHelperOutput output) - { - if (TagHelper.Dismissible ?? false) - { - output.Attributes.Add("data-trigger", "focus"); + } + var dataPlacementAsHtml = "data-placement=\"" + GetDirectory().ToString().ToLowerInvariant() + "\" "; + var titleAttribute = output.Attributes.FirstOrDefault(at => at.Name == "title"); + var titleAsHtml = titleAttribute == null ? "" : "title=\"" + titleAttribute.Value + "\" "; + var preElementHtml = ""; + var postElementHtml = ""; + + output.PreElement.SetHtmlContent(preElementHtml); + output.PostElement.SetHtmlContent(postElementHtml); + + output.Attributes.Add("style", "pointer-events: none;"); + } + + protected virtual void SetDataTriggerIfDismissible(TagHelperContext context, TagHelperOutput output) + { + if (TagHelper.Dismissible ?? false) + { + output.Attributes.Add("data-trigger", "focus"); } // Dismissible has priority over hoverable else if (TagHelper.Hoverable ?? false) - { - output.Attributes.Add("data-trigger", "hover"); - } - } - - protected virtual void SetDataToggle(TagHelperContext context, TagHelperOutput output) - { - output.Attributes.Add("data-toggle", "popover"); - } - - protected virtual void SetDataPlacement(TagHelperContext context, TagHelperOutput output) - { - var directory = GetDirectory(); - if (directory == PopoverDirectory.Default) - { - directory = PopoverDirectory.Bottom; - } - output.Attributes.Add("data-placement", directory.ToString().ToLowerInvariant()); - } - - protected virtual void SetPopoverData(TagHelperContext context, TagHelperOutput output) - { - output.Attributes.Add("data-content", GetDataContent()); - } - - protected virtual string GetDataContent() - { - switch (GetDirectory()) - { - case PopoverDirectory.Top: - return TagHelper.AbpPopoverTop; - case PopoverDirectory.Right: - return TagHelper.AbpPopoverRight; - case PopoverDirectory.Bottom: - return TagHelper.AbpPopoverBottom; - case PopoverDirectory.Left: - return TagHelper.AbpPopoverLeft; - default: - return TagHelper.AbpPopover; - } - } - - protected virtual PopoverDirectory GetDirectory() - { - if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverTop)) - { - return PopoverDirectory.Top; - } - if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverBottom)) - { - return PopoverDirectory.Bottom; - } - if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverRight)) - { - return PopoverDirectory.Right; - } - if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverLeft)) - { - return PopoverDirectory.Left; - } - - return PopoverDirectory.Default; - } - } -} \ No newline at end of file + { + output.Attributes.Add("data-trigger", "hover"); + } + } + + protected virtual void SetDataToggle(TagHelperContext context, TagHelperOutput output) + { + output.Attributes.Add("data-toggle", "popover"); + } + + protected virtual void SetDataPlacement(TagHelperContext context, TagHelperOutput output) + { + var directory = GetDirectory(); + if (directory == PopoverDirectory.Default) + { + directory = PopoverDirectory.Bottom; + } + output.Attributes.Add("data-placement", directory.ToString().ToLowerInvariant()); + } + + protected virtual void SetPopoverData(TagHelperContext context, TagHelperOutput output) + { + output.Attributes.Add("data-content", GetDataContent()); + } + + protected virtual string GetDataContent() + { + switch (GetDirectory()) + { + case PopoverDirectory.Top: + return TagHelper.AbpPopoverTop; + case PopoverDirectory.Right: + return TagHelper.AbpPopoverRight; + case PopoverDirectory.Bottom: + return TagHelper.AbpPopoverBottom; + case PopoverDirectory.Left: + return TagHelper.AbpPopoverLeft; + default: + return TagHelper.AbpPopover; + } + } + + protected virtual PopoverDirectory GetDirectory() + { + if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverTop)) + { + return PopoverDirectory.Top; + } + if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverBottom)) + { + return PopoverDirectory.Bottom; + } + if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverRight)) + { + return PopoverDirectory.Right; + } + if (!string.IsNullOrWhiteSpace(TagHelper.AbpPopoverLeft)) + { + return PopoverDirectory.Left; + } + + return PopoverDirectory.Default; + } + } +} From 6d0759ff76e8f99f7dd9b3c62fbc77ef2ffa3f72 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Mon, 23 Mar 2020 14:44:45 +0300 Subject: [PATCH 008/182] Added multi usage attributes together --- .../Popover/AbpPopoverTagHelperService.cs | 66 ++++++++++++++----- .../Pages/Components/Popovers.cshtml | 31 +++++---- 2 files changed, 68 insertions(+), 29 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 de5e844888..7ecb351290 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 System.Linq; +using System; +using System.Linq; using Microsoft.AspNetCore.Razor.TagHelpers; namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover @@ -13,44 +14,67 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover SetDataPlacement(context, output); SetPopoverData(context, output); SetDataTriggerIfDismissible(context, output); + SetDataTriggerIfHoverable(context, output); } else { SetDisabled(context, output); } - } - + } protected virtual void SetDisabled(TagHelperContext context, TagHelperOutput output) { - var triggerAsHtml = TagHelper.Dismissible ?? false ? "datatrigger=\"focus\" " : ""; - // If not dismissable for hoverable condition - if (string.IsNullOrEmpty(triggerAsHtml)) + var triggerAsHtml = TagHelper.Dismissible ?? false ? "data-trigger=\"focus\" " : ""; + if (TagHelper.Hoverable ?? false) { - triggerAsHtml = TagHelper.Hoverable ?? false ? "data-trigger=\"hover\" " : string.Empty; + if (triggerAsHtml.Contains("focus")) + { + triggerAsHtml = triggerAsHtml.Replace("focus", "focus hover"); + } + else + { + triggerAsHtml = "data-trigger=\"hover\" "; + } } var dataPlacementAsHtml = "data-placement=\"" + 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"); + } var titleAttribute = output.Attributes.FirstOrDefault(at => at.Name == "title"); var titleAsHtml = titleAttribute == null ? "" : "title=\"" + titleAttribute.Value + "\" "; - var preElementHtml = ""; + var preElementHtml = ""; var postElementHtml = ""; output.PreElement.SetHtmlContent(preElementHtml); output.PostElement.SetHtmlContent(postElementHtml); output.Attributes.Add("style", "pointer-events: none;"); - } - + } protected virtual void SetDataTriggerIfDismissible(TagHelperContext context, TagHelperOutput output) { if (TagHelper.Dismissible ?? false) { output.Attributes.Add("data-trigger", "focus"); - } - // Dismissible has priority over hoverable - else if (TagHelper.Hoverable ?? false) - { - output.Attributes.Add("data-trigger", "hover"); } + } + + protected virtual void SetDataTriggerIfHoverable(TagHelperContext context, TagHelperOutput output) + { + if (TagHelper.Hoverable ?? false) + { + //If already has focus data trigger + if (output.Attributes.TryGetAttribute("data-trigger", out _)) + { + output.Attributes.SetAttribute(new TagHelperAttribute("data-trigger", "focus hover")); + } + else + { + output.Attributes.Add("data-trigger", "hover"); + } + } } protected virtual void SetDataToggle(TagHelperContext context, TagHelperOutput output) @@ -111,5 +135,17 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.TagHelpers.Popover return PopoverDirectory.Default; } + protected virtual bool IsDismissibleOrHoverable() + { + if (TagHelper.Dismissible ?? false) + { + return true; + } + if (TagHelper.Hoverable ?? false) + { + return true; + } + return false; + } } } \ No newline at end of file diff --git a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml index 624f17cf20..779494d70f 100644 --- a/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml +++ b/framework/test/Volo.Abp.AspNetCore.Mvc.UI.Bootstrap.Demo/Pages/Components/Popovers.cshtml @@ -31,20 +31,23 @@

Example

-
- - - Popover Default - - - Popover With Title - - - Dismissible Popover - - - Disabled Popover - +
+ + + Popover Default + + + Popover With Title + + + Dismissible Popover + + + Disabled Popover + + + Disabled Popover +
From 0f1db55c8e35a1ba9f5a275e16b87b2769d41a90 Mon Sep 17 00:00:00 2001 From: maliming Date: Tue, 24 Mar 2020 17:34:56 +0800 Subject: [PATCH 009/182] Update outdated documentation. Resolve #3327 --- docs/en/Application-Services.md | 47 +++++++++++++++++++++++++--- docs/zh-Hans/Application-Services.md | 47 +++++++++++++++++++++++++--- 2 files changed, 86 insertions(+), 8 deletions(-) diff --git a/docs/en/Application-Services.md b/docs/en/Application-Services.md index 3fb52377b3..da22479593 100644 --- a/docs/en/Application-Services.md +++ b/docs/en/Application-Services.md @@ -146,7 +146,6 @@ public interface IBookAppService : IApplicationService `BookDto` is a simple [DTO](Data-Transfer-Objects.md) class defined as below: ````csharp -[AbpAutoMapFrom(typeof(Book))] //Defines the mapping public class BookDto { public Guid Id { get; set; } @@ -159,7 +158,36 @@ public class BookDto } ```` -* `BookDto` defines `[AbpAutoMapFrom(typeof(Book))]` attribute to create the object mapping from `Book` to `BookDto`. +we creating a [Profile](https://docs.automapper.org/en/stable/Configuration.html#profile-instances) class. Example: + +````csharp +public class MyProfile : Profile +{ + public MyProfile() + { + CreateMap(); + } +} +```` + +You should then register profiles using the `AbpAutoMapperOptions`: + +````csharp +[DependsOn(typeof(AbpAutoMapperModule))] +public class MyModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + //Add all mappings defined in the assembly of the MyModule class + options.AddMaps(); + }); + } +} +```` + +`AddMaps` registers all profile classes defined in the assembly of the given class, typically your module class. It also registers for the [attribute mapping](https://docs.automapper.org/en/stable/Attribute-mapping.html). For more information, please refer to the [object to object mapping](Object-To-Object-Mapping.md) document. Then you can implement the `GetAsync` method as shown below: @@ -250,7 +278,6 @@ public interface ICrudAppService< DTO classes used in this example are `BookDto` and `CreateUpdateBookDto`: ````csharp -[AbpAutoMapFrom(typeof(Book))] public class BookDto : AuditedEntityDto { public string Name { get; set; } @@ -260,7 +287,6 @@ public class BookDto : AuditedEntityDto public float Price { get; set; } } -[AbpAutoMapTo(typeof(Book))] public class CreateUpdateBookDto { [Required] @@ -275,6 +301,19 @@ public class CreateUpdateBookDto } ```` +[Profile](https://docs.automapper.org/en/stable/Configuration.html#profile-instances) class of DTO class. + +```csharp +public class MyProfile : Profile +{ + public MyProfile() + { + CreateMap(); + CreateMap(); + } +} +``` + * `CreateUpdateBookDto` is shared by create and update operations, but you could use separated DTO classes as well. And finally, the `BookAppService` implementation is very simple: diff --git a/docs/zh-Hans/Application-Services.md b/docs/zh-Hans/Application-Services.md index e51f0af87b..72e0319cde 100644 --- a/docs/zh-Hans/Application-Services.md +++ b/docs/zh-Hans/Application-Services.md @@ -146,7 +146,6 @@ public interface IBookAppService : IApplicationService `BookDto`是一个简单的[DTO](Data-Transfer-Objects.md)类, 定义如下: ````csharp -[AbpAutoMapFrom(typeof(Book))] //Defines the mapping public class BookDto { public Guid Id { get; set; } @@ -159,7 +158,36 @@ public class BookDto } ```` -* `BookDto`定义了`[AbpAutoMapFrom(typeof(Book))]`属性来从创建对象映射Book到BookDto. +我们创建一个Automapper的[Profile](https://docs.automapper.org/en/stable/Configuration.html#profile-instances)类. 例如: + +```csharp +public class MyProfile : Profile +{ + public MyProfile() + { + CreateMap(); + } +} +``` + +然后使用`AbpAutoMapperOptions`注册配置文件: + +````csharp +[DependsOn(typeof(AbpAutoMapperModule))] +public class MyModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + //Add all mappings defined in the assembly of the MyModule class + options.AddMaps(); + }); + } +} +```` + +`AddMaps` 注册给定类的程序集中所有的配置类,通常使用模块类. 它还会注册 [attribute 映射](https://docs.automapper.org/en/stable/Attribute-mapping.html). 更多信息请参考[对象到对象映射](Object-To-Object-Mapping.md)文档 然后你可以实现`GetAsync`方法. 如下所示: @@ -249,7 +277,6 @@ public interface ICrudAppService< 示例中使用的DTO类是`BookDto`和`CreateUpdateBookDto`: ````csharp -[AbpAutoMapFrom(typeof(Book))] public class BookDto : AuditedEntityDto { public string Name { get; set; } @@ -259,7 +286,6 @@ public class BookDto : AuditedEntityDto public float Price { get; set; } } -[AbpAutoMapTo(typeof(Book))] public class CreateUpdateBookDto { [Required] @@ -274,6 +300,19 @@ public class CreateUpdateBookDto } ```` +DTO类的[Profile](https://docs.automapper.org/en/stable/Configuration.html#profile-instances)类. + +```csharp +public class MyProfile : Profile +{ + public MyProfile() + { + CreateMap(); + CreateMap(); + } +} +``` + * `CreateUpdateBookDto`由创建和更新操作共享,但你也可以使用单独的DTO类. 最后`BookAppService`实现非常简单: From a8d4e7c229d8e76f7a174a30de31a02e475d9fe4 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 25 Mar 2020 15:38:37 +0800 Subject: [PATCH 010/182] Use Exists property to determine if the file exists. Resolve #3341 --- .../Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs index 73b6e025ea..40fd3e6ea5 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc.UI.Bundling/Volo/Abp/AspNetCore/Mvc/UI/Bundling/TagHelpers/AbpTagHelperResourceService.cs @@ -63,7 +63,7 @@ namespace Volo.Abp.AspNetCore.Mvc.UI.Bundling.TagHelpers foreach (var bundleFile in bundleFiles) { var file = WebContentFileProvider.GetFileInfo(bundleFile); - if (file == null) + if (!file.Exists) { throw new AbpException($"Could not find the bundle file from {nameof(IWebContentFileProvider)}"); } From 283da6783b632bf5d00d834dd8f7b10c098a0b6c Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 26 Mar 2020 14:45:46 +0800 Subject: [PATCH 011/182] Apply Entity Extension System for samples Resolve #3361 --- .../Acme.BookStore.Domain/Users/AppUser.cs | 16 ++++++-- .../Acme.BookStore.Domain/Users/AppUser.cs | 16 ++++++-- .../BookStoreMigrationsDbContext.cs | 7 ---- .../BookStoreMigrationsDbContextFactory.cs | 2 + .../EntityFrameworkCore/BookStoreDbContext.cs | 8 ++-- ...okStoreDbContextModelCreatingExtensions.cs | 8 ---- .../BookStoreEntityExtensions.cs | 33 +++++++++++++++ .../BookStoreEntityFrameworkCoreModule.cs | 5 +++ .../BookManagementEntityExtensions.cs | 32 +++++++++++++++ ...BookManagementEntityFrameworkCoreModule.cs | 5 +++ .../Acme.BookStore.Domain/Users/AppUser.cs | 16 ++++++-- .../BookStoreMigrationsDbContext.cs | 7 ---- .../BookStoreMigrationsDbContextFactory.cs | 2 + .../EntityFrameworkCore/BookStoreDbContext.cs | 8 ++-- ...okStoreDbContextModelCreatingExtensions.cs | 8 ---- .../BookStoreEntityExtensions.cs | 33 +++++++++++++++ .../BookStoreEntityFrameworkCoreModule.cs | 5 +++ .../src/DashboardDemo.Domain/Users/AppUser.cs | 16 ++++++-- .../DashboardDemoMigrationsDbContext.cs | 7 ---- ...DashboardDemoMigrationsDbContextFactory.cs | 2 + .../DashboardDemoDbContext.cs | 8 ++-- ...ardDemoDbContextModelCreatingExtensions.cs | 8 ---- .../DashboardDemoEntityExtensions.cs | 33 +++++++++++++++ .../DashboardDemoEntityFrameworkCoreModule.cs | 5 +++ .../Acme.BookStore.Domain/Users/AppUser.cs | 16 ++++++-- .../BookStoreMigrationsDbContext.cs | 13 ------ .../BookStoreMigrationsDbContextFactory.cs | 2 + .../EntityFrameworkCore/BookStoreDbContext.cs | 8 ++-- ...okStoreDbContextModelCreatingExtensions.cs | 19 +-------- .../BookStoreEntityExtensions.cs | 40 +++++++++++++++++++ .../BookStoreEntityFrameworkCoreModule.cs | 5 +++ 31 files changed, 290 insertions(+), 103 deletions(-) create mode 100644 samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs create mode 100644 samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityExtensions.cs create mode 100644 samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs create mode 100644 samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityExtensions.cs create mode 100644 samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Users/AppUser.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Users/AppUser.cs index 9068cfbcd5..37f67ba60a 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Users/AppUser.cs +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Users/AppUser.cs @@ -41,9 +41,19 @@ namespace Acme.BookStore.Users #endregion /* Add your own properties here. Example: - * - * public virtual string MyProperty { get; set; } - */ + * + * public string MyProperty { get; set; } + * + * If you add a property and using the EF Core, remember these; + * + * 1. update BookStoreDbContext.OnModelCreating + * to configure the mapping for your new property + * 2. Update BookStoreEntityExtensions to extend the IdentityUser entity + * and add your new property to the migration. + * 3. Use the Add-Migration to add a new database migration. + * 4. Run the .DbMigrator project (or use the Update-Database command) to apply + * schema change to the database. + */ private AppUser() { diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Users/AppUser.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Users/AppUser.cs index 9068cfbcd5..37f67ba60a 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Users/AppUser.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Users/AppUser.cs @@ -41,9 +41,19 @@ namespace Acme.BookStore.Users #endregion /* Add your own properties here. Example: - * - * public virtual string MyProperty { get; set; } - */ + * + * public string MyProperty { get; set; } + * + * If you add a property and using the EF Core, remember these; + * + * 1. update BookStoreDbContext.OnModelCreating + * to configure the mapping for your new property + * 2. Update BookStoreEntityExtensions to extend the IdentityUser entity + * and add your new property to the migration. + * 3. Use the Add-Migration to add a new database migration. + * 4. Run the .DbMigrator project (or use the Update-Database command) to apply + * schema change to the database. + */ private AppUser() { diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs index 6a74deef7e..7d7b1cb243 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs @@ -42,13 +42,6 @@ namespace Acme.BookStore.EntityFrameworkCore builder.ConfigureTenantManagement(); builder.ConfigureBookManagement(); - /* Configure customizations for entities from the modules included */ - - builder.Entity(b => - { - b.ConfigureCustomUserProperties(); - }); - /* Configure your own tables/entities inside the ConfigureBookStore method */ builder.ConfigureBookStore(); diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs index 7212eb7340..4f285e597e 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs @@ -11,6 +11,8 @@ namespace Acme.BookStore.EntityFrameworkCore { public BookStoreMigrationsDbContext CreateDbContext(string[] args) { + BookStoreEntityExtensions.Configure(); + var configuration = BuildConfiguration(); var builder = new DbContextOptionsBuilder() diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs index 85644bf40a..7ddeab7a5f 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs @@ -3,6 +3,7 @@ using Acme.BookStore.Users; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; +using Volo.Abp.Identity; using Volo.Abp.Users.EntityFrameworkCore; namespace Acme.BookStore.EntityFrameworkCore @@ -39,12 +40,13 @@ namespace Acme.BookStore.EntityFrameworkCore builder.Entity(b => { - b.ToTable("AbpUsers"); //Sharing the same table "AbpUsers" with the IdentityUser + b.ToTable(AbpIdentityDbProperties.DbTablePrefix + "Users"); //Sharing the same table "AbpUsers" with the IdentityUser b.ConfigureByConvention(); b.ConfigureAbpUser(); - //Moved customization to a method so we can share it with the BookStoreMigrationsDbContext class - b.ConfigureCustomUserProperties(); + /* Configure mappings for your additional properties + * Also see the BookStoreEntityExtensions class + */ }); /* Configure your own tables/entities inside the ConfigureBookStore method */ diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs index 1510809d5f..c132d297a4 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs @@ -1,7 +1,5 @@ using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; using Volo.Abp; -using Volo.Abp.Users; namespace Acme.BookStore.EntityFrameworkCore { @@ -20,11 +18,5 @@ namespace Acme.BookStore.EntityFrameworkCore // //... //}); } - - public static void ConfigureCustomUserProperties(this EntityTypeBuilder b) - where TUser: class, IUser - { - //b.Property(nameof(AppUser.MyProperty))... - } } } \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs new file mode 100644 index 0000000000..771390698f --- /dev/null +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs @@ -0,0 +1,33 @@ +using Volo.Abp.EntityFrameworkCore.Extensions; +using Volo.Abp.Identity; +using Volo.Abp.Threading; + +namespace Acme.BookStore.EntityFrameworkCore +{ + public static class BookStoreEntityExtensions + { + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public static void Configure() + { + OneTimeRunner.Run(() => + { + /* You can configure entity extension properties for the + * entities defined in the used modules. + * + * Example: + * + * EntityExtensionManager.AddProperty( + * "MyProperty", + * b => + * { + * b.HasMaxLength(128); + * }); + * + * See the documentation for more: + * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities + */ + }); + } + } +} \ No newline at end of file diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs index 5cb2a6dc7e..c8142b8088 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs @@ -29,6 +29,11 @@ namespace Acme.BookStore.EntityFrameworkCore )] public class BookStoreEntityFrameworkCoreModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + BookStoreEntityExtensions.Configure(); + } + public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddAbpDbContext(options => diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityExtensions.cs b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityExtensions.cs new file mode 100644 index 0000000000..b7a3871453 --- /dev/null +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityExtensions.cs @@ -0,0 +1,32 @@ +using Volo.Abp.EntityFrameworkCore.Extensions; +using Volo.Abp.Threading; + +namespace Acme.BookStore.BookManagement.EntityFrameworkCore +{ + public static class BookManagementEntityExtensions + { + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public static void Configure() + { + OneTimeRunner.Run(() => + { + /* You can configure entity extension properties for the + * entities defined in the used modules. + * + * Example: + * + * EntityExtensionManager.AddProperty( + * "MyProperty", + * b => + * { + * b.HasMaxLength(128); + * }); + * + * See the documentation for more: + * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities + */ + }); + } + } +} \ No newline at end of file diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityFrameworkCoreModule.cs b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityFrameworkCoreModule.cs index c2b2867938..3734551e73 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityFrameworkCoreModule.cs +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityFrameworkCoreModule.cs @@ -10,6 +10,11 @@ namespace Acme.BookStore.BookManagement.EntityFrameworkCore )] public class BookManagementEntityFrameworkCoreModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + BookManagementEntityExtensions.Configure(); + } + public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddAbpDbContext(options => diff --git a/samples/BookStore/src/Acme.BookStore.Domain/Users/AppUser.cs b/samples/BookStore/src/Acme.BookStore.Domain/Users/AppUser.cs index 9068cfbcd5..37f67ba60a 100644 --- a/samples/BookStore/src/Acme.BookStore.Domain/Users/AppUser.cs +++ b/samples/BookStore/src/Acme.BookStore.Domain/Users/AppUser.cs @@ -41,9 +41,19 @@ namespace Acme.BookStore.Users #endregion /* Add your own properties here. Example: - * - * public virtual string MyProperty { get; set; } - */ + * + * public string MyProperty { get; set; } + * + * If you add a property and using the EF Core, remember these; + * + * 1. update BookStoreDbContext.OnModelCreating + * to configure the mapping for your new property + * 2. Update BookStoreEntityExtensions to extend the IdentityUser entity + * and add your new property to the migration. + * 3. Use the Add-Migration to add a new database migration. + * 4. Run the .DbMigrator project (or use the Update-Database command) to apply + * schema change to the database. + */ private AppUser() { diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs index 541a91a0fd..5287d6f535 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs @@ -40,13 +40,6 @@ namespace Acme.BookStore.EntityFrameworkCore builder.ConfigureFeatureManagement(); builder.ConfigureTenantManagement(); - /* Configure customizations for entities from the modules included */ - - builder.Entity(b => - { - b.ConfigureCustomUserProperties(); - }); - /* Configure your own tables/entities inside the ConfigureBookStore method */ builder.ConfigureBookStore(); diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs index da72e6fb21..cf8a18e468 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs @@ -11,6 +11,8 @@ namespace Acme.BookStore.EntityFrameworkCore { public BookStoreMigrationsDbContext CreateDbContext(string[] args) { + BookStoreEntityExtensions.Configure(); + var configuration = BuildConfiguration(); var builder = new DbContextOptionsBuilder() diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs index 386eb2623b..5849e12137 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs @@ -3,6 +3,7 @@ using Acme.BookStore.Users; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; +using Volo.Abp.Identity; using Volo.Abp.Users.EntityFrameworkCore; namespace Acme.BookStore.EntityFrameworkCore @@ -41,15 +42,16 @@ namespace Acme.BookStore.EntityFrameworkCore builder.Entity(b => { - b.ToTable("AbpUsers"); //Sharing the same table "AbpUsers" with the IdentityUser + b.ToTable(AbpIdentityDbProperties.DbTablePrefix + "Users"); //Sharing the same table "AbpUsers" with the IdentityUser b.ConfigureFullAudited(); b.ConfigureExtraProperties(); b.ConfigureConcurrencyStamp(); b.ConfigureAbpUser(); - //Moved customization to a method so we can share it with the BookStoreMigrationsDbContext class - b.ConfigureCustomUserProperties(); + /* Configure mappings for your additional properties + * Also see the BookStoreEntityExtensions class + */ }); /* Configure your own tables/entities inside the ConfigureBookStore method */ diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs index 922793e029..f11ec0d00a 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs @@ -1,8 +1,6 @@ using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; using Volo.Abp; using Volo.Abp.EntityFrameworkCore.Modeling; -using Volo.Abp.Users; namespace Acme.BookStore.EntityFrameworkCore { @@ -21,11 +19,5 @@ namespace Acme.BookStore.EntityFrameworkCore b.Property(x => x.Name).IsRequired().HasMaxLength(128); }); } - - public static void ConfigureCustomUserProperties(this EntityTypeBuilder b) - where TUser: class, IUser - { - //b.Property(nameof(AppUser.MyProperty))... - } } } \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs new file mode 100644 index 0000000000..771390698f --- /dev/null +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs @@ -0,0 +1,33 @@ +using Volo.Abp.EntityFrameworkCore.Extensions; +using Volo.Abp.Identity; +using Volo.Abp.Threading; + +namespace Acme.BookStore.EntityFrameworkCore +{ + public static class BookStoreEntityExtensions + { + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public static void Configure() + { + OneTimeRunner.Run(() => + { + /* You can configure entity extension properties for the + * entities defined in the used modules. + * + * Example: + * + * EntityExtensionManager.AddProperty( + * "MyProperty", + * b => + * { + * b.HasMaxLength(128); + * }); + * + * See the documentation for more: + * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities + */ + }); + } + } +} \ No newline at end of file diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs index 156a4207cb..be5f6039b4 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs @@ -27,6 +27,11 @@ namespace Acme.BookStore.EntityFrameworkCore )] public class BookStoreEntityFrameworkCoreModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + BookStoreEntityExtensions.Configure(); + } + public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddAbpDbContext(options => diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain/Users/AppUser.cs b/samples/DashboardDemo/src/DashboardDemo.Domain/Users/AppUser.cs index 2f2ba91689..cfad912abe 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Domain/Users/AppUser.cs +++ b/samples/DashboardDemo/src/DashboardDemo.Domain/Users/AppUser.cs @@ -41,9 +41,19 @@ namespace DashboardDemo.Users #endregion /* Add your own properties here. Example: - * - * public virtual string MyProperty { get; set; } - */ + * + * public string MyProperty { get; set; } + * + * If you add a property and using the EF Core, remember these; + * + * 1. update BookStoreDbContext.OnModelCreating + * to configure the mapping for your new property + * 2. Update BookStoreEntityExtensions to extend the IdentityUser entity + * and add your new property to the migration. + * 3. Use the Add-Migration to add a new database migration. + * 4. Run the .DbMigrator project (or use the Update-Database command) to apply + * schema change to the database. + */ private AppUser() { diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContext.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContext.cs index c94d27faf0..ccec84b7e1 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContext.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContext.cs @@ -40,13 +40,6 @@ namespace DashboardDemo.EntityFrameworkCore builder.ConfigureFeatureManagement(); builder.ConfigureTenantManagement(); - /* Configure customizations for entities from the modules included */ - - builder.Entity(b => - { - b.ConfigureCustomUserProperties(); - }); - /* Configure your own tables/entities inside the ConfigureDashboardDemo method */ builder.ConfigureDashboardDemo(); diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContextFactory.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContextFactory.cs index 0773892abc..10ce7b7da1 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContextFactory.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContextFactory.cs @@ -11,6 +11,8 @@ namespace DashboardDemo.EntityFrameworkCore { public DashboardDemoMigrationsDbContext CreateDbContext(string[] args) { + DashboardDemoEntityExtensions.Configure(); + var configuration = BuildConfiguration(); var builder = new DbContextOptionsBuilder() diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContext.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContext.cs index 94ec22abb3..33c1ddb82d 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContext.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContext.cs @@ -3,6 +3,7 @@ using DashboardDemo.Users; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; +using Volo.Abp.Identity; using Volo.Abp.Users.EntityFrameworkCore; namespace DashboardDemo.EntityFrameworkCore @@ -39,15 +40,16 @@ namespace DashboardDemo.EntityFrameworkCore builder.Entity(b => { - b.ToTable("AbpUsers"); //Sharing the same table "AbpUsers" with the IdentityUser + b.ToTable(AbpIdentityDbProperties.DbTablePrefix + "Users"); //Sharing the same table "AbpUsers" with the IdentityUser b.ConfigureFullAudited(); b.ConfigureExtraProperties(); b.ConfigureConcurrencyStamp(); b.ConfigureAbpUser(); - //Moved customization to a method so we can share it with the DashboardDemoMigrationsDbContext class - b.ConfigureCustomUserProperties(); + /* Configure mappings for your additional properties + * Also see the DashboardDemoEntityExtensions class + */ }); /* Configure your own tables/entities inside the ConfigureDashboardDemo method */ diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContextModelCreatingExtensions.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContextModelCreatingExtensions.cs index 60dae7c4cf..0a5d05f6bc 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContextModelCreatingExtensions.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContextModelCreatingExtensions.cs @@ -1,7 +1,5 @@ using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; using Volo.Abp; -using Volo.Abp.Users; namespace DashboardDemo.EntityFrameworkCore { @@ -20,11 +18,5 @@ namespace DashboardDemo.EntityFrameworkCore // //... //}); } - - public static void ConfigureCustomUserProperties(this EntityTypeBuilder b) - where TUser: class, IUser - { - //b.Property(nameof(AppUser.MyProperty))... - } } } \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityExtensions.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityExtensions.cs new file mode 100644 index 0000000000..b41ccb8ac8 --- /dev/null +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityExtensions.cs @@ -0,0 +1,33 @@ +using Volo.Abp.EntityFrameworkCore.Extensions; +using Volo.Abp.Identity; +using Volo.Abp.Threading; + +namespace DashboardDemo.EntityFrameworkCore +{ + public static class DashboardDemoEntityExtensions + { + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public static void Configure() + { + OneTimeRunner.Run(() => + { + /* You can configure entity extension properties for the + * entities defined in the used modules. + * + * Example: + * + * EntityExtensionManager.AddProperty( + * "MyProperty", + * b => + * { + * b.HasMaxLength(128); + * }); + * + * See the documentation for more: + * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities + */ + }); + } + } +} \ No newline at end of file diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityFrameworkCoreModule.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityFrameworkCoreModule.cs index de03726a20..b183c49446 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityFrameworkCoreModule.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityFrameworkCoreModule.cs @@ -27,6 +27,11 @@ namespace DashboardDemo.EntityFrameworkCore )] public class DashboardDemoEntityFrameworkCoreModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + DashboardDemoEntityExtensions.Configure(); + } + public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddAbpDbContext(options => diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.Domain/Users/AppUser.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.Domain/Users/AppUser.cs index 9068cfbcd5..37f67ba60a 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.Domain/Users/AppUser.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.Domain/Users/AppUser.cs @@ -41,9 +41,19 @@ namespace Acme.BookStore.Users #endregion /* Add your own properties here. Example: - * - * public virtual string MyProperty { get; set; } - */ + * + * public string MyProperty { get; set; } + * + * If you add a property and using the EF Core, remember these; + * + * 1. update BookStoreDbContext.OnModelCreating + * to configure the mapping for your new property + * 2. Update BookStoreEntityExtensions to extend the IdentityUser entity + * and add your new property to the migration. + * 3. Use the Add-Migration to add a new database migration. + * 4. Run the .DbMigrator project (or use the Update-Database command) to apply + * schema change to the database. + */ private AppUser() { diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs index 7a83a323d8..8064243388 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs @@ -34,19 +34,6 @@ namespace Acme.BookStore.EntityFrameworkCore builder.ConfigureFeatureManagement(); builder.ConfigureTenantManagement(); - /* Configure customizations for entities from the modules included */ - - //CONFIGURE THE CUSTOM ROLE PROPERTIES - builder.Entity(b => - { - b.ConfigureCustomRoleProperties(); - }); - - builder.Entity(b => - { - b.ConfigureCustomUserProperties(); - }); - /* Configure your own tables/entities inside the ConfigureBookStore method */ builder.ConfigureBookStore(); diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs index da72e6fb21..cf8a18e468 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs @@ -11,6 +11,8 @@ namespace Acme.BookStore.EntityFrameworkCore { public BookStoreMigrationsDbContext CreateDbContext(string[] args) { + BookStoreEntityExtensions.Configure(); + var configuration = BuildConfiguration(); var builder = new DbContextOptionsBuilder() diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs index 091e5820fc..d3726865cd 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs @@ -4,6 +4,7 @@ using Acme.BookStore.Users; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; +using Volo.Abp.Identity; using Volo.Abp.Users.EntityFrameworkCore; namespace Acme.BookStore.EntityFrameworkCore @@ -51,12 +52,13 @@ namespace Acme.BookStore.EntityFrameworkCore builder.Entity(b => { - b.ToTable("AbpUsers"); //Sharing the same table "AbpUsers" with the IdentityUser + b.ToTable(AbpIdentityDbProperties.DbTablePrefix + "Users"); //Sharing the same table "AbpUsers" with the IdentityUser b.ConfigureByConvention(); b.ConfigureAbpUser(); - //Moved customization to a method so we can share it with the BookStoreMigrationsDbContext class - b.ConfigureCustomUserProperties(); + /* Configure mappings for your additional properties + * Also see the BookStoreEntityExtensions class + */ }); /* Configure your own tables/entities inside the ConfigureBookStore method */ diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs index 345bde14a0..c132d297a4 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs @@ -1,10 +1,5 @@ -using System; -using Acme.BookStore.Roles; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; +using Microsoft.EntityFrameworkCore; using Volo.Abp; -using Volo.Abp.Domain.Entities; -using Volo.Abp.Users; namespace Acme.BookStore.EntityFrameworkCore { @@ -23,17 +18,5 @@ namespace Acme.BookStore.EntityFrameworkCore // //... //}); } - - public static void ConfigureCustomUserProperties(this EntityTypeBuilder b) - where TUser: class, IUser - { - //b.Property(nameof(AppUser.MyProperty))... - } - - public static void ConfigureCustomRoleProperties(this EntityTypeBuilder b) - where TRole : class, IEntity - { - b.Property(nameof(AppRole.Title)).HasMaxLength(128); - } } } \ No newline at end of file diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs new file mode 100644 index 0000000000..9d59942de8 --- /dev/null +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs @@ -0,0 +1,40 @@ +using Volo.Abp.EntityFrameworkCore.Extensions; +using Volo.Abp.Identity; +using Volo.Abp.Threading; + +namespace Acme.BookStore.EntityFrameworkCore +{ + public static class BookStoreEntityExtensions + { + private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); + + public static void Configure() + { + OneTimeRunner.Run(() => + { + /* You can configure entity extension properties for the + * entities defined in the used modules. + * + * Example: + * + * EntityExtensionManager.AddProperty( + * "MyProperty", + * b => + * { + * b.HasMaxLength(128); + * }); + * + * See the documentation for more: + * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities + */ + + EntityExtensionManager.AddProperty( + nameof(AppRole.Title), + b => + { + b.HasMaxLength(128); + }); + }); + } + } +} \ No newline at end of file diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs index 156a4207cb..be5f6039b4 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs @@ -27,6 +27,11 @@ namespace Acme.BookStore.EntityFrameworkCore )] public class BookStoreEntityFrameworkCoreModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + BookStoreEntityExtensions.Configure(); + } + public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddAbpDbContext(options => From 3d85fd01417a5e141c06847b90124e82f78868fc Mon Sep 17 00:00:00 2001 From: maliming Date: Thu, 26 Mar 2020 15:48:30 +0800 Subject: [PATCH 012/182] Undo changes to EfCoreMigrationDemo. --- build/common.ps1 | 1 + .../Acme.BookStore.Domain/Users/AppUser.cs | 16 ++------ .../BookStoreMigrationsDbContext.cs | 13 ++++++ .../BookStoreMigrationsDbContextFactory.cs | 3 +- .../EntityFrameworkCore/BookStoreDbContext.cs | 8 ++-- ...okStoreDbContextModelCreatingExtensions.cs | 19 ++++++++- .../BookStoreEntityExtensions.cs | 40 ------------------- .../BookStoreEntityFrameworkCoreModule.cs | 5 --- ...BookStore.EntityFrameworkCore.Tests.csproj | 1 + .../BookStoreEntityFrameworkCoreTestModule.cs | 12 +++++- .../BookStoreWebTestModule.cs | 8 ++++ 11 files changed, 59 insertions(+), 67 deletions(-) delete mode 100644 samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs diff --git a/build/common.ps1 b/build/common.ps1 index e4ba6a8adc..06fa20b35e 100644 --- a/build/common.ps1 +++ b/build/common.ps1 @@ -28,6 +28,7 @@ $solutionPaths = ( "../samples/BookStore-Modular/modules/book-management", "../samples/BookStore-Modular/application", "../samples/DashboardDemo", + "../samples/EfCoreMigrationDemo", "../samples/MicroserviceDemo", "../samples/RabbitMqEventBus", "../abp_io/AbpIoLocalization" diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.Domain/Users/AppUser.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.Domain/Users/AppUser.cs index 37f67ba60a..9068cfbcd5 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.Domain/Users/AppUser.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.Domain/Users/AppUser.cs @@ -41,19 +41,9 @@ namespace Acme.BookStore.Users #endregion /* Add your own properties here. Example: - * - * public string MyProperty { get; set; } - * - * If you add a property and using the EF Core, remember these; - * - * 1. update BookStoreDbContext.OnModelCreating - * to configure the mapping for your new property - * 2. Update BookStoreEntityExtensions to extend the IdentityUser entity - * and add your new property to the migration. - * 3. Use the Add-Migration to add a new database migration. - * 4. Run the .DbMigrator project (or use the Update-Database command) to apply - * schema change to the database. - */ + * + * public virtual string MyProperty { get; set; } + */ private AppUser() { diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs index 8064243388..7a83a323d8 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContext.cs @@ -34,6 +34,19 @@ namespace Acme.BookStore.EntityFrameworkCore builder.ConfigureFeatureManagement(); builder.ConfigureTenantManagement(); + /* Configure customizations for entities from the modules included */ + + //CONFIGURE THE CUSTOM ROLE PROPERTIES + builder.Entity(b => + { + b.ConfigureCustomRoleProperties(); + }); + + builder.Entity(b => + { + b.ConfigureCustomUserProperties(); + }); + /* Configure your own tables/entities inside the ConfigureBookStore method */ builder.ConfigureBookStore(); diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs index cf8a18e468..7364cd29ab 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs @@ -11,8 +11,7 @@ namespace Acme.BookStore.EntityFrameworkCore { public BookStoreMigrationsDbContext CreateDbContext(string[] args) { - BookStoreEntityExtensions.Configure(); - + var configuration = BuildConfiguration(); var builder = new DbContextOptionsBuilder() diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs index d3726865cd..091e5820fc 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs @@ -4,7 +4,6 @@ using Acme.BookStore.Users; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.Modeling; -using Volo.Abp.Identity; using Volo.Abp.Users.EntityFrameworkCore; namespace Acme.BookStore.EntityFrameworkCore @@ -52,13 +51,12 @@ namespace Acme.BookStore.EntityFrameworkCore builder.Entity(b => { - b.ToTable(AbpIdentityDbProperties.DbTablePrefix + "Users"); //Sharing the same table "AbpUsers" with the IdentityUser + b.ToTable("AbpUsers"); //Sharing the same table "AbpUsers" with the IdentityUser b.ConfigureByConvention(); b.ConfigureAbpUser(); - /* Configure mappings for your additional properties - * Also see the BookStoreEntityExtensions class - */ + //Moved customization to a method so we can share it with the BookStoreMigrationsDbContext class + b.ConfigureCustomUserProperties(); }); /* Configure your own tables/entities inside the ConfigureBookStore method */ diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs index c132d297a4..345bde14a0 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContextModelCreatingExtensions.cs @@ -1,5 +1,10 @@ -using Microsoft.EntityFrameworkCore; +using System; +using Acme.BookStore.Roles; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; using Volo.Abp; +using Volo.Abp.Domain.Entities; +using Volo.Abp.Users; namespace Acme.BookStore.EntityFrameworkCore { @@ -18,5 +23,17 @@ namespace Acme.BookStore.EntityFrameworkCore // //... //}); } + + public static void ConfigureCustomUserProperties(this EntityTypeBuilder b) + where TUser: class, IUser + { + //b.Property(nameof(AppUser.MyProperty))... + } + + public static void ConfigureCustomRoleProperties(this EntityTypeBuilder b) + where TRole : class, IEntity + { + b.Property(nameof(AppRole.Title)).HasMaxLength(128); + } } } \ No newline at end of file diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs deleted file mode 100644 index 9d59942de8..0000000000 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Volo.Abp.EntityFrameworkCore.Extensions; -using Volo.Abp.Identity; -using Volo.Abp.Threading; - -namespace Acme.BookStore.EntityFrameworkCore -{ - public static class BookStoreEntityExtensions - { - private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); - - public static void Configure() - { - OneTimeRunner.Run(() => - { - /* You can configure entity extension properties for the - * entities defined in the used modules. - * - * Example: - * - * EntityExtensionManager.AddProperty( - * "MyProperty", - * b => - * { - * b.HasMaxLength(128); - * }); - * - * See the documentation for more: - * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities - */ - - EntityExtensionManager.AddProperty( - nameof(AppRole.Title), - b => - { - b.HasMaxLength(128); - }); - }); - } - } -} \ No newline at end of file diff --git a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs index be5f6039b4..156a4207cb 100644 --- a/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs +++ b/samples/EfCoreMigrationDemo/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs @@ -27,11 +27,6 @@ namespace Acme.BookStore.EntityFrameworkCore )] public class BookStoreEntityFrameworkCoreModule : AbpModule { - public override void PreConfigureServices(ServiceConfigurationContext context) - { - BookStoreEntityExtensions.Configure(); - } - public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddAbpDbContext(options => diff --git a/samples/EfCoreMigrationDemo/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj b/samples/EfCoreMigrationDemo/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj index dd2137ad06..b03b0ed22d 100644 --- a/samples/EfCoreMigrationDemo/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj +++ b/samples/EfCoreMigrationDemo/test/Acme.BookStore.EntityFrameworkCore.Tests/Acme.BookStore.EntityFrameworkCore.Tests.csproj @@ -9,6 +9,7 @@ + diff --git a/samples/EfCoreMigrationDemo/test/Acme.BookStore.EntityFrameworkCore.Tests/EntityFrameworkCore/BookStoreEntityFrameworkCoreTestModule.cs b/samples/EfCoreMigrationDemo/test/Acme.BookStore.EntityFrameworkCore.Tests/EntityFrameworkCore/BookStoreEntityFrameworkCoreTestModule.cs index e1171d6d90..a3f2bb5aa7 100644 --- a/samples/EfCoreMigrationDemo/test/Acme.BookStore.EntityFrameworkCore.Tests/EntityFrameworkCore/BookStoreEntityFrameworkCoreTestModule.cs +++ b/samples/EfCoreMigrationDemo/test/Acme.BookStore.EntityFrameworkCore.Tests/EntityFrameworkCore/BookStoreEntityFrameworkCoreTestModule.cs @@ -1,4 +1,5 @@ -using Microsoft.Data.Sqlite; +using Acme.BookStore.DbMigrationsForSecondDb.EntityFrameworkCore; +using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Storage; @@ -51,6 +52,15 @@ namespace Acme.BookStore.EntityFrameworkCore context.GetService().CreateTables(); } + var secondOptions = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + + using (var context = new BookStoreSecondMigrationsDbContext(secondOptions)) + { + context.GetService().CreateTables(); + } + return connection; } } diff --git a/samples/EfCoreMigrationDemo/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs b/samples/EfCoreMigrationDemo/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs index 46e4312035..786015d18b 100644 --- a/samples/EfCoreMigrationDemo/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs +++ b/samples/EfCoreMigrationDemo/test/Acme.BookStore.Web.Tests/BookStoreWebTestModule.cs @@ -12,6 +12,7 @@ using Acme.BookStore.Web; using Acme.BookStore.Web.Menus; using Volo.Abp; using Volo.Abp.AspNetCore.TestBase; +using Volo.Abp.Data; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.UI.Navigation; @@ -38,6 +39,13 @@ namespace Acme.BookStore { ConfigureLocalizationServices(context.Services); ConfigureNavigationServices(context.Services); + + Configure(options => + { + //SqliteConnection does not support nested transactions. + //So Dbcontext and connectionString need be same. + options.ConnectionStrings.Clear(); + }); } private static void ConfigureLocalizationServices(IServiceCollection services) From 4c17ed4180c33d457436426ab557fd0ccfb30c8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Fri, 27 Mar 2020 16:07:00 +0300 Subject: [PATCH 013/182] entitychanges ef core implemented --- .../Abp/AuditLogging/IAuditLogRepository.cs | 23 ++++++++ ...bpAuditLoggingEfCoreQueryableExtensions.cs | 12 ++++ .../EfCoreAuditLogRepository.cs | 56 ++++++++++++++++++ .../IAuditLoggingDbContext.cs | 2 + .../MongoDB/MongoAuditLogRepository.cs | 58 +++++++++++++++++++ 5 files changed, 151 insertions(+) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs index fb676fe288..dbf3692b29 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Net; using System.Threading; using System.Threading.Tasks; +using Volo.Abp.Auditing; using Volo.Abp.Domain.Repositories; namespace Volo.Abp.AuditLogging @@ -44,5 +45,27 @@ namespace Volo.Abp.AuditLogging Task> GetAverageExecutionDurationPerDayAsync( DateTime startDate, DateTime endDate); + + Task> GetEntityChangeListAsync( + string sorting = null, + int maxResultCount = 50, + int skipCount = 0, + Guid? auditLogId = null, + DateTime? startTime = null, + DateTime? endTime = null, + EntityChangeType? changeType = null, + string entityId = null, + string entityTypeFullName = null, + bool includeDetails = false, + CancellationToken cancellationToken = default); + + Task GetEntityChangeCountAsync( + Guid? auditLogId = null, + DateTime? startTime = null, + DateTime? endTime = null, + EntityChangeType? changeType = null, + string entityId = null, + string entityTypeFullName = null, + CancellationToken cancellationToken = default); } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/AbpAuditLoggingEfCoreQueryableExtensions.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/AbpAuditLoggingEfCoreQueryableExtensions.cs index 27445045e7..6dc4bfadb8 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/AbpAuditLoggingEfCoreQueryableExtensions.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/AbpAuditLoggingEfCoreQueryableExtensions.cs @@ -18,5 +18,17 @@ namespace Volo.Abp.AuditLogging .Include(x => x.Actions) .Include(x => x.EntityChanges).ThenInclude(ec=>ec.PropertyChanges); } + + public static IQueryable IncludeDetails( + this IQueryable queryable, + bool include = true) + { + if (!include) + { + return queryable; + } + + return queryable.Include(x => x.PropertyChanges); + } } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs index 1fabbcbe7c..ece526d869 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs @@ -6,6 +6,7 @@ using System.Net; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; +using Volo.Abp.Auditing; using Volo.Abp.Domain.Repositories.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore; @@ -139,5 +140,60 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore { return GetQueryable().IncludeDetails(); } + + public virtual async Task> GetEntityChangeListAsync( + string sorting = null, + int maxResultCount = 50, + int skipCount = 0, + Guid? auditLogId = null, + DateTime? startTime = null, + DateTime? endTime = null, + EntityChangeType? changeType = null, + string entityId = null, + string entityTypeFullName = null, + bool includeDetails = false, + CancellationToken cancellationToken = default) + { + var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName, includeDetails); + + return await query.OrderBy(sorting ?? "changeTime desc") + .PageBy(skipCount, maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + public virtual async Task GetEntityChangeCountAsync( + Guid? auditLogId = null, + DateTime? startTime = null, + DateTime? endTime = null, + EntityChangeType? changeType = null, + string entityId = null, + string entityTypeFullName = null, + CancellationToken cancellationToken = default) + { + var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName, false); + + var totalCount = await query.LongCountAsync(GetCancellationToken(cancellationToken)); + + return totalCount; + } + + protected virtual IQueryable GetEntityChangeListQuery( + Guid? auditLogId = null, + DateTime? startTime = null, + DateTime? endTime = null, + EntityChangeType? changeType = null, + string entityId = null, + string entityTypeFullName = null, + bool includeDetails = false) + { + return DbContext.EntityChanges.AsNoTracking().IncludeDetails(includeDetails) + .WhereIf(auditLogId.HasValue, e => e.AuditLogId == auditLogId) + .WhereIf(startTime.HasValue, e => e.ChangeTime >= startTime) + .WhereIf(endTime.HasValue, e => e.ChangeTime <= endTime) + .WhereIf(changeType.HasValue, e => e.ChangeType == changeType) + .WhereIf(!string.IsNullOrWhiteSpace(entityId), e => e.EntityId == entityId) + .WhereIf(!string.IsNullOrWhiteSpace(entityTypeFullName), + e => e.EntityTypeFullName == entityTypeFullName); + } } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/IAuditLoggingDbContext.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/IAuditLoggingDbContext.cs index 684c5fc55f..a74c20bd68 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/IAuditLoggingDbContext.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/IAuditLoggingDbContext.cs @@ -8,5 +8,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore public interface IAuditLoggingDbContext : IEfCoreDbContext { DbSet AuditLogs { get; set; } + + DbSet EntityChanges { get; set; } } } \ No newline at end of file diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index fdb9bca387..a813ada669 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -7,6 +7,7 @@ using System.Threading; using System.Threading.Tasks; using MongoDB.Driver; using MongoDB.Driver.Linq; +using Volo.Abp.Auditing; using Volo.Abp.Domain.Repositories.MongoDB; using Volo.Abp.MongoDB; @@ -138,5 +139,62 @@ namespace Volo.Abp.AuditLogging.MongoDB return result.ToDictionary(element => element.Day.ClearTime(), element => element.avgExecutionTime); } + + public virtual async Task> GetEntityChangeListAsync( + string sorting = null, + int maxResultCount = 50, + int skipCount = 0, + Guid? auditLogId = null, + DateTime? startTime = null, + DateTime? endTime = null, + EntityChangeType? changeType = null, + string entityId = null, + string entityTypeFullName = null, + bool includeDetails = false, + CancellationToken cancellationToken = default) + { + var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName, includeDetails); + + return await query.OrderBy(sorting ?? "changeTime desc").As>() + .PageBy>(skipCount, maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + public virtual async Task GetEntityChangeCountAsync( + Guid? auditLogId = null, + DateTime? startTime = null, + DateTime? endTime = null, + EntityChangeType? changeType = null, + string entityId = null, + string entityTypeFullName = null, + CancellationToken cancellationToken = default) + { + var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName); + var count = await query.As>() + .LongCountAsync(GetCancellationToken(cancellationToken)); + + return count; + } + + protected virtual IQueryable GetEntityChangeListQuery( + Guid? auditLogId = null, + DateTime? startTime = null, + DateTime? endTime = null, + EntityChangeType? changeType = null, + string entityId = null, + string entityTypeFullName = null, + bool includeDetails = false) + { + return null; + // TODO: Learn How to? + return GetMongoQueryable() + .WhereIf(auditLogId.HasValue, e => e.AuditLogId == auditLogId) + .WhereIf(startTime.HasValue, e => e.ChangeTime >= startTime) + .WhereIf(endTime.HasValue, e => e.ChangeTime <= endTime) + .WhereIf(changeType.HasValue, e => e.ChangeType == changeType) + .WhereIf(!string.IsNullOrWhiteSpace(entityId), e => e.EntityId == entityId) + .WhereIf(!string.IsNullOrWhiteSpace(entityTypeFullName), + e => e.EntityTypeFullName == entityTypeFullName); + } } } From 122e157555186e95948cb5389df1cd1c2a90b25e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Fri, 27 Mar 2020 18:58:45 +0300 Subject: [PATCH 014/182] update --- .../EntityFrameworkCore/EfCoreAuditLogRepository.cs | 2 +- .../AuditLogging/EntityFrameworkCore/IAuditLoggingDbContext.cs | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs index ece526d869..b59186c923 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs @@ -186,7 +186,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore string entityTypeFullName = null, bool includeDetails = false) { - return DbContext.EntityChanges.AsNoTracking().IncludeDetails(includeDetails) + return DbContext.Set().AsNoTracking().IncludeDetails(includeDetails) .WhereIf(auditLogId.HasValue, e => e.AuditLogId == auditLogId) .WhereIf(startTime.HasValue, e => e.ChangeTime >= startTime) .WhereIf(endTime.HasValue, e => e.ChangeTime <= endTime) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/IAuditLoggingDbContext.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/IAuditLoggingDbContext.cs index a74c20bd68..684c5fc55f 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/IAuditLoggingDbContext.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/IAuditLoggingDbContext.cs @@ -8,7 +8,5 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore public interface IAuditLoggingDbContext : IEfCoreDbContext { DbSet AuditLogs { get; set; } - - DbSet EntityChanges { get; set; } } } \ No newline at end of file From 4e6fe6c61f86f5272b40e72309fad9fe68c6c76e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Fri, 27 Mar 2020 22:49:45 +0300 Subject: [PATCH 015/182] Update MongoAuditLogRepository.cs --- .../MongoDB/MongoAuditLogRepository.cs | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index a813ada669..d2e002fbbe 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -155,9 +155,11 @@ namespace Volo.Abp.AuditLogging.MongoDB { var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName, includeDetails); - return await query.OrderBy(sorting ?? "changeTime desc").As>() - .PageBy>(skipCount, maxResultCount) + var auditLogs = await query.OrderBy(sorting ?? "changeTime desc").As>() + .PageBy>(skipCount, maxResultCount) .ToListAsync(GetCancellationToken(cancellationToken)); + + return auditLogs.SelectMany(x => x.EntityChanges).ToList(); } public virtual async Task GetEntityChangeCountAsync( @@ -170,13 +172,13 @@ namespace Volo.Abp.AuditLogging.MongoDB CancellationToken cancellationToken = default) { var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName); - var count = await query.As>() + var count = await query.As>() .LongCountAsync(GetCancellationToken(cancellationToken)); return count; } - protected virtual IQueryable GetEntityChangeListQuery( + protected virtual IQueryable GetEntityChangeListQuery( Guid? auditLogId = null, DateTime? startTime = null, DateTime? endTime = null, @@ -185,16 +187,14 @@ namespace Volo.Abp.AuditLogging.MongoDB string entityTypeFullName = null, bool includeDetails = false) { - return null; - // TODO: Learn How to? return GetMongoQueryable() - .WhereIf(auditLogId.HasValue, e => e.AuditLogId == auditLogId) - .WhereIf(startTime.HasValue, e => e.ChangeTime >= startTime) - .WhereIf(endTime.HasValue, e => e.ChangeTime <= endTime) - .WhereIf(changeType.HasValue, e => e.ChangeType == changeType) - .WhereIf(!string.IsNullOrWhiteSpace(entityId), e => e.EntityId == entityId) - .WhereIf(!string.IsNullOrWhiteSpace(entityTypeFullName), - e => e.EntityTypeFullName == entityTypeFullName); + .WhereIf(auditLogId.HasValue, e => e.Id == auditLogId) + .WhereIf(startTime.HasValue, e => e.EntityChanges.Any(ec => ec.ChangeTime >= startTime)) + .WhereIf(endTime.HasValue, e => e.EntityChanges.Any(ec => ec.ChangeTime >= endTime)) + .WhereIf(changeType.HasValue, e => e.EntityChanges.Any(ec => ec.ChangeType >= changeType)) + .WhereIf(!string.IsNullOrWhiteSpace(entityId), e => e.EntityChanges.Any(ec => ec.EntityId == entityId)) + .WhereIf(!string.IsNullOrWhiteSpace(entityTypeFullName), + e => e.EntityChanges.Any(ec => ec.EntityTypeFullName == entityTypeFullName)); } } } From b8d0c34869404a51eae14502f5932dac4f67dbf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Sat, 28 Mar 2020 00:04:17 +0300 Subject: [PATCH 016/182] implemented --- .../MongoDB/MongoAuditLogRepository.cs | 58 +++- .../AuditLogging/AuditLogRepository_Tests.cs | 325 ++++++++++++++++++ 2 files changed, 377 insertions(+), 6 deletions(-) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index d2e002fbbe..8aeb23fa51 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -153,13 +153,18 @@ namespace Volo.Abp.AuditLogging.MongoDB bool includeDetails = false, CancellationToken cancellationToken = default) { - var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName, includeDetails); + var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName); - var auditLogs = await query.OrderBy(sorting ?? "changeTime desc").As>() + var auditLogs = await query.As>() .PageBy>(skipCount, maxResultCount) .ToListAsync(GetCancellationToken(cancellationToken)); + + // TODO: Improve this specification - return auditLogs.SelectMany(x => x.EntityChanges).ToList(); + return auditLogs + .SelectMany(x => x.EntityChanges.Where(y => + IsSatisfiedBySpecification(y, auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName))) + .AsQueryable().OrderBy(sorting ?? "changeTime desc").ToList(); } public virtual async Task GetEntityChangeCountAsync( @@ -184,17 +189,58 @@ namespace Volo.Abp.AuditLogging.MongoDB DateTime? endTime = null, EntityChangeType? changeType = null, string entityId = null, - string entityTypeFullName = null, - bool includeDetails = false) + string entityTypeFullName = null) { return GetMongoQueryable() .WhereIf(auditLogId.HasValue, e => e.Id == auditLogId) .WhereIf(startTime.HasValue, e => e.EntityChanges.Any(ec => ec.ChangeTime >= startTime)) .WhereIf(endTime.HasValue, e => e.EntityChanges.Any(ec => ec.ChangeTime >= endTime)) - .WhereIf(changeType.HasValue, e => e.EntityChanges.Any(ec => ec.ChangeType >= changeType)) + .WhereIf(changeType.HasValue, e => e.EntityChanges.Any(ec => ec.ChangeType == changeType)) .WhereIf(!string.IsNullOrWhiteSpace(entityId), e => e.EntityChanges.Any(ec => ec.EntityId == entityId)) .WhereIf(!string.IsNullOrWhiteSpace(entityTypeFullName), e => e.EntityChanges.Any(ec => ec.EntityTypeFullName == entityTypeFullName)); } + + protected virtual bool IsSatisfiedBySpecification( + EntityChange entityChange, + Guid? auditLogId = null, + DateTime? startTime = null, + DateTime? endTime = null, + EntityChangeType? changeType = null, + string entityId = null, + string entityTypeFullName = null) + { + if (auditLogId != null && auditLogId != entityChange.AuditLogId) + { + return false; + } + + if (startTime != null && startTime.Value >= entityChange.ChangeTime) + { + return false; + } + + if (endTime != null && endTime.Value <= entityChange.ChangeTime) + { + return false; + } + + if (changeType != null && changeType != entityChange.ChangeType) + { + return false; + } + + if (entityId != null && entityId != entityChange.EntityId) + { + return false; + } + + if (entityTypeFullName != null && entityTypeFullName != entityChange.EntityTypeFullName) + { + return false; + } + + return true; + } } } diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs index f88c10c079..3b04b78234 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs @@ -333,5 +333,330 @@ namespace Volo.Abp.AuditLogging results.Count.ShouldBe(1); results.Values.First().ShouldBe(50); // (45 + 55) / 2 } + + [Fact] + public async Task GetEntityChangeListAsync() + { + // Arrange + var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); + var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); + var ipAddress = "153.1.7.61"; + var firstComment = "first Comment"; + + var log1 = new AuditLogInfo + { + UserId = userId, + ImpersonatorUserId = Guid.NewGuid(), + ImpersonatorTenantId = Guid.NewGuid(), + ExecutionTime = DateTime.Today, + ExecutionDuration = 42, + ClientIpAddress = ipAddress, + ClientName = "MyDesktop", + BrowserInfo = "Chrome", + Comments = new List { firstComment, "Second Comment" }, + UserName = "Douglas", + EntityChanges = { + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Deleted", + ChangeType = EntityChangeType.Deleted, + ChangeTime = DateTime.Now, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + }, + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Created", + ChangeType = EntityChangeType.Created, + ChangeTime = DateTime.Now, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + } + + } + }; + + var log2 = new AuditLogInfo + { + UserId = userId2, + ImpersonatorUserId = Guid.NewGuid(), + ImpersonatorTenantId = Guid.NewGuid(), + ExecutionTime = DateTime.Today, + ExecutionDuration = 42, + ClientIpAddress = ipAddress, + ClientName = "MyDesktop", + BrowserInfo = "Chrome", + Comments = new List { firstComment, "Second Comment" }, + HttpStatusCode = (int?)HttpStatusCode.BadGateway, + EntityChanges = { + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Updated", + ChangeType = EntityChangeType.Updated, + ChangeTime = DateTime.Now, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + } + } + }; + + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + + //Assert + var logs = await AuditLogRepository.GetEntityChangeListAsync(); + logs.ShouldNotBeNull(); + logs.Count.ShouldBe(3); + + logs.Single(x => x.ChangeType == EntityChangeType.Created).ShouldNotBeNull(); + logs.Single(x => x.ChangeType == EntityChangeType.Deleted).ShouldNotBeNull(); + logs.Single(x => x.ChangeType == EntityChangeType.Updated).ShouldNotBeNull(); + } + + [Fact] + public async Task GetOrderedEntityChangeListAsync() + { + // Arrange + var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); + var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); + var ipAddress = "153.1.7.61"; + var firstComment = "first Comment"; + + var deletedEntityChangeTime = new DateTime(2000, 05, 05, 05, 05, 05); + var createdEntityChangeTime = new DateTime(2005, 05, 05, 05, 05, 05); + var updatedEntityChangeTime = new DateTime(2010, 05, 05, 05, 05, 05); + + var log1 = new AuditLogInfo + { + UserId = userId, + ImpersonatorUserId = Guid.NewGuid(), + ImpersonatorTenantId = Guid.NewGuid(), + ExecutionTime = DateTime.Today, + ExecutionDuration = 42, + ClientIpAddress = ipAddress, + ClientName = "MyDesktop", + BrowserInfo = "Chrome", + Comments = new List { firstComment, "Second Comment" }, + UserName = "Douglas", + EntityChanges = { + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Deleted", + ChangeType = EntityChangeType.Deleted, + ChangeTime = deletedEntityChangeTime, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + }, + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Created", + ChangeType = EntityChangeType.Created, + ChangeTime = createdEntityChangeTime, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + } + + } + }; + + var log2 = new AuditLogInfo + { + UserId = userId2, + ImpersonatorUserId = Guid.NewGuid(), + ImpersonatorTenantId = Guid.NewGuid(), + ExecutionTime = DateTime.Today, + ExecutionDuration = 42, + ClientIpAddress = ipAddress, + ClientName = "MyDesktop", + BrowserInfo = "Chrome", + Comments = new List { firstComment, "Second Comment" }, + HttpStatusCode = (int?)HttpStatusCode.BadGateway, + EntityChanges = { + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Updated", + ChangeType = EntityChangeType.Updated, + ChangeTime = updatedEntityChangeTime, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + } + } + }; + + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + + //Assert + var logs = await AuditLogRepository.GetEntityChangeListAsync(); + logs.ShouldNotBeNull(); + logs.Count.ShouldBe(3); + + logs.First().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Updated"); + logs.Last().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Deleted"); + + var logsReversed = await AuditLogRepository.GetEntityChangeListAsync("changeTime asc"); + + logsReversed.First().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Deleted"); + logsReversed.Last().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Updated"); + } + + [Fact] + public async Task GetSpecifiedEntityChangeListAsync() + { + // Arrange + var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); + var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); + var ipAddress = "153.1.7.61"; + var firstComment = "first Comment"; + + var deletedEntityChangeTime = new DateTime(2000, 05, 05, 05, 05, 05); + var createdEntityChangeTime = new DateTime(2005, 05, 05, 05, 05, 05); + var updatedEntityChangeTime = new DateTime(2010, 05, 05, 05, 05, 05); + + var log1 = new AuditLogInfo + { + UserId = userId, + ImpersonatorUserId = Guid.NewGuid(), + ImpersonatorTenantId = Guid.NewGuid(), + ExecutionTime = DateTime.Today, + ExecutionDuration = 42, + ClientIpAddress = ipAddress, + ClientName = "MyDesktop", + BrowserInfo = "Chrome", + Comments = new List { firstComment, "Second Comment" }, + UserName = "Douglas", + EntityChanges = { + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Deleted", + ChangeType = EntityChangeType.Deleted, + ChangeTime = deletedEntityChangeTime, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + }, + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Created", + ChangeType = EntityChangeType.Created, + ChangeTime = createdEntityChangeTime, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + } + } + }; + + var log2 = new AuditLogInfo + { + UserId = userId2, + ImpersonatorUserId = Guid.NewGuid(), + ImpersonatorTenantId = Guid.NewGuid(), + ExecutionTime = DateTime.Today, + ExecutionDuration = 42, + ClientIpAddress = ipAddress, + ClientName = "MyDesktop", + BrowserInfo = "Chrome", + Comments = new List { firstComment, "Second Comment" }, + HttpStatusCode = (int?)HttpStatusCode.BadGateway, + EntityChanges = { + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Updated", + ChangeType = EntityChangeType.Updated, + ChangeTime = updatedEntityChangeTime, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + } + } + }; + + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + + //Assert + var logs = await AuditLogRepository.GetEntityChangeListAsync(changeType: EntityChangeType.Created); + logs.ShouldNotBeNull(); + logs.Count.ShouldBe(1); + } } } From 272ca7b315c224ebd71929c12826ab78172c2f2e Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 28 Mar 2020 05:13:28 +0300 Subject: [PATCH 017/182] added initial post --- docs/en/Blog-Posts/2020-04-01/Post.md | 176 ++++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 docs/en/Blog-Posts/2020-04-01/Post.md diff --git a/docs/en/Blog-Posts/2020-04-01/Post.md b/docs/en/Blog-Posts/2020-04-01/Post.md new file mode 100644 index 0000000000..bc3148ec5e --- /dev/null +++ b/docs/en/Blog-Posts/2020-04-01/Post.md @@ -0,0 +1,176 @@ +# Using Azure Active Directory Authentication in ABP Applications + +## Introduction + +This post demonstrates how to integrate AzureAD to an ABP application that enables users to sign in using OAuth 2.0 with credentials from Azure Active Directory. + +Adding Azure Active Directory is pretty straightforward in Abp framework. Couple of configurations needs to be done correctly. + +There will be two samples of connections for better covarage; + +- **AddOpenIdConnect** (Default Microsoft.AspNetCore.Authentication.OpenIdConnect package) +- **AddAzureAD** (Microsoft.AspNetCore.Authentication.AzureAD.UI package) + + + +## AddOpenIdConnect + +#### **Update your `appsettings.json`** + +In your **.Web** application, add the following section filled with your AzureAD application settings. + +````xml + "AzureAd": { + "Instance": "https://login.microsoftonline.com/", + "TenantId": "", + "ClientSecret": "", + "Domain": "domain.onmicrosoft.com", + "CallbackPath": "/signin-azuread-oidc" + } +```` + +Modify `ConfigureAuthentication` method of your **BookStoreWebModule** with the following: + +````xml +private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) + { + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("sub", ClaimTypes.NameIdentifier); + + context.Services.AddAuthentication() + .AddIdentityServerAuthentication(options => + { + options.Authority = configuration["AuthServer:Authority"]; + options.RequireHttpsMetadata = false; + options.ApiName = "BookStore"; + }) + .AddOpenIdConnect("AzureOpenId", "AzureAD", options => + { + options.Authority = "https://login.microsoftonline.com/" + configuration["AzureAd:TenantId"]; + options.ClientId = configuration["AzureAd:ClientId"]; + options.ResponseType = OpenIdConnectResponseType.CodeIdToken; + options.CallbackPath = configuration["AzureAd:CallbackPath"]; + options.ClientSecret = configuration["AzureAd:ClientSecret"]; + options.RequireHttpsMetadata = false; + options.SaveTokens = true; + options.GetClaimsFromUserInfoEndpoint = true; + }); + } +```` + + + +## AddAzureAD + +#### **Update your `appsettings.json`** + +Install `Microsoft.AspNetCore.Authentication.AzureAD.UI` package to your **.Web** application. + +In your **.Web** application, add the following section filled with your AzureAD application settings. + +Notice that you don't need to add `ClientSecret` when you are using `Microsoft.AspNetCore.Authentication.AzureAD.UI` package. + +````xml + "AzureAd": { + "Instance": "https://login.microsoftonline.com/", + "TenantId": "", + "Domain": "domain.onmicrosoft.com", + "CallbackPath": "/signin-azuread-oidc" + } +```` + +Modify `ConfigureAuthentication` method of your **BookStoreWebModule** with the following: + +````xml +private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) + { + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("sub", ClaimTypes.NameIdentifier); + context.Services.AddAuthentication() + .AddIdentityServerAuthentication(options => + { + options.Authority = configuration["AuthServer:Authority"]; + options.RequireHttpsMetadata = false; + options.ApiName = "Acme.BookStore"; + }) + .AddAzureAD(options => configuration.Bind("AzureAd", options)); + + context.Services.Configure(AzureADDefaults.OpenIdScheme, options => + { + options.Authority = options.Authority + "/v2.0/"; + options.ClientId = configuration["AzureAd:ClientId"]; + options.CallbackPath = configuration["AzureAd:CallbackPath"]; + options.ResponseType = OpenIdConnectResponseType.IdToken; + options.RequireHttpsMetadata = false; + + options.TokenValidationParameters.ValidateIssuer = false; + options.GetClaimsFromUserInfoEndpoint = true; + options.SaveTokens = true; + options.SignInScheme = IdentityConstants.ExternalScheme; + + options.Scope.Add("email"); + }); + } +```` + + + +# FAQ + +* Help! `GetExternalLoginInfoAsync` returns `null`! + + * There can be 2 reasons for this; + + 1. You are trying to authenticate against wrong scheme. Check if you set **SignInScheme** to `IdentityConstants.ExternalScheme`: + + ````xml + options.SignInScheme = IdentityConstants.ExternalScheme; + ```` + + 2. Your `ClaimTypes.NameIdentifier` is null. Check if you added claim mapping: + + ````xml + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("sub", ClaimTypes.NameIdentifier); + ```` + + +* Help! I keep getting ***AADSTS50011: The reply URL specified in the request does not match the reply URLs configured for the application*** error! + + * If you set your **CallbackPath** in appsettings as: + + ````xml + "AzureAd": { + ... + "CallbackPath": "/signin-azuread-oidc" + } + ```` + + your **Redirect URI** of your application in azure portal must be with domain like `https://localhost:44320/signin-azuread-oidc`, not only `/signin-azuread-oidc`. + +* How can I **debug/watch** which claims I get before they get mapped? + + * You can add a simple event under openid configuration to debug before mapping like: + + ````xml + options.Events.OnTokenValidated = (async context => + { + var claimsFromOidcProvider = context.Principal.Claims.ToList(); + await Task.CompletedTask; + }); + ```` + +* I want to debug further, how can I implement my custom **SignInManager**? + + * You can check [Customizing SignInManager in Abp Framework](link here) post. + +* I want to add extra properties to user while they are being created. How can I do that? + + * You can check [Customizing Login Page in Abp Framework]() post. + +* Why can't I see **External Register Page** after I sign in from external provider for the first time? + + * ABP framework automatically registers your user with supported email claim from your external authentication provider. You can change this behaviour by [Customizing Login Page in Abp Framework](will be link here). + From a6099b10fd59e3fea4473d2390664e39b7bf6ad5 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 28 Mar 2020 05:30:01 +0300 Subject: [PATCH 018/182] added post --- docs/en/Blog-Posts/2020-04-02/Post.md | 74 +++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 docs/en/Blog-Posts/2020-04-02/Post.md diff --git a/docs/en/Blog-Posts/2020-04-02/Post.md b/docs/en/Blog-Posts/2020-04-02/Post.md new file mode 100644 index 0000000000..a2df997091 --- /dev/null +++ b/docs/en/Blog-Posts/2020-04-02/Post.md @@ -0,0 +1,74 @@ +# Custom SignIn Manager + +ABP Framework uses Microsoft Identity underneath hence supports customization as much as Microsoft Identity does. + +### Creating CustomSignInManager + +To create your own custom SignIn Manager, you need to inherit `SignInManager`. + +````xml +public class CustomSignInManager : SignInManager +{ + public CustomSigninManager( + UserManager userManager, + IHttpContextAccessor contextAccessor, + IUserClaimsPrincipalFactory claimsFactory, + IOptions optionsAccessor, + ILogger> logger, + IAuthenticationSchemeProvider schemes, + IUserConfirmation confirmation) + : base(userManager, contextAccessor, claimsFactory, optionsAccessor, logger, schemes, confirmation) + { + } +} +```` + +### Overriding Methods + +Afterwards you can override a method like `GetExternalLoginInfoAsync`: + +````xml +public override async Task GetExternalLoginInfoAsync(string expectedXsrf = null) +{ + var auth = await Context.AuthenticateAsync(IdentityConstants.ExternalScheme); + var items = auth?.Properties?.Items; + if (auth?.Principal == null || items == null || !items.ContainsKey("LoginProvider")) + { + return null; + } + + if (expectedXsrf != null) + { + if (!items.ContainsKey("XsrfId")) + { + return null; + } + var userId = items[XsrfKey] as string; + if (userId != expectedXsrf) + { + return null; + } + var providerKey = auth.Principal.FindFirstValue(ClaimTypes.NameIdentifier); + var provider = items[LoginProviderKey] as string; + if (providerKey == null || provider == null) + { + return null; + } + + var providerDisplayName = (await GetExternalAuthenticationSchemesAsync()).FirstOrDefault(p => p.Name == provider)?.DisplayName ?? provider; + return new ExternalLoginInfo(auth.Principal, provider, providerKey, providerDisplayName) + { + AuthenticationTokens = auth.Properties.GetTokens() + }; +} +```` + +### Registering to DI + +You need to register your Custom SignIn Manager to DI to activate it. Inside the `.Web` project, locate the `ApplicationNameWebModule` add the following under `ConfigureServices` method: + +````xml +context.Services +.GetObject() + .AddSignInManager(); +```` \ No newline at end of file From d305b39cb1b03022bd7358a9003473b70620a12f Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 28 Mar 2020 05:53:14 +0300 Subject: [PATCH 019/182] naming update --- docs/en/Blog-Posts/2020-04-01/Post.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Blog-Posts/2020-04-01/Post.md b/docs/en/Blog-Posts/2020-04-01/Post.md index bc3148ec5e..6650aabbe5 100644 --- a/docs/en/Blog-Posts/2020-04-01/Post.md +++ b/docs/en/Blog-Posts/2020-04-01/Post.md @@ -1,4 +1,4 @@ -# Using Azure Active Directory Authentication in ABP Applications +# Using Azure Active Directory Authentication in ABP ASP.NET Core MVC application ## Introduction From 4689f4835aa093733fd53a9729a71b68dc8f817a Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 28 Mar 2020 07:29:14 +0300 Subject: [PATCH 020/182] added post --- docs/en/Blog-Posts/2020-04-03/Post.md | 122 ++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 docs/en/Blog-Posts/2020-04-03/Post.md diff --git a/docs/en/Blog-Posts/2020-04-03/Post.md b/docs/en/Blog-Posts/2020-04-03/Post.md new file mode 100644 index 0000000000..3ac5d212c2 --- /dev/null +++ b/docs/en/Blog-Posts/2020-04-03/Post.md @@ -0,0 +1,122 @@ +# Custom Login PageModel in **ABP** ASP.NET Core MVC application + +ABP Framework uses Microsoft Identity underneath hence supports customization as much as Microsoft Identity does. + +### Creating Login PageModel + +To create your own custom Login PageModel, you need to inherit [Abp LoginModel](https://github.com/abpframework/abp/blob/037ef9abe024c03c1f89ab6c933710bcfe3f5c93/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs). + +````xml +public class CustomLoginModel : LoginModel +{ + public CustomLoginModel( + Microsoft.AspNetCore.Authentication.IAuthenticationSchemeProvider schemeProvider, + Microsoft.Extensions.Options.IOptions accountOptions) + : base(schemeProvider, accountOptions) + { + } +} +```` + +### Overriding Methods + +Afterwards you can override a method like `CreateExternalUserAsync`: + +````xml +protected override async Task CreateExternalUserAsync(ExternalLoginInfo info) +{ + var emailAddress = info.Principal.FindFirstValue(AbpClaimTypes.Email); + + var user = new IdentityUser(GuidGenerator.Create(), emailAddress, emailAddress, CurrentTenant.Id); + + CheckIdentityErrors(await UserManager.CreateAsync(user)); + CheckIdentityErrors(await UserManager.SetEmailAsync(user, emailAddress)); + CheckIdentityErrors(await UserManager.AddLoginAsync(user, info)); + + return user; +} +```` + +### Overriding Login Page UI + +Overriding `.cshtml` files can be easily done via [Virtual File System](https://docs.abp.io/en/abp/latest/Virtual-File-System). Create folder named **Account** under **Pages** directory. Create **Login.cshtml** under Pages/Account directory. + +Set the model with your newly created Login Page Model and customize to your preferences like: + +````xml +@page +@using Volo.Abp.Account.Settings +@using Volo.Abp.Settings +@model Acme.BookStore.Web.CustomLoginModel +@inherits Volo.Abp.Account.Web.Pages.Account.AccountPage +@inject Volo.Abp.Settings.ISettingProvider SettingProvider + +
+

My Customized Login Page!

+
+@if (Model.EnableLocalLogin) +{ +
+
+

@L["Login"]

+ @if (await SettingProvider.IsTrueAsync(AccountSettingNames.IsSelfRegistrationEnabled)) + { + + @L["AreYouANewUser"] + @L["Register"] + + } +
+ + +
+ + + +
+
+ + + +
+
+ +
+ @L["Login"] +
+
+ + +
+} + +@if (Model.VisibleExternalProviders.Any()) +{ +
+

@L["UseAnotherServiceToLogIn"]

+
+ + + @foreach (var provider in Model.VisibleExternalProviders) + { + + } +
+
+} + +@if (!Model.EnableLocalLogin && !Model.VisibleExternalProviders.Any()) +{ +
+ @L["InvalidLoginRequest"] + @L["ThereAreNoLoginSchemesConfiguredForThisClient"] +
+} +```` + +Further readings, [ASP.NET Core (MVC / Razor Pages) User Interface Customization Guide](https://docs.abp.io/en/abp/latest/UI/AspNetCore/Customization-User-Interface#asp-net-core-mvc-razor-pages-user-interface-customization-guide). \ No newline at end of file From a3e990e33585f234cbafed9e071db2cff8ee4fdd Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 28 Mar 2020 15:19:44 +0300 Subject: [PATCH 021/182] removed client secret settings from openId --- docs/en/Blog-Posts/2020-04-01/Post.md | 23 +++++------------------ 1 file changed, 5 insertions(+), 18 deletions(-) diff --git a/docs/en/Blog-Posts/2020-04-01/Post.md b/docs/en/Blog-Posts/2020-04-01/Post.md index 6650aabbe5..9b2f49cd51 100644 --- a/docs/en/Blog-Posts/2020-04-01/Post.md +++ b/docs/en/Blog-Posts/2020-04-01/Post.md @@ -13,8 +13,6 @@ There will be two samples of connections for better covarage; -## AddOpenIdConnect - #### **Update your `appsettings.json`** In your **.Web** application, add the following section filled with your AzureAD application settings. @@ -30,6 +28,10 @@ In your **.Web** application, add the following section filled with your AzureAD } ```` + + +## AddOpenIdConnect + Modify `ConfigureAuthentication` method of your **BookStoreWebModule** with the following: ````xml @@ -51,7 +53,6 @@ private void ConfigureAuthentication(ServiceConfigurationContext context, IConfi options.ClientId = configuration["AzureAd:ClientId"]; options.ResponseType = OpenIdConnectResponseType.CodeIdToken; options.CallbackPath = configuration["AzureAd:CallbackPath"]; - options.ClientSecret = configuration["AzureAd:ClientSecret"]; options.RequireHttpsMetadata = false; options.SaveTokens = true; options.GetClaimsFromUserInfoEndpoint = true; @@ -67,21 +68,7 @@ private void ConfigureAuthentication(ServiceConfigurationContext context, IConfi Install `Microsoft.AspNetCore.Authentication.AzureAD.UI` package to your **.Web** application. -In your **.Web** application, add the following section filled with your AzureAD application settings. - -Notice that you don't need to add `ClientSecret` when you are using `Microsoft.AspNetCore.Authentication.AzureAD.UI` package. - -````xml - "AzureAd": { - "Instance": "https://login.microsoftonline.com/", - "TenantId": "", - "Domain": "domain.onmicrosoft.com", - "CallbackPath": "/signin-azuread-oidc" - } -```` - -Modify `ConfigureAuthentication` method of your **BookStoreWebModule** with the following: +In your **.Web** application, add the following section filled with your AzureAD application settings. Modify `ConfigureAuthentication` method of your **BookStoreWebModule** with the following: ````xml private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) From 0be742fa0628c62aa96fa4d9a97b1f0f991c207f Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 28 Mar 2020 15:36:43 +0300 Subject: [PATCH 022/182] updated post --- docs/en/Blog-Posts/2020-04-01/Post.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/docs/en/Blog-Posts/2020-04-01/Post.md b/docs/en/Blog-Posts/2020-04-01/Post.md index 9b2f49cd51..b57883ac8b 100644 --- a/docs/en/Blog-Posts/2020-04-01/Post.md +++ b/docs/en/Blog-Posts/2020-04-01/Post.md @@ -22,7 +22,6 @@ In your **.Web** application, add the following section filled with your AzureAD "Instance": "https://login.microsoftonline.com/", "TenantId": "", - "ClientSecret": "", "Domain": "domain.onmicrosoft.com", "CallbackPath": "/signin-azuread-oidc" } @@ -108,7 +107,7 @@ private void ConfigureAuthentication(ServiceConfigurationContext context, IConfi * Help! `GetExternalLoginInfoAsync` returns `null`! - * There can be 2 reasons for this; + * **There** can be 2 reasons for this; 1. You are trying to authenticate against wrong scheme. Check if you set **SignInScheme** to `IdentityConstants.ExternalScheme`: @@ -137,6 +136,17 @@ private void ConfigureAuthentication(ServiceConfigurationContext context, IConfi your **Redirect URI** of your application in azure portal must be with domain like `https://localhost:44320/signin-azuread-oidc`, not only `/signin-azuread-oidc`. +* Help! I am getting ***System.ArgumentNullException: Value cannot be null. (Parameter 'userName')*** error! + + + * This occurs when you use Azure Authority **v2.0 endpoint** without requesting `email` scope. [Abp checks unique email to create user](https://github.com/abpframework/abp/blob/037ef9abe024c03c1f89ab6c933710bcfe3f5c93/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs#L208). Simply add + + ````xml + options.Scope.Add("email"); + ```` + + to your openid configuration. + * How can I **debug/watch** which claims I get before they get mapped? * You can add a simple event under openid configuration to debug before mapping like: From d8f3d5b85c65322f84cbb3b1a93e5085fa432218 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 28 Mar 2020 16:00:40 +0300 Subject: [PATCH 023/182] changed order of connections --- docs/en/Blog-Posts/2020-04-01/Post.md | 76 +++++++++++++-------------- 1 file changed, 37 insertions(+), 39 deletions(-) diff --git a/docs/en/Blog-Posts/2020-04-01/Post.md b/docs/en/Blog-Posts/2020-04-01/Post.md index b57883ac8b..9f1d3d964b 100644 --- a/docs/en/Blog-Posts/2020-04-01/Post.md +++ b/docs/en/Blog-Posts/2020-04-01/Post.md @@ -8,10 +8,9 @@ Adding Azure Active Directory is pretty straightforward in Abp framework. Couple There will be two samples of connections for better covarage; -- **AddOpenIdConnect** (Default Microsoft.AspNetCore.Authentication.OpenIdConnect package) - **AddAzureAD** (Microsoft.AspNetCore.Authentication.AzureAD.UI package) - - +- **AddOpenIdConnect** (Default Microsoft.AspNetCore.Authentication.OpenIdConnect package) +- #### **Update your `appsettings.json`** @@ -29,38 +28,6 @@ In your **.Web** application, add the following section filled with your AzureAD -## AddOpenIdConnect - -Modify `ConfigureAuthentication` method of your **BookStoreWebModule** with the following: - -````xml -private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) - { - JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); - JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("sub", ClaimTypes.NameIdentifier); - - context.Services.AddAuthentication() - .AddIdentityServerAuthentication(options => - { - options.Authority = configuration["AuthServer:Authority"]; - options.RequireHttpsMetadata = false; - options.ApiName = "BookStore"; - }) - .AddOpenIdConnect("AzureOpenId", "AzureAD", options => - { - options.Authority = "https://login.microsoftonline.com/" + configuration["AzureAd:TenantId"]; - options.ClientId = configuration["AzureAd:ClientId"]; - options.ResponseType = OpenIdConnectResponseType.CodeIdToken; - options.CallbackPath = configuration["AzureAd:CallbackPath"]; - options.RequireHttpsMetadata = false; - options.SaveTokens = true; - options.GetClaimsFromUserInfoEndpoint = true; - }); - } -```` - - - ## AddAzureAD #### **Update your `appsettings.json`** @@ -103,11 +70,43 @@ private void ConfigureAuthentication(ServiceConfigurationContext context, IConfi +## AddOpenIdConnect + +Modify `ConfigureAuthentication` method of your **BookStoreWebModule** with the following: + +````xml +private void ConfigureAuthentication(ServiceConfigurationContext context, IConfiguration configuration) + { + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); + JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Add("sub", ClaimTypes.NameIdentifier); + + context.Services.AddAuthentication() + .AddIdentityServerAuthentication(options => + { + options.Authority = configuration["AuthServer:Authority"]; + options.RequireHttpsMetadata = false; + options.ApiName = "BookStore"; + }) + .AddOpenIdConnect("AzureOpenId", "AzureAD", options => + { + options.Authority = "https://login.microsoftonline.com/" + configuration["AzureAd:TenantId"]; + options.ClientId = configuration["AzureAd:ClientId"]; + options.ResponseType = OpenIdConnectResponseType.CodeIdToken; + options.CallbackPath = configuration["AzureAd:CallbackPath"]; + options.RequireHttpsMetadata = false; + options.SaveTokens = true; + options.GetClaimsFromUserInfoEndpoint = true; + }); + } +```` + + + # FAQ * Help! `GetExternalLoginInfoAsync` returns `null`! - * **There** can be 2 reasons for this; + * There can be 2 reasons for this; 1. You are trying to authenticate against wrong scheme. Check if you set **SignInScheme** to `IdentityConstants.ExternalScheme`: @@ -115,7 +114,7 @@ private void ConfigureAuthentication(ServiceConfigurationContext context, IConfi options.SignInScheme = IdentityConstants.ExternalScheme; ```` - 2. Your `ClaimTypes.NameIdentifier` is null. Check if you added claim mapping: + 2. Your `ClaimTypes.NameIdentifier` is `null`. Check if you added claim mapping: ````xml JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear(); @@ -169,5 +168,4 @@ private void ConfigureAuthentication(ServiceConfigurationContext context, IConfi * Why can't I see **External Register Page** after I sign in from external provider for the first time? - * ABP framework automatically registers your user with supported email claim from your external authentication provider. You can change this behaviour by [Customizing Login Page in Abp Framework](will be link here). - + * ABP framework automatically registers your user with supported email claim from your external authentication provider. You can change this behavior by [Customizing Login Page in Abp Framework](will be link here). From 01378dc04c37dd3eab4a0957f4410b627875c0b7 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 28 Mar 2020 16:09:04 +0300 Subject: [PATCH 024/182] organized headers --- docs/en/Blog-Posts/2020-04-01/Post.md | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/docs/en/Blog-Posts/2020-04-01/Post.md b/docs/en/Blog-Posts/2020-04-01/Post.md index 9f1d3d964b..2fb937467b 100644 --- a/docs/en/Blog-Posts/2020-04-01/Post.md +++ b/docs/en/Blog-Posts/2020-04-01/Post.md @@ -4,17 +4,24 @@ This post demonstrates how to integrate AzureAD to an ABP application that enables users to sign in using OAuth 2.0 with credentials from Azure Active Directory. -Adding Azure Active Directory is pretty straightforward in Abp framework. Couple of configurations needs to be done correctly. +Adding Azure Active Directory is pretty straightforward in ABP framework. Couple of configurations needs to be done correctly. -There will be two samples of connections for better covarage; +There will be two samples of connections for better coverage; - **AddAzureAD** (Microsoft.AspNetCore.Authentication.AzureAD.UI package) - **AddOpenIdConnect** (Default Microsoft.AspNetCore.Authentication.OpenIdConnect package) -- -#### **Update your `appsettings.json`** -In your **.Web** application, add the following section filled with your AzureAD application settings. + +## Sample Code + +https://github.com/abpframework/abp-samples/tree/master/aspnet-core/BookStore-AzureAD + + + +## Setup + +Update your `appsettings.json` in your **.Web** application and add the following section filled with your AzureAD application settings. ````xml "AzureAd": { From 2867cc34f9e8de7c57827a0765a38773649e5c79 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 28 Mar 2020 16:14:26 +0300 Subject: [PATCH 025/182] updated headers and added sample link --- docs/en/Blog-Posts/2020-04-03/Post.md | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/docs/en/Blog-Posts/2020-04-03/Post.md b/docs/en/Blog-Posts/2020-04-03/Post.md index 3ac5d212c2..7ee3c8b1ed 100644 --- a/docs/en/Blog-Posts/2020-04-03/Post.md +++ b/docs/en/Blog-Posts/2020-04-03/Post.md @@ -1,8 +1,18 @@ # Custom Login PageModel in **ABP** ASP.NET Core MVC application +## Introduction + ABP Framework uses Microsoft Identity underneath hence supports customization as much as Microsoft Identity does. -### Creating Login PageModel + + +## Sample Code + +https://github.com/abpframework/abp-samples/tree/master/aspnet-core/BookStore-AzureAD + + + +## Creating Login PageModel To create your own custom Login PageModel, you need to inherit [Abp LoginModel](https://github.com/abpframework/abp/blob/037ef9abe024c03c1f89ab6c933710bcfe3f5c93/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs). @@ -18,7 +28,9 @@ public class CustomLoginModel : LoginModel } ```` -### Overriding Methods + + +## Overriding Methods Afterwards you can override a method like `CreateExternalUserAsync`: @@ -37,7 +49,9 @@ protected override async Task CreateExternalUser } ```` -### Overriding Login Page UI + + +## Overriding Login Page UI Overriding `.cshtml` files can be easily done via [Virtual File System](https://docs.abp.io/en/abp/latest/Virtual-File-System). Create folder named **Account** under **Pages** directory. Create **Login.cshtml** under Pages/Account directory. From 90c3a36ec11add5c048aeffd1747e82a7ee6b24a Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 28 Mar 2020 16:17:04 +0300 Subject: [PATCH 026/182] updated headers and added sample link --- docs/en/Blog-Posts/2020-04-02/Post.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/docs/en/Blog-Posts/2020-04-02/Post.md b/docs/en/Blog-Posts/2020-04-02/Post.md index a2df997091..7919d49032 100644 --- a/docs/en/Blog-Posts/2020-04-02/Post.md +++ b/docs/en/Blog-Posts/2020-04-02/Post.md @@ -1,8 +1,18 @@ # Custom SignIn Manager +## Introduction + ABP Framework uses Microsoft Identity underneath hence supports customization as much as Microsoft Identity does. -### Creating CustomSignInManager + + +## Sample Code + +https://github.com/abpframework/abp-samples/blob/master/aspnet-core/BookStore-AzureAD/src/Acme.BookStore.Web/CustomSignInManager.cs + + + +## Creating CustomSignInManager To create your own custom SignIn Manager, you need to inherit `SignInManager`. @@ -23,7 +33,9 @@ public class CustomSignInManager : SignInManager } ```` -### Overriding Methods + + +## Overriding Methods Afterwards you can override a method like `GetExternalLoginInfoAsync`: @@ -63,9 +75,11 @@ public override async Task GetExternalLoginInfoAsync(string e } ```` -### Registering to DI -You need to register your Custom SignIn Manager to DI to activate it. Inside the `.Web` project, locate the `ApplicationNameWebModule` add the following under `ConfigureServices` method: + +## Registering to DI + +You need to register your Custom SignIn Manager to DI to activate it. Inside the `.Web` project, locate the `ApplicationNameWebModule` and add the following under `ConfigureServices` method: ````xml context.Services From 4b5cb6a96937ecc7b71eb3e891924176f918a8e7 Mon Sep 17 00:00:00 2001 From: Galip Tolga Erdem Date: Sat, 28 Mar 2020 16:18:30 +0300 Subject: [PATCH 027/182] udpated link --- docs/en/Blog-Posts/2020-04-03/Post.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/Blog-Posts/2020-04-03/Post.md b/docs/en/Blog-Posts/2020-04-03/Post.md index 7ee3c8b1ed..a95eb6c873 100644 --- a/docs/en/Blog-Posts/2020-04-03/Post.md +++ b/docs/en/Blog-Posts/2020-04-03/Post.md @@ -8,7 +8,7 @@ ABP Framework uses Microsoft Identity underneath hence supports customization as ## Sample Code -https://github.com/abpframework/abp-samples/tree/master/aspnet-core/BookStore-AzureAD +https://github.com/abpframework/abp-samples/blob/master/aspnet-core/BookStore-AzureAD/src/Acme.BookStore.Web/Pages/CustomLoginModel.cs From 5255a61986f73699cf39c7786fb87c410d45f847 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Sat, 28 Mar 2020 22:22:37 +0300 Subject: [PATCH 028/182] Update MongoAuditLogRepository.cs --- .../Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index 8aeb23fa51..9ab6064484 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -192,6 +192,7 @@ namespace Volo.Abp.AuditLogging.MongoDB string entityTypeFullName = null) { return GetMongoQueryable() + .Where(x => x.EntityChanges != null) .WhereIf(auditLogId.HasValue, e => e.Id == auditLogId) .WhereIf(startTime.HasValue, e => e.EntityChanges.Any(ec => ec.ChangeTime >= startTime)) .WhereIf(endTime.HasValue, e => e.EntityChanges.Any(ec => ec.ChangeTime >= endTime)) From 3675ea94e4b1a67384ab9d25cf0514e38b51af63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 29 Mar 2020 18:34:11 +0300 Subject: [PATCH 029/182] Add Volo to keyword list. --- common.DotSettings | 1 + 1 file changed, 1 insertion(+) diff --git a/common.DotSettings b/common.DotSettings index cb0b2c919f..0eb4875d49 100644 --- a/common.DotSettings +++ b/common.DotSettings @@ -20,4 +20,5 @@ False False SQL + True \ No newline at end of file From 9514d2aabd97aa87dedfa2408b3f87be4c09af6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 29 Mar 2020 18:34:44 +0300 Subject: [PATCH 030/182] Revise Tenant ctor. --- .../Volo/Abp/TenantManagement/Tenant.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs index 26cc747f82..1d01a7f696 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Domain/Volo/Abp/TenantManagement/Tenant.cs @@ -14,16 +14,15 @@ namespace Volo.Abp.TenantManagement protected Tenant() { - ExtraProperties = new Dictionary(); + } protected internal Tenant(Guid id, [NotNull] string name) + : base(id) { - Id = id; SetName(name); ConnectionStrings = new List(); - ExtraProperties = new Dictionary(); } [CanBeNull] From d93226fbace25e49f484895ae32ed8841ed03909 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 29 Mar 2020 19:09:33 +0300 Subject: [PATCH 031/182] Implement DTO object extensions for the tenant management module. --- .../AbpAutoMapperExtensibleDtoExtensions.cs | 3 ++- .../Volo/Abp/TenantManagement/ITenantAppService.cs | 1 - .../Volo/Abp/TenantManagement/TenantCreateDto.cs | 8 +------- .../TenantCreateOrUpdateDtoBase.cs | 3 ++- .../Volo/Abp/TenantManagement/TenantDto.cs | 2 +- ...TenantManagementApplicationAutoMapperProfile.cs | 3 ++- .../Volo/Abp/TenantManagement/TenantAppService.cs | 14 ++++++++++++-- .../AbpTenantManagementWebAutoMapperProfile.cs | 12 +++++------- .../Tenants/ConnectionStringsModal.cshtml.cs | 1 - .../TenantManagement/Tenants/CreateModal.cshtml.cs | 1 - .../TenantManagement/Tenants/EditModal.cshtml.cs | 1 - .../Program.cs | 1 + 12 files changed, 26 insertions(+), 24 deletions(-) diff --git a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs b/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs index 031a3a9948..e78e9628c1 100644 --- a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs +++ b/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs @@ -25,7 +25,8 @@ namespace AutoMapper HasExtraPropertiesObjectExtendingExtensions .MapExtraPropertiesTo( source.ExtraProperties, - result + result, + definitionChecks ); return result; diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs index cd5f0697f7..69081ec5b9 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/ITenantAppService.cs @@ -11,6 +11,5 @@ namespace Volo.Abp.TenantManagement Task UpdateDefaultConnectionStringAsync(Guid id, string defaultConnectionString); Task DeleteDefaultConnectionStringAsync(Guid id); - } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs index 189d7d0f80..5d8d02ada9 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateDto.cs @@ -1,9 +1,4 @@ -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Text.RegularExpressions; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Localization; -using Volo.Abp.TenantManagement.Localization; +using System.ComponentModel.DataAnnotations; namespace Volo.Abp.TenantManagement { @@ -14,7 +9,6 @@ namespace Volo.Abp.TenantManagement [MaxLength(256)] public string AdminEmailAddress { get; set; } - [Required] [MaxLength(128)] public string AdminPassword { get; set; } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs index b02da79b79..19f73b0d51 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantCreateOrUpdateDtoBase.cs @@ -1,8 +1,9 @@ using System.ComponentModel.DataAnnotations; +using Volo.Abp.ObjectExtending; namespace Volo.Abp.TenantManagement { - public abstract class TenantCreateOrUpdateDtoBase + public abstract class TenantCreateOrUpdateDtoBase : ExtensibleObject { [Required] [StringLength(TenantConsts.MaxNameLength)] diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantDto.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantDto.cs index a410e90da5..36422c7a1c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantDto.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application.Contracts/Volo/Abp/TenantManagement/TenantDto.cs @@ -3,7 +3,7 @@ using Volo.Abp.Application.Dtos; namespace Volo.Abp.TenantManagement { - public class TenantDto : EntityDto + public class TenantDto : ExtensibleEntityDto { public string Name { get; set; } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationAutoMapperProfile.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationAutoMapperProfile.cs index 61a2994dd7..f0212a926e 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationAutoMapperProfile.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/AbpTenantManagementApplicationAutoMapperProfile.cs @@ -6,7 +6,8 @@ namespace Volo.Abp.TenantManagement { public AbpTenantManagementApplicationAutoMapperProfile() { - CreateMap(); + CreateMap() + .MapExtraProperties(); } } } \ No newline at end of file diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs index cbe9b67c76..f618011cc7 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Application/Volo/Abp/TenantManagement/TenantAppService.cs @@ -4,6 +4,7 @@ using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; using Volo.Abp.Application.Dtos; using Volo.Abp.Data; +using Volo.Abp.ObjectExtending; namespace Volo.Abp.TenantManagement { @@ -27,13 +28,19 @@ namespace Volo.Abp.TenantManagement public virtual async Task GetAsync(Guid id) { return ObjectMapper.Map( - await TenantRepository.GetAsync(id)); + await TenantRepository.GetAsync(id) + ); } public virtual async Task> GetListAsync(GetTenantsInput input) { var count = await TenantRepository.GetCountAsync(input.Filter); - var list = await TenantRepository.GetListAsync(input.Sorting, input.MaxResultCount, input.SkipCount, input.Filter); + var list = await TenantRepository.GetListAsync( + input.Sorting, + input.MaxResultCount, + input.SkipCount, + input.Filter + ); return new PagedResultDto( count, @@ -45,6 +52,8 @@ namespace Volo.Abp.TenantManagement public virtual async Task CreateAsync(TenantCreateDto input) { var tenant = await TenantManager.CreateAsync(input.Name); + input.MapExtraPropertiesTo(tenant); + await TenantRepository.InsertAsync(tenant); using (CurrentTenant.Change(tenant.Id, tenant.Name)) @@ -66,6 +75,7 @@ namespace Volo.Abp.TenantManagement { var tenant = await TenantRepository.GetAsync(id); await TenantManager.ChangeNameAsync(tenant, input.Name); + input.MapExtraPropertiesTo(tenant); await TenantRepository.UpdateAsync(tenant); return ObjectMapper.Map(tenant); } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebAutoMapperProfile.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebAutoMapperProfile.cs index a5a094eb71..d226e9629c 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebAutoMapperProfile.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/AbpTenantManagementWebAutoMapperProfile.cs @@ -1,4 +1,5 @@ using AutoMapper; +using Volo.Abp.AutoMapper; using Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants; namespace Volo.Abp.TenantManagement.Web @@ -6,20 +7,17 @@ namespace Volo.Abp.TenantManagement.Web public class AbpTenantManagementWebAutoMapperProfile : Profile { public AbpTenantManagementWebAutoMapperProfile() - { - CreateRoleMappings(); - } - - protected virtual void CreateRoleMappings() { //List CreateMap(); //CreateModal - CreateMap(); + CreateMap() + .Ignore(x => x.ExtraProperties); //EditModal - CreateMap(); + CreateMap() + .Ignore(x => x.ExtraProperties); } } } diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs index 2184169d5e..5456e512ec 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/ConnectionStringsModal.cshtml.cs @@ -2,7 +2,6 @@ using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs index 098f7e1393..86569149f8 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/CreateModal.cshtml.cs @@ -1,7 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants { diff --git a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs index 5fb2f06859..1ae5709d57 100644 --- a/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs +++ b/modules/tenant-management/src/Volo.Abp.TenantManagement.Web/Pages/TenantManagement/Tenants/EditModal.cshtml.cs @@ -2,7 +2,6 @@ using System; using System.ComponentModel.DataAnnotations; using System.Threading.Tasks; using Microsoft.AspNetCore.Mvc; -using Volo.Abp.AspNetCore.Mvc.UI.RazorPages; namespace Volo.Abp.TenantManagement.Web.Pages.TenantManagement.Tenants { diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs index 5143e37164..b57311cc96 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Web.Host/Program.cs @@ -17,6 +17,7 @@ namespace MyCompanyName.MyProjectName.Web .MinimumLevel.Information() #endif .MinimumLevel.Override("Microsoft", LogEventLevel.Information) + .MinimumLevel.Override("Microsoft.EntityFrameworkCore", LogEventLevel.Warning) .Enrich.FromLogContext() .WriteTo.Async(c => c.File("Logs/logs.txt")) .CreateLogger(); From 7fa67b16366a4c52251858d3af656aa57581c5d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 29 Mar 2020 19:20:59 +0300 Subject: [PATCH 032/182] Change object mapping style for the app startup template. --- .../MyProjectNameDomainModule.cs | 6 ++++++ .../MyProjectNameDomainObjectExtensions.cs} | 15 ++++++++------- .../Users/AppUser.cs | 2 +- .../MyProjectNameMigrationsDbContextFactory.cs | 2 +- .../EntityFrameworkCore/MyProjectNameDbContext.cs | 2 +- ...MyProjectNameEfCoreEntityExtensionMappings.cs} | 7 ++++++- .../MyProjectNameEntityFrameworkCoreModule.cs | 2 +- .../MongoDb/MyProjectNameMongoDbModule.cs | 5 ----- 8 files changed, 24 insertions(+), 17 deletions(-) rename templates/app/aspnet-core/src/{MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameEntityExtensions.cs => MyCompanyName.MyProjectName.Domain/ObjectExtending/MyProjectNameDomainObjectExtensions.cs} (50%) rename templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/{MyProjectNameEntityExtensions.cs => MyProjectNameEfCoreEntityExtensionMappings.cs} (72%) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs index 26e2639524..84e7f88791 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/MyProjectNameDomainModule.cs @@ -1,4 +1,5 @@ using MyCompanyName.MyProjectName.MultiTenancy; +using MyCompanyName.MyProjectName.ObjectExtending; using Volo.Abp.AuditLogging; using Volo.Abp.BackgroundJobs; using Volo.Abp.FeatureManagement; @@ -27,6 +28,11 @@ namespace MyCompanyName.MyProjectName )] public class MyProjectNameDomainModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + MyProjectNameDomainObjectExtensions.Configure(); + } + public override void ConfigureServices(ServiceConfigurationContext context) { Configure(options => diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameEntityExtensions.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/ObjectExtending/MyProjectNameDomainObjectExtensions.cs similarity index 50% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameEntityExtensions.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/ObjectExtending/MyProjectNameDomainObjectExtensions.cs index 79107d9ce6..2fcd167216 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameEntityExtensions.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/ObjectExtending/MyProjectNameDomainObjectExtensions.cs @@ -1,10 +1,8 @@ -using Volo.Abp.Identity; -using Volo.Abp.ObjectExtending; -using Volo.Abp.Threading; +using Volo.Abp.Threading; -namespace MyCompanyName.MyProjectName.MongoDB +namespace MyCompanyName.MyProjectName.ObjectExtending { - public static class MyProjectNameEntityExtensions + public static class MyProjectNameDomainObjectExtensions { private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); @@ -12,8 +10,11 @@ namespace MyCompanyName.MyProjectName.MongoDB { OneTimeRunner.Run(() => { - /* You can extension properties to entities + /* You can configure extension properties to entities or other object types * defined in the depended modules. + * + * If you are using EF Core and want to map the entity extension properties to new + * table fields in the database, then configure them in the MyProjectNameEfCoreEntityExtensionMappings * * Example: * @@ -21,7 +22,7 @@ namespace MyCompanyName.MyProjectName.MongoDB * .AddOrUpdateProperty("Title"); * * See the documentation for more: - * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities + * https://docs.abp.io/en/abp/latest/Object-Extensions */ }); } diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs index 6fafd6b76d..cd5c8dbb3d 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs @@ -48,7 +48,7 @@ namespace MyCompanyName.MyProjectName.Users * * 1. update MyProjectNameDbContext.OnModelCreating * to configure the mapping for your new property - * 2. Update MyProjectNameEntityExtensions to extend the IdentityUser entity + * 2. Update MyProjectNameEfCoreEntityExtensionMappings to extend the IdentityUser entity * and add your new property to the migration. * 3. Use the Add-Migration to add a new database migration. * 4. Run the .DbMigrator project (or use the Update-Database command) to apply diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs index 7af1004924..62b57c1cc3 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/MyProjectNameMigrationsDbContextFactory.cs @@ -11,7 +11,7 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore { public MyProjectNameMigrationsDbContext CreateDbContext(string[] args) { - MyProjectNameEntityExtensions.Configure(); + MyProjectNameEfCoreEntityExtensionMappings.Configure(); var configuration = BuildConfiguration(); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs index 99c2585c75..e1478119be 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameDbContext.cs @@ -46,7 +46,7 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore b.ConfigureAbpUser(); /* Configure mappings for your additional properties - * Also see the MyProjectNameEntityExtensions class + * Also see the MyProjectNameEfCoreEntityExtensionMappings class */ }); diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityExtensions.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs similarity index 72% rename from templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityExtensions.cs rename to templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs index af1076ebda..12fb8eefc6 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityExtensions.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEfCoreEntityExtensionMappings.cs @@ -4,7 +4,7 @@ using Volo.Abp.Threading; namespace MyCompanyName.MyProjectName.EntityFrameworkCore { - public static class MyProjectNameEntityExtensions + public static class MyProjectNameEfCoreEntityExtensionMappings { private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); @@ -15,6 +15,11 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore /* You can configure entity extension properties for the * entities defined in the used modules. * + * The properties defined here becomes table fields. + * If you want to use the ExtraProperties dictionary of the entity + * instead of creating a new field, then define the property in the + * MyProjectNameDomainObjectExtensions class. + * * Example: * * ObjectExtensionManager.Instance diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs index 4c231d0b98..0b4258dd18 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.EntityFrameworkCore/EntityFrameworkCore/MyProjectNameEntityFrameworkCoreModule.cs @@ -29,7 +29,7 @@ namespace MyCompanyName.MyProjectName.EntityFrameworkCore { public override void PreConfigureServices(ServiceConfigurationContext context) { - MyProjectNameEntityExtensions.Configure(); + MyProjectNameEfCoreEntityExtensionMappings.Configure(); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameMongoDbModule.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameMongoDbModule.cs index c502d0f924..5d3bfabab5 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameMongoDbModule.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.MongoDB/MongoDb/MyProjectNameMongoDbModule.cs @@ -24,11 +24,6 @@ namespace MyCompanyName.MyProjectName.MongoDB )] public class MyProjectNameMongoDbModule : AbpModule { - public override void PreConfigureServices(ServiceConfigurationContext context) - { - MyProjectNameEntityExtensions.Configure(); - } - public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddMongoDbContext(options => From 2270e3c00466c25df5f05453530e252a5afff2a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Sun, 29 Mar 2020 19:30:10 +0300 Subject: [PATCH 033/182] Update MyProjectNameDomainObjectExtensions.cs --- .../ObjectExtending/MyProjectNameDomainObjectExtensions.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/ObjectExtending/MyProjectNameDomainObjectExtensions.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/ObjectExtending/MyProjectNameDomainObjectExtensions.cs index 2fcd167216..6c1439e7c2 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/ObjectExtending/MyProjectNameDomainObjectExtensions.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/ObjectExtending/MyProjectNameDomainObjectExtensions.cs @@ -1,4 +1,6 @@ -using Volo.Abp.Threading; +using Volo.Abp.Identity; +using Volo.Abp.ObjectExtending; +using Volo.Abp.Threading; namespace MyCompanyName.MyProjectName.ObjectExtending { From 21e82b9e8468c385a7b6058efbf2af0215d66bfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Mon, 30 Mar 2020 00:09:54 +0300 Subject: [PATCH 034/182] Update MongoAuditLogRepository.cs --- .../Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index 9ab6064484..8705e398dd 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -163,7 +163,7 @@ namespace Volo.Abp.AuditLogging.MongoDB return auditLogs .SelectMany(x => x.EntityChanges.Where(y => - IsSatisfiedBySpecification(y, auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName))) + IsSatisfiedEntityChange(y, auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName))) .AsQueryable().OrderBy(sorting ?? "changeTime desc").ToList(); } @@ -202,7 +202,7 @@ namespace Volo.Abp.AuditLogging.MongoDB e => e.EntityChanges.Any(ec => ec.EntityTypeFullName == entityTypeFullName)); } - protected virtual bool IsSatisfiedBySpecification( + protected virtual bool IsSatisfiedEntityChange( EntityChange entityChange, Guid? auditLogId = null, DateTime? startTime = null, From 237290a301a91daac7f89a637b60d09f3572e4bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Mon, 30 Mar 2020 00:12:48 +0300 Subject: [PATCH 035/182] Update AuditLogRepository_Tests.cs --- .../AuditLogging/AuditLogRepository_Tests.cs | 34 +++++++++---------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs index 3b04b78234..7acf357e3b 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs @@ -431,13 +431,13 @@ namespace Volo.Abp.AuditLogging await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); //Assert - var logs = await AuditLogRepository.GetEntityChangeListAsync(); - logs.ShouldNotBeNull(); - logs.Count.ShouldBe(3); + var entityChanges = await AuditLogRepository.GetEntityChangeListAsync(); + entityChanges.ShouldNotBeNull(); + entityChanges.Count.ShouldBe(3); - logs.Single(x => x.ChangeType == EntityChangeType.Created).ShouldNotBeNull(); - logs.Single(x => x.ChangeType == EntityChangeType.Deleted).ShouldNotBeNull(); - logs.Single(x => x.ChangeType == EntityChangeType.Updated).ShouldNotBeNull(); + entityChanges.Single(x => x.ChangeType == EntityChangeType.Created).ShouldNotBeNull(); + entityChanges.Single(x => x.ChangeType == EntityChangeType.Deleted).ShouldNotBeNull(); + entityChanges.Single(x => x.ChangeType == EntityChangeType.Updated).ShouldNotBeNull(); } [Fact] @@ -541,17 +541,17 @@ namespace Volo.Abp.AuditLogging await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); //Assert - var logs = await AuditLogRepository.GetEntityChangeListAsync(); - logs.ShouldNotBeNull(); - logs.Count.ShouldBe(3); + var entityChangesDesc = await AuditLogRepository.GetEntityChangeListAsync(); + entityChangesDesc.ShouldNotBeNull(); + entityChangesDesc.Count.ShouldBe(3); - logs.First().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Updated"); - logs.Last().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Deleted"); + entityChangesDesc.First().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Updated"); + entityChangesDesc.Last().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Deleted"); - var logsReversed = await AuditLogRepository.GetEntityChangeListAsync("changeTime asc"); + var entityChangesAsc = await AuditLogRepository.GetEntityChangeListAsync("changeTime asc"); - logsReversed.First().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Deleted"); - logsReversed.Last().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Updated"); + entityChangesAsc.First().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Deleted"); + entityChangesAsc.Last().EntityTypeFullName.ShouldBe("Volo.Abp.AuditLogging.TestEntity_Updated"); } [Fact] @@ -654,9 +654,9 @@ namespace Volo.Abp.AuditLogging await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); //Assert - var logs = await AuditLogRepository.GetEntityChangeListAsync(changeType: EntityChangeType.Created); - logs.ShouldNotBeNull(); - logs.Count.ShouldBe(1); + var entityChanges = await AuditLogRepository.GetEntityChangeListAsync(changeType: EntityChangeType.Created); + entityChanges.ShouldNotBeNull(); + entityChanges.Count.ShouldBe(1); } } } From 479a79ced4b990ddecf687b272f1ed11316dfc77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Mon, 30 Mar 2020 00:16:17 +0300 Subject: [PATCH 036/182] Update EfCoreAuditLogRepository.cs --- .../EntityFrameworkCore/EfCoreAuditLogRepository.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs index b59186c923..2a80767cd6 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs @@ -170,7 +170,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore string entityTypeFullName = null, CancellationToken cancellationToken = default) { - var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName, false); + var query = GetEntityChangeListQuery(auditLogId, startTime, endTime, changeType, entityId, entityTypeFullName); var totalCount = await query.LongCountAsync(GetCancellationToken(cancellationToken)); From d0ee68e612c7e362ba1108e9a5c57aacd47913f5 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 30 Mar 2020 10:33:20 +0800 Subject: [PATCH 037/182] Use object extension system. --- .../Acme.BookStore.Domain/Users/AppUser.cs | 4 ++-- .../Acme.BookStore.Domain/Users/AppUser.cs | 4 ++-- .../BookStoreMigrationsDbContextFactory.cs | 2 +- .../EntityFrameworkCore/BookStoreDbContext.cs | 2 +- .../BookStoreEntityExtensions.cs | 22 +++++++++++-------- .../BookStoreEntityFrameworkCoreModule.cs | 2 +- ...anagementEfCoreEntityExtensionMappings.cs} | 20 ++++++++++------- ...BookManagementEntityFrameworkCoreModule.cs | 2 +- .../Acme.BookStore.Domain/Users/AppUser.cs | 4 ++-- .../BookStoreMigrationsDbContextFactory.cs | 2 +- .../EntityFrameworkCore/BookStoreDbContext.cs | 2 +- ...BookStoreEfCoreEntityExtensionMappings.cs} | 22 +++++++++++-------- .../BookStoreEntityFrameworkCoreModule.cs | 2 +- .../src/DashboardDemo.Domain/Users/AppUser.cs | 4 ++-- ...DashboardDemoMigrationsDbContextFactory.cs | 2 +- .../DashboardDemoDbContext.cs | 2 +- ...boardDemoEfCoreEntityExtensionMappings.cs} | 22 +++++++++++-------- .../DashboardDemoEntityFrameworkCoreModule.cs | 2 +- .../Users/AppUser.cs | 2 +- 19 files changed, 70 insertions(+), 54 deletions(-) rename samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/{BookManagementEntityExtensions.cs => BookManagementEfCoreEntityExtensionMappings.cs} (51%) rename samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/{BookStoreEntityExtensions.cs => BookStoreEfCoreEntityExtensionMappings.cs} (50%) rename samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/{DashboardDemoEntityExtensions.cs => DashboardDemoEfCoreEntityExtensionMappings.cs} (50%) diff --git a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Users/AppUser.cs b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Users/AppUser.cs index 37f67ba60a..b746e68052 100644 --- a/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Users/AppUser.cs +++ b/samples/BookStore-Angular-MongoDb/aspnet-core/src/Acme.BookStore.Domain/Users/AppUser.cs @@ -46,9 +46,9 @@ namespace Acme.BookStore.Users * * If you add a property and using the EF Core, remember these; * - * 1. update BookStoreDbContext.OnModelCreating + * 1. Update BookStoreDbContext.OnModelCreating * to configure the mapping for your new property - * 2. Update BookStoreEntityExtensions to extend the IdentityUser entity + * 2. Update BookStoreEfCoreEntityExtensionMappings to extend the IdentityUser entity * and add your new property to the migration. * 3. Use the Add-Migration to add a new database migration. * 4. Run the .DbMigrator project (or use the Update-Database command) to apply diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Users/AppUser.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Users/AppUser.cs index 37f67ba60a..b746e68052 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Users/AppUser.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.Domain/Users/AppUser.cs @@ -46,9 +46,9 @@ namespace Acme.BookStore.Users * * If you add a property and using the EF Core, remember these; * - * 1. update BookStoreDbContext.OnModelCreating + * 1. Update BookStoreDbContext.OnModelCreating * to configure the mapping for your new property - * 2. Update BookStoreEntityExtensions to extend the IdentityUser entity + * 2. Update BookStoreEfCoreEntityExtensionMappings to extend the IdentityUser entity * and add your new property to the migration. * 3. Use the Add-Migration to add a new database migration. * 4. Run the .DbMigrator project (or use the Update-Database command) to apply diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs index 4f285e597e..dad059f971 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs @@ -11,7 +11,7 @@ namespace Acme.BookStore.EntityFrameworkCore { public BookStoreMigrationsDbContext CreateDbContext(string[] args) { - BookStoreEntityExtensions.Configure(); + BookStoreEfCoreEntityExtensionMappings.Configure(); var configuration = BuildConfiguration(); diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs index 7ddeab7a5f..bfa602ef6b 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs @@ -45,7 +45,7 @@ namespace Acme.BookStore.EntityFrameworkCore b.ConfigureAbpUser(); /* Configure mappings for your additional properties - * Also see the BookStoreEntityExtensions class + * Also see the BookStoreEfCoreEntityExtensionMappings class */ }); diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs index 771390698f..cadfa73ccd 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs @@ -1,10 +1,10 @@ -using Volo.Abp.EntityFrameworkCore.Extensions; -using Volo.Abp.Identity; +using Volo.Abp.Identity; +using Volo.Abp.ObjectExtending; using Volo.Abp.Threading; namespace Acme.BookStore.EntityFrameworkCore { - public static class BookStoreEntityExtensions + public static class BookStoreEfCoreEntityExtensionMappings { private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); @@ -15,14 +15,18 @@ namespace Acme.BookStore.EntityFrameworkCore /* You can configure entity extension properties for the * entities defined in the used modules. * + * The properties defined here becomes table fields. + * If you want to use the ExtraProperties dictionary of the entity + * instead of creating a new field, then define the property in the + * MyProjectNameDomainObjectExtensions class. + * * Example: * - * EntityExtensionManager.AddProperty( - * "MyProperty", - * b => - * { - * b.HasMaxLength(128); - * }); + * ObjectExtensionManager.Instance + * .MapEfCoreProperty( + * "MyProperty", + * b => b.HasMaxLength(128) + * ); * * See the documentation for more: * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs index c8142b8088..58999b2b0d 100644 --- a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs +++ b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs @@ -31,7 +31,7 @@ namespace Acme.BookStore.EntityFrameworkCore { public override void PreConfigureServices(ServiceConfigurationContext context) { - BookStoreEntityExtensions.Configure(); + BookStoreEfCoreEntityExtensionMappings.Configure(); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityExtensions.cs b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEfCoreEntityExtensionMappings.cs similarity index 51% rename from samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityExtensions.cs rename to samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEfCoreEntityExtensionMappings.cs index b7a3871453..d4358d0b66 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityExtensions.cs +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEfCoreEntityExtensionMappings.cs @@ -1,9 +1,9 @@ -using Volo.Abp.EntityFrameworkCore.Extensions; +using Volo.Abp.ObjectExtending; using Volo.Abp.Threading; namespace Acme.BookStore.BookManagement.EntityFrameworkCore { - public static class BookManagementEntityExtensions + public static class BookManagementEfCoreEntityExtensionMappings { private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); @@ -14,14 +14,18 @@ namespace Acme.BookStore.BookManagement.EntityFrameworkCore /* You can configure entity extension properties for the * entities defined in the used modules. * + * The properties defined here becomes table fields. + * If you want to use the ExtraProperties dictionary of the entity + * instead of creating a new field, then define the property in the + * MyProjectNameDomainObjectExtensions class. + * * Example: * - * EntityExtensionManager.AddProperty( - * "MyProperty", - * b => - * { - * b.HasMaxLength(128); - * }); + * ObjectExtensionManager.Instance + * .MapEfCoreProperty( + * "MyProperty", + * b => b.HasMaxLength(128) + * ); * * See the documentation for more: * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities diff --git a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityFrameworkCoreModule.cs b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityFrameworkCoreModule.cs index 3734551e73..758486bf7e 100644 --- a/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityFrameworkCoreModule.cs +++ b/samples/BookStore-Modular/modules/book-management/src/Acme.BookStore.BookManagement.EntityFrameworkCore/EntityFrameworkCore/BookManagementEntityFrameworkCoreModule.cs @@ -12,7 +12,7 @@ namespace Acme.BookStore.BookManagement.EntityFrameworkCore { public override void PreConfigureServices(ServiceConfigurationContext context) { - BookManagementEntityExtensions.Configure(); + BookManagementEfCoreEntityExtensionMappings.Configure(); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/samples/BookStore/src/Acme.BookStore.Domain/Users/AppUser.cs b/samples/BookStore/src/Acme.BookStore.Domain/Users/AppUser.cs index 37f67ba60a..b746e68052 100644 --- a/samples/BookStore/src/Acme.BookStore.Domain/Users/AppUser.cs +++ b/samples/BookStore/src/Acme.BookStore.Domain/Users/AppUser.cs @@ -46,9 +46,9 @@ namespace Acme.BookStore.Users * * If you add a property and using the EF Core, remember these; * - * 1. update BookStoreDbContext.OnModelCreating + * 1. Update BookStoreDbContext.OnModelCreating * to configure the mapping for your new property - * 2. Update BookStoreEntityExtensions to extend the IdentityUser entity + * 2. Update BookStoreEfCoreEntityExtensionMappings to extend the IdentityUser entity * and add your new property to the migration. * 3. Use the Add-Migration to add a new database migration. * 4. Run the .DbMigrator project (or use the Update-Database command) to apply diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs index cf8a18e468..52307142f4 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/BookStoreMigrationsDbContextFactory.cs @@ -11,7 +11,7 @@ namespace Acme.BookStore.EntityFrameworkCore { public BookStoreMigrationsDbContext CreateDbContext(string[] args) { - BookStoreEntityExtensions.Configure(); + BookStoreEfCoreEntityExtensionMappings.Configure(); var configuration = BuildConfiguration(); diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs index 5849e12137..c2df7ee6d0 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreDbContext.cs @@ -50,7 +50,7 @@ namespace Acme.BookStore.EntityFrameworkCore b.ConfigureAbpUser(); /* Configure mappings for your additional properties - * Also see the BookStoreEntityExtensions class + * Also see the BookStoreEfCoreEntityExtensionMappings class */ }); diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEfCoreEntityExtensionMappings.cs similarity index 50% rename from samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs rename to samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEfCoreEntityExtensionMappings.cs index 771390698f..cadfa73ccd 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEfCoreEntityExtensionMappings.cs @@ -1,10 +1,10 @@ -using Volo.Abp.EntityFrameworkCore.Extensions; -using Volo.Abp.Identity; +using Volo.Abp.Identity; +using Volo.Abp.ObjectExtending; using Volo.Abp.Threading; namespace Acme.BookStore.EntityFrameworkCore { - public static class BookStoreEntityExtensions + public static class BookStoreEfCoreEntityExtensionMappings { private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); @@ -15,14 +15,18 @@ namespace Acme.BookStore.EntityFrameworkCore /* You can configure entity extension properties for the * entities defined in the used modules. * + * The properties defined here becomes table fields. + * If you want to use the ExtraProperties dictionary of the entity + * instead of creating a new field, then define the property in the + * MyProjectNameDomainObjectExtensions class. + * * Example: * - * EntityExtensionManager.AddProperty( - * "MyProperty", - * b => - * { - * b.HasMaxLength(128); - * }); + * ObjectExtensionManager.Instance + * .MapEfCoreProperty( + * "MyProperty", + * b => b.HasMaxLength(128) + * ); * * See the documentation for more: * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities diff --git a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs index be5f6039b4..3faeb576da 100644 --- a/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs +++ b/samples/BookStore/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityFrameworkCoreModule.cs @@ -29,7 +29,7 @@ namespace Acme.BookStore.EntityFrameworkCore { public override void PreConfigureServices(ServiceConfigurationContext context) { - BookStoreEntityExtensions.Configure(); + BookStoreEfCoreEntityExtensionMappings.Configure(); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/samples/DashboardDemo/src/DashboardDemo.Domain/Users/AppUser.cs b/samples/DashboardDemo/src/DashboardDemo.Domain/Users/AppUser.cs index cfad912abe..43f40fed20 100644 --- a/samples/DashboardDemo/src/DashboardDemo.Domain/Users/AppUser.cs +++ b/samples/DashboardDemo/src/DashboardDemo.Domain/Users/AppUser.cs @@ -46,9 +46,9 @@ namespace DashboardDemo.Users * * If you add a property and using the EF Core, remember these; * - * 1. update BookStoreDbContext.OnModelCreating + * 1. Update BookStoreDbContext.OnModelCreating * to configure the mapping for your new property - * 2. Update BookStoreEntityExtensions to extend the IdentityUser entity + * 2. Update DashboardDemoEfCoreEntityExtensionMappings to extend the IdentityUser entity * and add your new property to the migration. * 3. Use the Add-Migration to add a new database migration. * 4. Run the .DbMigrator project (or use the Update-Database command) to apply diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContextFactory.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContextFactory.cs index 10ce7b7da1..b9f1526ad4 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContextFactory.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore.DbMigrations/EntityFrameworkCore/DashboardDemoMigrationsDbContextFactory.cs @@ -11,7 +11,7 @@ namespace DashboardDemo.EntityFrameworkCore { public DashboardDemoMigrationsDbContext CreateDbContext(string[] args) { - DashboardDemoEntityExtensions.Configure(); + DashboardDemoEfCoreEntityExtensionMappings.Configure(); var configuration = BuildConfiguration(); diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContext.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContext.cs index 33c1ddb82d..a5d0bdea2e 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContext.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoDbContext.cs @@ -48,7 +48,7 @@ namespace DashboardDemo.EntityFrameworkCore b.ConfigureAbpUser(); /* Configure mappings for your additional properties - * Also see the DashboardDemoEntityExtensions class + * Also see the DashboardDemoEfCoreEntityExtensionMappings class */ }); diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityExtensions.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEfCoreEntityExtensionMappings.cs similarity index 50% rename from samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityExtensions.cs rename to samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEfCoreEntityExtensionMappings.cs index b41ccb8ac8..2e5ce4d0bf 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityExtensions.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEfCoreEntityExtensionMappings.cs @@ -1,10 +1,10 @@ -using Volo.Abp.EntityFrameworkCore.Extensions; -using Volo.Abp.Identity; +using Volo.Abp.Identity; +using Volo.Abp.ObjectExtending; using Volo.Abp.Threading; namespace DashboardDemo.EntityFrameworkCore { - public static class DashboardDemoEntityExtensions + public static class DashboardDemoEfCoreEntityExtensionMappings { private static readonly OneTimeRunner OneTimeRunner = new OneTimeRunner(); @@ -15,14 +15,18 @@ namespace DashboardDemo.EntityFrameworkCore /* You can configure entity extension properties for the * entities defined in the used modules. * + * The properties defined here becomes table fields. + * If you want to use the ExtraProperties dictionary of the entity + * instead of creating a new field, then define the property in the + * MyProjectNameDomainObjectExtensions class. + * * Example: * - * EntityExtensionManager.AddProperty( - * "MyProperty", - * b => - * { - * b.HasMaxLength(128); - * }); + * ObjectExtensionManager.Instance + * .MapEfCoreProperty( + * "MyProperty", + * b => b.HasMaxLength(128) + * ); * * See the documentation for more: * https://docs.abp.io/en/abp/latest/Customizing-Application-Modules-Extending-Entities diff --git a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityFrameworkCoreModule.cs b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityFrameworkCoreModule.cs index b183c49446..043cf10197 100644 --- a/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityFrameworkCoreModule.cs +++ b/samples/DashboardDemo/src/DashboardDemo.EntityFrameworkCore/EntityFrameworkCore/DashboardDemoEntityFrameworkCoreModule.cs @@ -29,7 +29,7 @@ namespace DashboardDemo.EntityFrameworkCore { public override void PreConfigureServices(ServiceConfigurationContext context) { - DashboardDemoEntityExtensions.Configure(); + DashboardDemoEfCoreEntityExtensionMappings.Configure(); } public override void ConfigureServices(ServiceConfigurationContext context) diff --git a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs index cd5c8dbb3d..1b5b3996ee 100644 --- a/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs +++ b/templates/app/aspnet-core/src/MyCompanyName.MyProjectName.Domain/Users/AppUser.cs @@ -46,7 +46,7 @@ namespace MyCompanyName.MyProjectName.Users * * If you add a property and using the EF Core, remember these; * - * 1. update MyProjectNameDbContext.OnModelCreating + * 1. Update MyProjectNameDbContext.OnModelCreating * to configure the mapping for your new property * 2. Update MyProjectNameEfCoreEntityExtensionMappings to extend the IdentityUser entity * and add your new property to the migration. From 4a83c2db832b698f478074290fb20b1687699abf Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 30 Mar 2020 10:39:07 +0800 Subject: [PATCH 038/182] Rename BookStoreEntityExtensions to BookStoreEfCoreEntityExtensionMappings. --- ...ityExtensions.cs => BookStoreEfCoreEntityExtensionMappings.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/{BookStoreEntityExtensions.cs => BookStoreEfCoreEntityExtensionMappings.cs} (100%) diff --git a/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs b/samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEfCoreEntityExtensionMappings.cs similarity index 100% rename from samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEntityExtensions.cs rename to samples/BookStore-Modular/application/src/Acme.BookStore.EntityFrameworkCore/EntityFrameworkCore/BookStoreEfCoreEntityExtensionMappings.cs From a05cf07cf42f469dd3e794b6bd63eb3d7b321dfc Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 30 Mar 2020 11:41:32 +0800 Subject: [PATCH 039/182] Set ExternalProviders and EnableLocalLogin properties in the page's OnPost method. Resolve #3400 --- .../IdentityServerSupportedLoginModel.cs | 19 ++++------- .../Pages/Account/Login.cshtml.cs | 33 ++++++++++++------- 2 files changed, 28 insertions(+), 24 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs index 179e18246a..e194c1544d 100644 --- a/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs +++ b/modules/account/src/Volo.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerSupportedLoginModel.cs @@ -68,18 +68,11 @@ namespace Volo.Abp.Account.Web.Pages.Account return Page(); } - var schemes = await SchemeProvider.GetAllSchemesAsync(); - - var providers = schemes - .Where(x => x.DisplayName != null || x.Name.Equals(AccountOptions.WindowsAuthenticationSchemeName, StringComparison.OrdinalIgnoreCase)) - .Select(x => new ExternalProviderModel - { - DisplayName = x.DisplayName, - AuthenticationScheme = x.Name - }) - .ToList(); + var providers = await GetExternalProviders(); + ExternalProviders = providers.ToList(); EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); + if (context?.ClientId != null) { var client = await ClientStore.FindEnabledClientByIdAsync(context.ClientId); @@ -94,8 +87,6 @@ namespace Volo.Abp.Account.Web.Pages.Account } } - ExternalProviders = providers.ToArray(); - if (IsExternalLoginOnly) { return await base.OnPostExternalLogin(providers.First().AuthenticationScheme); @@ -124,6 +115,10 @@ namespace Volo.Abp.Account.Web.Pages.Account ValidateModel(); + ExternalProviders = await GetExternalProviders(); + + EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); + await ReplaceEmailToUsernameOfInputIfNeeds(); var result = await SignInManager.PasswordSignInAsync( diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs index 014088983a..5f15df99b4 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs @@ -63,21 +63,10 @@ namespace Volo.Abp.Account.Web.Pages.Account { LoginInput = new LoginInputModel(); - var schemes = await SchemeProvider.GetAllSchemesAsync(); - - var providers = schemes - .Where(x => x.DisplayName != null || x.Name.Equals(AccountOptions.WindowsAuthenticationSchemeName, StringComparison.OrdinalIgnoreCase)) - .Select(x => new ExternalProviderModel - { - DisplayName = x.DisplayName, - AuthenticationScheme = x.Name - }) - .ToList(); + ExternalProviders = await GetExternalProviders(); EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); - ExternalProviders = providers.ToArray(); - if (IsExternalLoginOnly) { //return await ExternalLogin(vm.ExternalLoginScheme, returnUrl); @@ -94,6 +83,10 @@ namespace Volo.Abp.Account.Web.Pages.Account ValidateModel(); + ExternalProviders = await GetExternalProviders(); + + EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); + await ReplaceEmailToUsernameOfInputIfNeeds(); var result = await SignInManager.PasswordSignInAsync( @@ -140,6 +133,22 @@ namespace Volo.Abp.Account.Web.Pages.Account return RedirectSafely(ReturnUrl, ReturnUrlHash); } + protected virtual async Task> GetExternalProviders() + { + var schemes = await SchemeProvider.GetAllSchemesAsync(); + + var providers = schemes + .Where(x => x.DisplayName != null || x.Name.Equals(AccountOptions.WindowsAuthenticationSchemeName, StringComparison.OrdinalIgnoreCase)) + .Select(x => new ExternalProviderModel + { + DisplayName = x.DisplayName, + AuthenticationScheme = x.Name + }) + .ToList(); + + return providers.ToList(); + } + [UnitOfWork] public virtual async Task OnPostExternalLogin(string provider) { From 67f6f5d153c39ca2736b96b4f5e804d4f20b1043 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 30 Mar 2020 09:12:33 +0300 Subject: [PATCH 040/182] feat: create @abp/utils package --- npm/packs/utils/.editorconfig | 16 + npm/packs/utils/.gitignore | 50 + npm/packs/utils/.prettierrc | 5 + npm/packs/utils/README.md | 1 + npm/packs/utils/angular.json | 50 + npm/packs/utils/package.json | 59 + npm/packs/utils/prepublish.js | 12 + npm/packs/utils/projects/utils/karma.conf.js | 32 + .../utils/projects/utils/ng-package.json | 7 + .../projects/utils/src/lib/linked-list.ts | 3 + .../utils/projects/utils/src/public-api.ts | 5 + npm/packs/utils/projects/utils/src/test.ts | 26 + .../utils/projects/utils/tsconfig.lib.json | 18 + .../utils/projects/utils/tsconfig.spec.json | 17 + npm/packs/utils/tsconfig.json | 29 + npm/packs/utils/tslint.json | 136 + npm/packs/utils/yarn.lock | 4631 +++++++++++++++++ 17 files changed, 5097 insertions(+) create mode 100644 npm/packs/utils/.editorconfig create mode 100644 npm/packs/utils/.gitignore create mode 100644 npm/packs/utils/.prettierrc create mode 100644 npm/packs/utils/README.md create mode 100644 npm/packs/utils/angular.json create mode 100644 npm/packs/utils/package.json create mode 100644 npm/packs/utils/prepublish.js create mode 100644 npm/packs/utils/projects/utils/karma.conf.js create mode 100644 npm/packs/utils/projects/utils/ng-package.json create mode 100644 npm/packs/utils/projects/utils/src/lib/linked-list.ts create mode 100644 npm/packs/utils/projects/utils/src/public-api.ts create mode 100644 npm/packs/utils/projects/utils/src/test.ts create mode 100644 npm/packs/utils/projects/utils/tsconfig.lib.json create mode 100644 npm/packs/utils/projects/utils/tsconfig.spec.json create mode 100644 npm/packs/utils/tsconfig.json create mode 100644 npm/packs/utils/tslint.json create mode 100644 npm/packs/utils/yarn.lock diff --git a/npm/packs/utils/.editorconfig b/npm/packs/utils/.editorconfig new file mode 100644 index 0000000000..59d9a3a3e7 --- /dev/null +++ b/npm/packs/utils/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/npm/packs/utils/.gitignore b/npm/packs/utils/.gitignore new file mode 100644 index 0000000000..b5e780d1e9 --- /dev/null +++ b/npm/packs/utils/.gitignore @@ -0,0 +1,50 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +/tmp +/out-tsc +# Only exists if Bazel was run +/bazel-out +/lib + +# dependencies +/node_modules + +# profiling files +chrome-profiler-events*.json +speed-measure-plugin*.json + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db + +projects/utils/README.md +projects/utils/package.json \ No newline at end of file diff --git a/npm/packs/utils/.prettierrc b/npm/packs/utils/.prettierrc new file mode 100644 index 0000000000..ebb4af5f9a --- /dev/null +++ b/npm/packs/utils/.prettierrc @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "printWidth": 100, + "trailingComma": "all" +} diff --git a/npm/packs/utils/README.md b/npm/packs/utils/README.md new file mode 100644 index 0000000000..5a0e291a02 --- /dev/null +++ b/npm/packs/utils/README.md @@ -0,0 +1 @@ +# @abp/utils \ No newline at end of file diff --git a/npm/packs/utils/angular.json b/npm/packs/utils/angular.json new file mode 100644 index 0000000000..35717d6644 --- /dev/null +++ b/npm/packs/utils/angular.json @@ -0,0 +1,50 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "utils": { + "projectType": "library", + "root": "projects/utils", + "sourceRoot": "projects/utils/src", + "prefix": "lib", + "architect": { + "build": { + "builder": "@angular-devkit/build-ng-packagr:build", + "options": { + "tsConfig": "projects/utils/tsconfig.lib.json", + "project": "projects/utils/ng-package.json" + }, + "configurations": { + "production": { + "tsConfig": "projects/utils/tsconfig.lib.prod.json" + } + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "projects/utils/src/test.ts", + "tsConfig": "projects/utils/tsconfig.spec.json", + "karmaConfig": "projects/utils/karma.conf.js" + } + }, + "lint": { + "builder": "@angular-devkit/build-angular:tslint", + "options": { + "tsConfig": [ + "projects/utils/tsconfig.lib.json", + "projects/utils/tsconfig.spec.json" + ], + "exclude": [ + "**/node_modules/**" + ] + } + } + } + }}, + "cli": { + "analytics": false + }, + "defaultProject": "utils" +} \ No newline at end of file diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json new file mode 100644 index 0000000000..5b409db79a --- /dev/null +++ b/npm/packs/utils/package.json @@ -0,0 +1,59 @@ +{ + "name": "@abp/utils", + "version": "0.0.2", + "scripts": { + "prepublish": "node prepublish.js", + "ng": "ng", + "start": "ng serve", + "build": "ng build", + "test": "ng test", + "lint": "ng lint" + }, + "publishConfig": { + "access": "public" + }, + "files": [ + "dist/*" + ], + "main": "lib/bundles/abp-utils.umd.js", + "module": "lib/fesm5/abp-utils.js", + "es2015": "lib/fesm2015/abp-utils.js", + "esm5": "lib/esm5/abp-utils.js", + "esm2015": "lib/esm2015/abp-utils.js", + "fesm5": "lib/fesm5/abp-utils.js", + "fesm2015": "lib/fesm2015/abp-utils.js", + "typings": "lib/abp-utils.d.ts", + "metadata": "lib/abp-utils.metadata.json", + "sideEffects": false, + "devDependencies": { + "@angular-devkit/build-ng-packagr": "~0.901.0", + "@angular/cli": "~9.1.0", + "@angular/compiler": "~9.1.0", + "@angular/compiler-cli": "~9.1.0", + "@angular/core": "~9.1.0", + "@types/execa": "^2.0.0", + "@types/fs-extra": "^8.1.0", + "@types/jasmine": "~3.5.0", + "@types/jasminewd2": "~2.0.3", + "@types/node": "^12.11.1", + "codelyzer": "^5.1.2", + "execa": "^4.0.0", + "fs-extra": "^9.0.0", + "jasmine-core": "~3.5.0", + "jasmine-spec-reporter": "~4.2.1", + "karma": "~4.4.1", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage-istanbul-reporter": "~2.1.0", + "karma-jasmine": "~3.0.1", + "karma-jasmine-html-reporter": "^1.4.2", + "ng-packagr": "^9.0.0", + "protractor": "~5.4.3", + "ts-node": "~8.3.0", + "tslib": "^1.10.0", + "tslint": "~6.1.0", + "typescript": "~3.8.3" + }, + "peerDependencies": { + "tslib": "^1.10.0" + } +} diff --git a/npm/packs/utils/prepublish.js b/npm/packs/utils/prepublish.js new file mode 100644 index 0000000000..cf9738b2ef --- /dev/null +++ b/npm/packs/utils/prepublish.js @@ -0,0 +1,12 @@ +const fse = require('fs-extra'); +const execa = require('execa'); + +fse.copyFileSync('./package.json', './projects/utils/package.json'); +fse.copyFileSync('./README.md', './projects/utils/README.md'); + +try { + execa.sync('yarn', ['build'], { stdout: 'inherit' }); +} catch (error) { + console.error(error); + process.exit(1); +} diff --git a/npm/packs/utils/projects/utils/karma.conf.js b/npm/packs/utils/projects/utils/karma.conf.js new file mode 100644 index 0000000000..c267a7236a --- /dev/null +++ b/npm/packs/utils/projects/utils/karma.conf.js @@ -0,0 +1,32 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage-istanbul-reporter'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + coverageIstanbulReporter: { + dir: require('path').join(__dirname, '../../coverage/utils'), + reports: ['html', 'lcovonly', 'text-summary'], + fixWebpackSourcePaths: true + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/npm/packs/utils/projects/utils/ng-package.json b/npm/packs/utils/projects/utils/ng-package.json new file mode 100644 index 0000000000..2071230521 --- /dev/null +++ b/npm/packs/utils/projects/utils/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist", + "lib": { + "entryFile": "src/public-api.ts" + } +} diff --git a/npm/packs/utils/projects/utils/src/lib/linked-list.ts b/npm/packs/utils/projects/utils/src/lib/linked-list.ts new file mode 100644 index 0000000000..86ebebbcc1 --- /dev/null +++ b/npm/packs/utils/projects/utils/src/lib/linked-list.ts @@ -0,0 +1,3 @@ +export class LinkedList { + constructor() {} +} diff --git a/npm/packs/utils/projects/utils/src/public-api.ts b/npm/packs/utils/projects/utils/src/public-api.ts new file mode 100644 index 0000000000..ab1a57d73c --- /dev/null +++ b/npm/packs/utils/projects/utils/src/public-api.ts @@ -0,0 +1,5 @@ +/* + * Public API Surface of utils + */ + +export * from './lib/linked-list'; diff --git a/npm/packs/utils/projects/utils/src/test.ts b/npm/packs/utils/projects/utils/src/test.ts new file mode 100644 index 0000000000..303b32a220 --- /dev/null +++ b/npm/packs/utils/projects/utils/src/test.ts @@ -0,0 +1,26 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/dist/zone'; +import 'zone.js/dist/zone-testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + keys(): string[]; + (id: string): T; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting() +); +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/npm/packs/utils/projects/utils/tsconfig.lib.json b/npm/packs/utils/projects/utils/tsconfig.lib.json new file mode 100644 index 0000000000..77a6628415 --- /dev/null +++ b/npm/packs/utils/projects/utils/tsconfig.lib.json @@ -0,0 +1,18 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/lib", + "target": "es2015", + "declaration": true, + "inlineSources": true, + "types": [], + "lib": ["dom", "es2018"] + }, + "angularCompilerOptions": { + "skipTemplateCodegen": true, + "strictMetadataEmit": true, + "enableResourceInlining": true, + "enableIvy": false + }, + "exclude": ["src/test.ts", "**/*.spec.ts"] +} diff --git a/npm/packs/utils/projects/utils/tsconfig.spec.json b/npm/packs/utils/projects/utils/tsconfig.spec.json new file mode 100644 index 0000000000..16da33db07 --- /dev/null +++ b/npm/packs/utils/projects/utils/tsconfig.spec.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine", + "node" + ] + }, + "files": [ + "src/test.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} diff --git a/npm/packs/utils/tsconfig.json b/npm/packs/utils/tsconfig.json new file mode 100644 index 0000000000..b9b01ccec0 --- /dev/null +++ b/npm/packs/utils/tsconfig.json @@ -0,0 +1,29 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "module": "esnext", + "moduleResolution": "node", + "importHelpers": true, + "target": "es2015", + "lib": [ + "es2018", + "dom" + ], + "paths": { + "utils": [ + "dist/utils/utils", + "dist/utils" + ] + } + }, + "angularCompilerOptions": { + "fullTemplateTypeCheck": true, + "strictInjectionParameters": true + } +} \ No newline at end of file diff --git a/npm/packs/utils/tslint.json b/npm/packs/utils/tslint.json new file mode 100644 index 0000000000..def88d1c87 --- /dev/null +++ b/npm/packs/utils/tslint.json @@ -0,0 +1,136 @@ +{ + "extends": "tslint:recommended", + "rulesDirectory": [ + "codelyzer" + ], + "rules": { + "align": { + "options": [ + "parameters", + "statements" + ] + }, + "array-type": false, + "arrow-return-shorthand": true, + "curly": true, + "deprecation": { + "severity": "warning" + }, + "eofline": true, + "import-blacklist": [ + true, + "rxjs/Rx" + ], + "import-spacing": true, + "indent": { + "options": [ + "spaces" + ] + }, + "max-classes-per-file": false, + "max-line-length": [ + true, + 140 + ], + "member-ordering": [ + true, + { + "order": [ + "static-field", + "instance-field", + "static-method", + "instance-method" + ] + } + ], + "no-console": [ + true, + "debug", + "info", + "time", + "timeEnd", + "trace" + ], + "no-empty": false, + "no-inferrable-types": [ + true, + "ignore-params" + ], + "no-non-null-assertion": true, + "no-redundant-jsdoc": true, + "no-switch-case-fall-through": true, + "no-var-requires": false, + "object-literal-key-quotes": [ + true, + "as-needed" + ], + "quotemark": [ + true, + "single" + ], + "semicolon": { + "options": [ + "always" + ] + }, + "space-before-function-paren": { + "options": { + "anonymous": "never", + "asyncArrow": "always", + "constructor": "never", + "method": "never", + "named": "never" + } + }, + "typedef-whitespace": { + "options": [ + { + "call-signature": "nospace", + "index-signature": "nospace", + "parameter": "nospace", + "property-declaration": "nospace", + "variable-declaration": "nospace" + }, + { + "call-signature": "onespace", + "index-signature": "onespace", + "parameter": "onespace", + "property-declaration": "onespace", + "variable-declaration": "onespace" + } + ] + }, + "variable-name": { + "options": [ + "ban-keywords", + "check-format", + "allow-pascal-case" + ] + }, + "whitespace": { + "options": [ + "check-branch", + "check-decl", + "check-operator", + "check-separator", + "check-type", + "check-typecast" + ] + }, + "component-class-suffix": true, + "contextual-lifecycle": true, + "directive-class-suffix": true, + "no-conflicting-lifecycle": true, + "no-host-metadata-property": true, + "no-input-rename": true, + "no-inputs-metadata-property": true, + "no-output-native": true, + "no-output-on-prefix": true, + "no-output-rename": true, + "no-outputs-metadata-property": true, + "template-banana-in-box": true, + "template-no-negated-async": true, + "use-lifecycle-interface": true, + "use-pipe-transform-interface": true + } +} diff --git a/npm/packs/utils/yarn.lock b/npm/packs/utils/yarn.lock new file mode 100644 index 0000000000..bfcbdc3504 --- /dev/null +++ b/npm/packs/utils/yarn.lock @@ -0,0 +1,4631 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@angular-devkit/architect@0.901.0": + version "0.901.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.901.0.tgz#c660cb76e3bd35fc294d8e8578782b83157924aa" + integrity sha512-SlqEBkPrT40zMCy5344AsUqC76pEPCaGPaAkCIvadaz2dC9vNMzQrvubCPJHViD/TumkSX1kYmLS3iYASVM9GQ== + dependencies: + "@angular-devkit/core" "9.1.0" + rxjs "6.5.4" + +"@angular-devkit/build-ng-packagr@~0.901.0": + version "0.901.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.901.0.tgz#48d191f49f5f1b9d5b3bc10d63b85e2c47f0de1d" + integrity sha512-cUQKK7+bYi3fOmq41cfr1ZFQwqAUUm0Yz7DgH34Ek7D98XudNOxJ63Xv4manId528WhqyGDP5/2tut7QNV3VJA== + dependencies: + "@angular-devkit/architect" "0.901.0" + rxjs "6.5.4" + +"@angular-devkit/core@9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-9.1.0.tgz#5cc89bb5d44c6fd12a3527bae0253adb60d64b07" + integrity sha512-vHTsrB4JaVUQ95FRnKrgo79Y3F6FokImrZdrmwkQmwAThpjXeXmpUEKZS+ZSTFRgesjiIysVGOFijARP4BQ7Bg== + dependencies: + ajv "6.12.0" + fast-json-stable-stringify "2.1.0" + magic-string "0.25.7" + rxjs "6.5.4" + source-map "0.7.3" + +"@angular-devkit/schematics@9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-9.1.0.tgz#f453a9ff78c34a5468cc21830ac4a46089ee1a31" + integrity sha512-cb9PSvskMwWlL54fPfCcpJoyNDWAX6Wo7CzL5qpIB2cJCPLAuyfRUYYrkO77YUST+n2HvypHz0cZ5SNGMfaaBQ== + dependencies: + "@angular-devkit/core" "9.1.0" + ora "4.0.3" + rxjs "6.5.4" + +"@angular/cli@~9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-9.1.0.tgz#07ec165d507208bb8d8d8ab73c3e14102643edff" + integrity sha512-ofum4gPE/W3fKyzuJrpdHeOS0ZL8x0eYCgsrMyUoFodSpb5LWPqeW+56NgDTpIeny+Trx3pM9dr9QTUVTJ0vYg== + dependencies: + "@angular-devkit/architect" "0.901.0" + "@angular-devkit/core" "9.1.0" + "@angular-devkit/schematics" "9.1.0" + "@schematics/angular" "9.1.0" + "@schematics/update" "0.901.0" + "@yarnpkg/lockfile" "1.1.0" + ansi-colors "4.1.1" + debug "4.1.1" + ini "1.3.5" + inquirer "7.1.0" + npm-package-arg "8.0.1" + npm-pick-manifest "6.0.0" + open "7.0.3" + pacote "11.1.4" + read-package-tree "5.3.1" + rimraf "3.0.2" + semver "7.1.3" + symbol-observable "1.2.0" + universal-analytics "0.4.20" + uuid "7.0.2" + +"@angular/compiler-cli@~9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-9.1.0.tgz#5887c278a2fe1f3165018b1cbceef71d9023b9ae" + integrity sha512-xZ8mVPmPporSTtvNA+cbFJQymLzuWfMX6HDDgztZ2eZ5WcQJYloRN4CcYMEzDhCxfV1Zw9Tfc2l14jZD8osi6g== + dependencies: + canonical-path "1.0.0" + chokidar "^3.0.0" + convert-source-map "^1.5.1" + dependency-graph "^0.7.2" + fs-extra "4.0.2" + magic-string "^0.25.0" + minimist "^1.2.0" + reflect-metadata "^0.1.2" + semver "^6.3.0" + source-map "^0.6.1" + sourcemap-codec "^1.4.8" + yargs "15.3.0" + +"@angular/compiler@~9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.1.0.tgz#e55b4f2f24df75283002d5e8e85e1acfc46928f6" + integrity sha512-QHw/JSeTXHiJQ2Ih0EtU7FGsYcOr+0hwZhqwSW3EEn8TtUgA3DS5lXeiDV66f+3DdvNZFPmgiZIvun3ypxn1HA== + +"@angular/core@~9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.1.0.tgz#9dfc386bd1461e0fd4786031fd245da04371421c" + integrity sha512-RVlyegdIAij0P1wLY5ObIdsBAzvmHkHfElnmfiNKhaDftP6U/3zRtaKDu0bq0jvn1WCQ8zXxFQ8AWyKZwyFS+w== + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== + dependencies: + "@babel/highlight" "^7.8.3" + +"@babel/generator@^7.4.0", "@babel/generator@^7.9.0": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce" + integrity sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA== + dependencies: + "@babel/types" "^7.9.0" + jsesc "^2.5.1" + lodash "^4.17.13" + source-map "^0.5.0" + +"@babel/helper-function-name@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== + dependencies: + "@babel/helper-get-function-arity" "^7.8.3" + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + +"@babel/helper-get-function-arity@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-split-export-declaration@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-validator-identifier@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" + integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== + +"@babel/highlight@^7.8.3": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + chalk "^2.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.4.3", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" + integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== + +"@babel/template@^7.4.0", "@babel/template@^7.8.3": + 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/traverse@^7.4.3": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" + integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.0" + "@babel/helper-function-name" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/parser" "^7.9.0" + "@babel/types" "^7.9.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + +"@babel/types@^7.4.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": + version "7.9.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" + integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng== + dependencies: + "@babel/helper-validator-identifier" "^7.9.0" + lodash "^4.17.13" + to-fast-properties "^2.0.0" + +"@npmcli/ci-detect@^1.0.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.2.0.tgz#0df142a1ac3bba6cbf2e9da1a6994cd898e32c95" + integrity sha512-JtktVH7ASBVIWsQTFlFpeOzhBJskvoBCTfeeRhhZy7ybATcUvwiwotZ8j5rkqUUyB69lIy/AvboiiiGBjYBKBA== + +"@npmcli/git@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.0.1.tgz#d7ecaa9c945de6bb1af5a7e6ea634771193c168b" + integrity sha512-hVatexiBtx71F01Ars38Hr5AFUGmJgHAfQtRlO5fJlnAawRGSXwEFgjB5i3XdUUmElZU/RXy7fefN02dZKxgPw== + dependencies: + "@npmcli/promise-spawn" "^1.1.0" + mkdirp "^1.0.3" + npm-pick-manifest "^6.0.0" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + unique-filename "^1.1.1" + which "^2.0.2" + +"@npmcli/installed-package-contents@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.5.tgz#cc78565e55d9f14d46acf46a96f70934e516fa3d" + integrity sha512-aKIwguaaqb6ViwSOFytniGvLPb9SMCUm39TgM3SfUo7n0TxUMbwoXfpwyvQ4blm10lzbAwTsvjr7QZ85LvTi4A== + dependencies: + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + read-package-json-fast "^1.1.1" + readdir-scoped-modules "^1.1.0" + +"@npmcli/promise-spawn@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.1.0.tgz#660009a5c54209142ec7c469c190d212834b6087" + integrity sha512-FwbuYN9KXBkloLeIR3xRgI8dyOdfK/KzaJlChszNuwmUXD1lHXfLlSeo4n4KrKt2udIK9K9/TzlnyCA3ubM2fA== + dependencies: + infer-owner "^1.0.4" + +"@rollup/plugin-commonjs@^11.0.2": + version "11.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.2.tgz#837cc6950752327cb90177b608f0928a4e60b582" + integrity sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g== + dependencies: + "@rollup/pluginutils" "^3.0.0" + estree-walker "^1.0.1" + is-reference "^1.1.2" + magic-string "^0.25.2" + resolve "^1.11.0" + +"@rollup/plugin-json@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.0.2.tgz#482185ee36ac7dd21c346e2dbcc22ffed0c6f2d6" + integrity sha512-t4zJMc98BdH42mBuzjhQA7dKh0t4vMJlUka6Fz0c+iO5IVnWaEMiYBy1uBj9ruHZzXBW23IPDGL9oCzBkQ9Udg== + dependencies: + "@rollup/pluginutils" "^3.0.4" + +"@rollup/plugin-node-resolve@^7.1.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.1.tgz#8c6e59c4b28baf9d223028d0e450e06a485bb2b7" + integrity sha512-14ddhD7TnemeHE97a4rLOhobfYvUVcaYuqTnL8Ti7Jxi9V9Jr5LY7Gko4HZ5k4h4vqQM0gBQt6tsp9xXW94WPA== + dependencies: + "@rollup/pluginutils" "^3.0.6" + "@types/resolve" "0.0.8" + builtin-modules "^3.1.0" + is-module "^1.0.0" + resolve "^1.14.2" + +"@rollup/pluginutils@^3.0.0", "@rollup/pluginutils@^3.0.1", "@rollup/pluginutils@^3.0.4", "@rollup/pluginutils@^3.0.6": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.0.8.tgz#4e94d128d94b90699e517ef045422960d18c8fde" + integrity sha512-rYGeAc4sxcZ+kPG/Tw4/fwJODC3IXHYDH4qusdN/b6aLw5LPUbzpecYbEJh4sVQGPFJxd2dBU4kc1H3oy9/bnw== + dependencies: + estree-walker "^1.0.1" + +"@schematics/angular@9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-9.1.0.tgz#fc0ad9099d3c3be3044d6b3f260cac6eb9f3e564" + integrity sha512-qkehaITQ1S1udfnnBY5CXGWnk1iVFI8cZayjLUlRfD5w+6v9if3VIuqPssX96MqvkbjyRu1N214+ieaawzLmuA== + dependencies: + "@angular-devkit/core" "9.1.0" + "@angular-devkit/schematics" "9.1.0" + +"@schematics/update@0.901.0": + version "0.901.0" + resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.901.0.tgz#3e08231354f2c414c7d5b3bde1d9f7c08c664a74" + integrity sha512-u2VESL1dgOSGZK/wcWEz0WcCU/yv764zhzCQerCwUtbV1CISSSDZ6x+prVYDXOdxWBGtDos2MbCF3GEJJI1T+w== + dependencies: + "@angular-devkit/core" "9.1.0" + "@angular-devkit/schematics" "9.1.0" + "@yarnpkg/lockfile" "1.1.0" + ini "1.3.5" + npm-package-arg "^8.0.0" + pacote "11.1.4" + rxjs "6.5.4" + semver "7.1.3" + semver-intersect "1.4.0" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@tootallnate/once@1": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.0.0.tgz#9c13c2574c92d4503b005feca8f2e16cc1611506" + integrity sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA== + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/estree@0.0.39": + version "0.0.39" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== + +"@types/execa@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/execa/-/execa-2.0.0.tgz#4dd5523520c51834bf8d0c280f460814e5238281" + integrity sha512-aBnkJ0r3khaZkHzu9pDZeWXrDg1N/ZtDGRQkK+KIqNVvvTvW+URXMUHQQCQMYdb2GPrcwu9Fq6l9iiT+pirIbg== + dependencies: + execa "*" + +"@types/fs-extra@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.0.tgz#1114834b53c3914806cd03b3304b37b3bd221a4d" + integrity sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg== + dependencies: + "@types/node" "*" + +"@types/jasmine@*", "@types/jasmine@~3.5.0": + version "3.5.10" + resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.5.10.tgz#a1a41012012b5da9d4b205ba9eba58f6cce2ab7b" + integrity sha512-3F8qpwBAiVc5+HPJeXJpbrl+XjawGmciN5LgiO7Gv1pl1RHtjoMNqZpqEksaPJW05ViKe8snYInRs6xB25Xdew== + +"@types/jasminewd2@~2.0.3": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@types/jasminewd2/-/jasminewd2-2.0.8.tgz#67afe5098d5ef2386073a7b7384b69a840dfe93b" + integrity sha512-d9p31r7Nxk0ZH0U39PTH0hiDlJ+qNVGjlt1ucOoTUptxb2v+Y5VMnsxfwN+i3hK4yQnqBi3FMmoMFcd1JHDxdg== + dependencies: + "@types/jasmine" "*" + +"@types/node@*": + version "13.9.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.5.tgz#59738bf30b31aea1faa2df7f4a5f55613750cf00" + integrity sha512-hkzMMD3xu6BrJpGVLeQ3htQQNAcOrJjX7WFmtK8zWQpz2UJf13LCFF2ALA7c9OVdvc2vQJeDdjfR35M0sBCxvw== + +"@types/node@^12.11.1": + version "12.12.32" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.32.tgz#0ccc836d273e8a3cddf568daf22729cfa57c1925" + integrity sha512-44/reuCrwiQEsXud3I5X3sqI5jIXAmHB5xoiyKUw965olNHF3IWKjBLKK3F9LOSUZmK+oDt8jmyO637iX+hMgA== + +"@types/normalize-package-data@^2.4.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== + +"@types/q@^0.0.32": + version "0.0.32" + resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" + integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= + +"@types/resolve@0.0.8": + version "0.0.8" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== + dependencies: + "@types/node" "*" + +"@types/selenium-webdriver@^3.0.0": + version "3.0.17" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz#50bea0c3c2acc31c959c5b1e747798b3b3d06d4b" + integrity sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw== + +"@yarnpkg/lockfile@1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +accepts@~1.3.4: + version "1.3.7" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" + integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== + dependencies: + mime-types "~2.1.24" + negotiator "0.6.2" + +adm-zip@^0.4.9: + version "0.4.14" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9" + integrity sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g== + +after@0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" + integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= + +agent-base@6: + version "6.0.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.0.tgz#5d0101f19bbfaed39980b22ae866de153b93f09a" + integrity sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw== + dependencies: + debug "4" + +agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + +agentkeepalive@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.0.tgz#a48e040ed16745dd29ce923675f60c9c90f39ee0" + integrity sha512-CW/n1wxF8RpEuuiq6Vbn9S8m0VSYDMnZESqaJ6F2cWN9fY8rei2qaxweIaRgq+ek8TqfoFIsUjaGNKGGEHElSg== + dependencies: + debug "^4.1.0" + depd "^1.1.2" + humanize-ms "^1.2.1" + +aggregate-error@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@6.12.0, ajv@^6.10.2, ajv@^6.5.5: + version "6.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-align@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== + dependencies: + string-width "^3.0.0" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-escapes@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== + dependencies: + type-fest "^0.11.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + 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== + +append-transform@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" + integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== + dependencies: + default-require-extensions "^2.0.0" + +aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +aria-query@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= + dependencies: + ast-types-flow "0.0.7" + commander "^2.11.0" + +array-union@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= + +arraybuffer.slice@~0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" + integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== + +arrify@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= + +asap@^2.0.0, asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +ast-types-flow@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= + +async-limiter@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" + integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== + +async@^2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" + integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +atob@^2.1.2: + version "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.6.5: + version "9.7.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.5.tgz#8df10b9ff9b5814a8d411a5cfbab9c793c392376" + integrity sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg== + dependencies: + browserslist "^4.11.0" + caniuse-lite "^1.0.30001036" + chalk "^2.4.2" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.27" + postcss-value-parser "^4.0.3" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== + +axobject-query@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" + integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== + dependencies: + ast-types-flow "0.0.7" + +backo2@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" + integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-arraybuffer@0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" + integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= + +base64id@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" + integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +better-assert@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" + integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= + dependencies: + callsite "1.0.0" + +binary-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== + +blob@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" + integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== + +blocking-proxy@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" + integrity sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA== + dependencies: + minimist "^1.2.0" + +bluebird@^3.3.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +body-parser@^1.16.1: + version "1.19.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" + integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== + dependencies: + bytes "3.1.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.7.2" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.7.0" + raw-body "2.4.0" + type-is "~1.6.17" + +boxen@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^5.3.1" + chalk "^3.0.0" + cli-boxes "^2.2.0" + string-width "^4.1.0" + term-size "^2.1.0" + type-fest "^0.8.1" + widest-line "^3.1.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +browserslist@^4.11.0, browserslist@^4.7.0: + version "4.11.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.0.tgz#aef4357b10a8abda00f97aac7cd587b2082ba1ad" + integrity sha512-WqEC7Yr5wUH5sg6ruR++v2SGOQYpyUdYYd4tZoAq1F7y+QXoLoYGXVbxhtaIqWmAJjtNTRjVD3HuJc1OXTel2A== + dependencies: + caniuse-lite "^1.0.30001035" + electron-to-chromium "^1.3.380" + node-releases "^1.1.52" + pkg-up "^3.1.0" + +browserstack@^1.5.1: + version "1.5.3" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" + integrity sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg== + dependencies: + https-proxy-agent "^2.2.1" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +builtin-modules@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= + +builtin-modules@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== + +builtins@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= + +bytes@3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" + integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== + +cacache@^15.0.0: + version "15.0.0" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.0.tgz#133b59edbd2a37ea8ef2d54964c6f247e47e5059" + integrity sha512-L0JpXHhplbJSiDGzyJJnJCTL7er7NzbBgxzVqLswEb4bO91Zbv17OUMuUeu/q0ZwKn3V+1HM4wb9tO4eVE/K8g== + dependencies: + chownr "^1.1.2" + fs-minipass "^2.0.0" + glob "^7.1.4" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.1.1" + minipass-collect "^1.0.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + mkdirp "^1.0.3" + move-concurrently "^1.0.1" + p-map "^3.0.0" + promise-inflight "^1.0.1" + rimraf "^2.7.1" + ssri "^8.0.0" + tar "^6.0.1" + unique-filename "^1.1.1" + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +callsite@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" + integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= + +camelcase@^5.0.0, camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001036: + version "1.0.30001038" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz#44da3cbca2ab6cb6aa83d1be5d324e17f141caff" + integrity sha512-zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ== + +canonical-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/canonical-path/-/canonical-path-1.0.0.tgz#fcb470c23958def85081856be7a86e904f180d1d" + integrity sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.1.1, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +"chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.3.0" + optionalDependencies: + fsevents "~2.1.2" + +chownr@^1.1.2, chownr@^1.1.3, chownr@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +clean-css@^4.1.11: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== + dependencies: + source-map "~0.6.0" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" + integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" + integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== + +cli-width@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= + +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + +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== + dependencies: + app-root-path "^2.2.1" + 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" + semver-dsl "^1.0.1" + source-map "^0.5.7" + sprintf-js "^1.1.2" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= + +colors@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^2.11.0, commander@^2.12.1, commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +commander@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== + +compare-versions@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" + integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== + +component-bind@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" + integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= + +component-emitter@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= + +component-inherit@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" + integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +configstore@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== + dependencies: + dot-prop "^5.2.0" + graceful-fs "^4.1.2" + make-dir "^3.0.0" + unique-string "^2.0.0" + write-file-atomic "^3.0.0" + xdg-basedir "^4.0.0" + +connect@^3.6.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" + integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== + dependencies: + debug "2.6.9" + finalhandler "1.1.2" + parseurl "~1.3.3" + utils-merge "1.0.1" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== + +convert-source-map@^1.5.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== + dependencies: + safe-buffer "~5.1.1" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cross-spawn@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +crypto-random-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== + +css-parse@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" + integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= + dependencies: + css "^2.0.0" + +css-selector-tokenizer@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" + integrity sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw== + dependencies: + cssesc "^3.0.0" + fastparse "^1.1.2" + regexpu-core "^4.6.0" + +css@^2.0.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== + dependencies: + inherits "^2.0.3" + source-map "^0.6.1" + source-map-resolve "^0.5.2" + urix "^0.1.0" + +cssauron@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" + integrity sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg= + dependencies: + through X.X.X + +cssesc@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== + +cuint@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= + +custom-event@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" + integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= + +damerau-levenshtein@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-format@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" + integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@4.1.1, debug@^4.1.0, 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.2.6: + 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@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== + dependencies: + ms "2.0.0" + +debuglog@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" + integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= + dependencies: + strip-bom "^3.0.0" + +defaults@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= + dependencies: + clone "^1.0.2" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-properties@^1.1.2, define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +del@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +depd@^1.1.2, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +dependency-graph@^0.7.2: + version "0.7.2" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.7.2.tgz#91db9de6eb72699209d88aea4c1fd5221cac1c49" + integrity sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ== + +dezalgo@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= + dependencies: + asap "^2.0.0" + wrappy "1" + +di@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" + integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dom-serialize@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" + integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= + dependencies: + custom-event "~1.0.0" + ent "~2.2.0" + extend "^3.0.0" + void-elements "^2.0.0" + +dot-prop@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== + dependencies: + is-obj "^2.0.0" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ee-first@1.1.1: + version "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.380: + version "1.3.390" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.390.tgz#a49e67dea22e52ea8027c475dd5447b1c00b1d4e" + integrity sha512-4RvbM5x+002gKI8sltkqWEk5pptn0UnzekUx8RTThAMPDSb8jjpm6SwGiSnEve7f85biyZl8DMXaipaCxDjXag== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +encoding@^0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +engine.io-client@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" + integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== + dependencies: + component-emitter "1.2.1" + component-inherit "0.0.3" + debug "~3.1.0" + engine.io-parser "~2.1.1" + has-cors "1.1.0" + indexof "0.0.1" + parseqs "0.0.5" + parseuri "0.0.5" + ws "~3.3.1" + xmlhttprequest-ssl "~1.5.4" + yeast "0.1.2" + +engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: + version "2.1.3" + resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" + integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== + dependencies: + after "0.8.2" + arraybuffer.slice "~0.0.7" + base64-arraybuffer "0.1.5" + blob "0.0.5" + has-binary2 "~1.0.2" + +engine.io@~3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" + integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== + dependencies: + accepts "~1.3.4" + base64id "1.0.0" + cookie "0.3.1" + debug "~3.1.0" + engine.io-parser "~2.1.0" + ws "~3.3.1" + +ent@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" + integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= + +err-code@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= + +errno@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== + dependencies: + prr "~1.0.1" + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.17.0-next.1: + version "1.17.5" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.5" + is-regex "^1.0.5" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.1" + string.prototype.trimright "^2.1.1" + +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + +escape-goat@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estree-walker@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== + +eventemitter3@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" + integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== + +execa@*, execa@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.0.tgz#7f37d6ec17f09e6b8fc53288611695b6d12b9daf" + integrity sha512-JbDUxwV3BoT5ZVXQrSVbAiaXhXUkIwvbhPIwZ0N13kX+5yCzOhUNdocxB/UQRuYOHRYYwAxKYwJYc0T4D12pDA== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= + +extend@^3.0.0, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== + +fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fastparse@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +fileset@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" + integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= + dependencies: + glob "^7.0.3" + minimatch "^3.0.3" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" + integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.3" + statuses "~1.5.0" + unpipe "~1.0.0" + +find-parent-dir@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +follow-redirects@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" + integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== + dependencies: + debug "^3.0.0" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fs-extra@4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" + integrity sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s= + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" + integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs-minipass@^2.0.0, fs-minipass@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== + dependencies: + minipass "^3.0.0" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +fsevents@~2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== + +get-caller-file@^2.0.1: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.0.0, get-stream@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" + integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== + dependencies: + ini "^1.3.5" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globby@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== + dependencies: + ajv "^6.5.5" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-binary2@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" + integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== + dependencies: + isarray "2.0.1" + +has-cors@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" + integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== + +has-yarn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== + +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +hosted-git-info@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" + integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ== + dependencies: + lru-cache "^5.1.1" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-cache-semantics@^4.0.0, http-cache-semantics@^4.0.4: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +http-errors@1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" + integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +http-proxy-agent@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== + dependencies: + "@tootallnate/once" "1" + agent-base "6" + debug "4" + +http-proxy@^1.13.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" + integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== + dependencies: + eventemitter3 "^4.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^2.2.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + +https-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= + dependencies: + ms "^2.0.0" + +iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= + +ignore-walk@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== + dependencies: + minimatch "^3.0.4" + +image-size@~0.5.0: + version "0.5.5" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= + +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +indexof@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= + +infer-owner@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + +ini@1.3.5, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +injection-js@^2.2.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/injection-js/-/injection-js-2.3.0.tgz#56d807282dfaf2f9663f45373c4206d7793c5dd6" + integrity sha512-rhS6E5jv603kbaO72ylOt0hGF1LT03oqQ4GU5KOO0qSaRbIWmdUCHjXq+VT79jL6/NmXtw9ccfK6dh/CzjoYjA== + +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" + +ip@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-callable@^1.1.4, is-callable@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-date-object@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + +is-docker@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" + integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.1.tgz#679afef819347a72584617fd19497f010b8ed35f" + integrity sha512-oiEcGoQbGc+3/iijAijrK2qFpkNoNjsHOm/5V5iaeydyrS/hnwaRCEgH5cpW0P3T1lSjV5piB7S5b5lEugNLhg== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-lambda@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= + +is-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= + +is-npm@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= + +is-path-in-cwd@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= + dependencies: + path-is-inside "^1.0.1" + +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + +is-promise@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= + +is-reference@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" + integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw== + dependencies: + "@types/estree" "0.0.39" + +is-regex@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== + dependencies: + has "^1.0.3" + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-symbol@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + dependencies: + has-symbols "^1.0.1" + +is-typedarray@^1.0.0, is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +is-wsl@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" + integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== + +is-yarn-global@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== + +isarray@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" + integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isbinaryfile@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== + dependencies: + buffer-alloc "^1.2.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +istanbul-api@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.6.tgz#d61702a9d1c66ad89d92e66d401e16b0bda4a35f" + integrity sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA== + dependencies: + async "^2.6.2" + compare-versions "^3.4.0" + fileset "^2.0.3" + istanbul-lib-coverage "^2.0.5" + istanbul-lib-hook "^2.0.7" + istanbul-lib-instrument "^3.3.0" + istanbul-lib-report "^2.0.8" + istanbul-lib-source-maps "^3.0.6" + istanbul-reports "^2.2.4" + js-yaml "^3.13.1" + make-dir "^2.1.0" + minimatch "^3.0.4" + once "^1.4.0" + +istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== + +istanbul-lib-hook@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133" + integrity sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== + dependencies: + append-transform "^1.0.0" + +istanbul-lib-instrument@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" + integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== + dependencies: + "@babel/generator" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + istanbul-lib-coverage "^2.0.5" + semver "^6.0.0" + +istanbul-lib-report@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" + integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== + dependencies: + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + supports-color "^6.1.0" + +istanbul-lib-source-maps@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" + integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + rimraf "^2.6.3" + source-map "^0.6.1" + +istanbul-reports@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" + integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== + dependencies: + html-escaper "^2.0.0" + +jasmine-core@^3.5.0, 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-core@~2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" + integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= + +jasmine-spec-reporter@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz#1d632aec0341670ad324f92ba84b4b32b35e9e22" + integrity sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg== + dependencies: + colors "1.1.2" + +jasmine@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" + integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= + dependencies: + exit "^0.1.2" + glob "^7.0.6" + jasmine-core "~2.8.0" + +jasminewd2@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" + integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@^3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +jsesc@^2.5.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-parse-even-better-errors@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.2.0.tgz#304d29aa54bb01156a1328c454034ff0ac8a7bf4" + integrity sha512-2tLgY7LRNZ9Hd6gmCuBG5/OjRHQpSgJQqJoYyLLOhUgn8LdOYrjaZLcxkWnDads+AD/haWWioPNziXQcgvQJ/g== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jszip@^3.1.3: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" + integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + set-immediate-shim "~1.0.1" + +karma-chrome-launcher@~3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz#805a586799a4d05f4e54f72a204979f3f3066738" + integrity sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg== + dependencies: + which "^1.2.1" + +karma-coverage-istanbul-reporter@~2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.1.1.tgz#37a775fbfbb3cbe98cebf19605c94c6277c3b88a" + integrity sha512-CH8lTi8+kKXGvrhy94+EkEMldLCiUA0xMOiL31vvli9qK0T+qcXJAwWBRVJWnVWxYkTmyWar8lPz63dxX6/z1A== + dependencies: + istanbul-api "^2.1.6" + minimatch "^3.0.4" + +karma-jasmine-html-reporter@^1.4.2: + version "1.5.3" + resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.5.3.tgz#c724078436ed7b7d17a47e79164af36eed2d2713" + integrity sha512-ci0VrjuCaFj+9d1tYlTE3KIPUCp0rz874zWWU3JgCMqGIyw5ke+BXWFPOAGAqUdCJcrMwneyvp1zFXA74MiPUA== + +karma-jasmine@~3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-3.0.3.tgz#751ae15d84d16e9148d0af42787fc12f5959f66d" + integrity sha512-80iBR8/hLFY2Uw3S2GG6EndWtMCGMJjrCYNwYROWsJFVTjWrRSsLqcA2ye+U3ygW5sjOQo8f+78L8cGUxjC/+A== + dependencies: + jasmine-core "^3.5.0" + +karma@~4.4.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/karma/-/karma-4.4.1.tgz#6d9aaab037a31136dc074002620ee11e8c2e32ab" + integrity sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A== + dependencies: + bluebird "^3.3.0" + body-parser "^1.16.1" + braces "^3.0.2" + chokidar "^3.0.0" + colors "^1.1.0" + connect "^3.6.0" + di "^0.0.1" + dom-serialize "^2.2.0" + flatted "^2.0.0" + glob "^7.1.1" + graceful-fs "^4.1.2" + http-proxy "^1.13.0" + isbinaryfile "^3.0.0" + lodash "^4.17.14" + log4js "^4.0.0" + mime "^2.3.1" + minimatch "^3.0.2" + optimist "^0.6.1" + qjobs "^1.1.4" + range-parser "^1.2.0" + rimraf "^2.6.0" + safe-buffer "^5.0.1" + socket.io "2.1.1" + source-map "^0.6.1" + tmp "0.0.33" + useragent "2.3.0" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +latest-version@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== + dependencies: + package-json "^6.3.0" + +less@^3.10.3: + version "3.11.1" + resolved "https://registry.yarnpkg.com/less/-/less-3.11.1.tgz#c6bf08e39e02404fe6b307a3dfffafdc55bd36e2" + integrity sha512-tlWX341RECuTOvoDIvtFqXsKj072hm3+9ymRBe76/mD6O5ZZecnlAOVDlWAleF2+aohFrxNidXhv2773f6kY7g== + dependencies: + clone "^2.1.2" + tslib "^1.10.0" + optionalDependencies: + errno "^0.1.1" + graceful-fs "^4.1.2" + image-size "~0.5.0" + mime "^1.4.1" + mkdirp "^0.5.0" + promise "^7.1.1" + request "^2.83.0" + source-map "~0.6.0" + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + +lines-and-columns@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +log-symbols@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== + dependencies: + chalk "^2.4.2" + +log4js@^4.0.0: + version "4.5.1" + resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" + integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== + dependencies: + date-format "^2.0.0" + debug "^4.1.1" + flatted "^2.0.0" + rfdc "^1.1.4" + streamroller "^1.0.6" + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@4.1.x: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +magic-string@0.25.7, magic-string@^0.25.0, magic-string@^0.25.2: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + +make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +make-dir@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" + integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== + dependencies: + semver "^6.0.0" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +make-fetch-happen@^8.0.2: + version "8.0.4" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.4.tgz#d3451baf5b43d6230c4eea7009c5aa6b6bccf9d4" + integrity sha512-hIFoqGq1db0QMiy/Atr/pI1Rs4rDV+ZdGSey2SQyF3KK3u1z4aj9mS5UdNnZkdQpA+H3pGn0J3KlEwsi2x4EqA== + dependencies: + agentkeepalive "^4.1.0" + cacache "^15.0.0" + http-cache-semantics "^4.0.4" + http-proxy-agent "^4.0.1" + https-proxy-agent "^5.0.0" + is-lambda "^1.0.1" + lru-cache "^5.1.1" + minipass "^3.0.0" + minipass-collect "^1.0.2" + minipass-fetch "^1.1.2" + minipass-flush "^1.0.5" + minipass-pipeline "^1.2.2" + promise-retry "^1.1.1" + socks-proxy-agent "^5.0.0" + ssri "^8.0.0" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mime-db@1.43.0: + version "1.43.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== + +mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: + version "2.1.26" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== + dependencies: + mime-db "1.43.0" + +mime@^1.4.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@^2.3.1: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= + +minipass-collect@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== + dependencies: + minipass "^3.0.0" + +minipass-fetch@^1.1.2, minipass-fetch@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.2.1.tgz#1b97ecb559be56b09812d45b2e9509f1f59ece2f" + integrity sha512-ssHt0dkljEDaKmTgQ04DQgx2ag6G2gMPxA5hpcsoeTbfDgRf2fC2gNSRc6kISjD7ckCpHwwQvXxuTBK8402fXg== + dependencies: + minipass "^3.1.0" + minipass-pipeline "^1.2.2" + minipass-sized "^1.0.3" + minizlib "^2.0.0" + optionalDependencies: + encoding "^0.1.12" + +minipass-flush@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== + dependencies: + minipass "^3.0.0" + +minipass-json-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== + dependencies: + jsonparse "^1.3.1" + minipass "^3.0.0" + +minipass-pipeline@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" + integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== + dependencies: + minipass "^3.0.0" + +minipass-sized@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== + dependencies: + minipass "^3.0.0" + +minipass@^3.0.0, minipass@^3.0.1, minipass@^3.1.0, minipass@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" + integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== + dependencies: + yallist "^4.0.0" + +minizlib@^2.0.0, minizlib@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" + integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA== + dependencies: + minipass "^3.0.0" + yallist "^4.0.0" + +mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.x: + version "0.5.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" + integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== + dependencies: + minimist "^1.2.5" + +mkdirp@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" + integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +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== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +negotiator@0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" + integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== + +ng-packagr@^9.0.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/ng-packagr/-/ng-packagr-9.1.0.tgz#65380bd8f05c62ee3c5f42069404fe1ca492498c" + integrity sha512-783WCTa+qQl8QQefQ3n8cDzYF3PpsQUnY87SwuXIxaJ1p8NjBq/3vCZmTiI3AXzDZFhRacbCqghtaJGU1qcFrQ== + dependencies: + "@rollup/plugin-commonjs" "^11.0.2" + "@rollup/plugin-json" "^4.0.0" + "@rollup/plugin-node-resolve" "^7.1.0" + ajv "^6.10.2" + autoprefixer "^9.6.5" + browserslist "^4.7.0" + chalk "^3.0.0" + chokidar "^3.2.1" + clean-css "^4.1.11" + commander "^4.0.0" + fs-extra "^9.0.0" + glob "^7.1.2" + injection-js "^2.2.1" + less "^3.10.3" + node-sass-tilde-importer "^1.0.0" + postcss "^7.0.18" + postcss-url "^8.0.0" + read-pkg-up "^5.0.0" + rimraf "^3.0.0" + rollup "2.2.0" + rollup-plugin-sourcemaps "^0.5.0" + rxjs "^6.5.0" + sass "^1.23.0" + stylus "^0.54.7" + terser "^4.3.8" + update-notifier "^4.0.0" + +node-releases@^1.1.52: + version "1.1.53" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" + integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== + +node-sass-tilde-importer@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz#1a15105c153f648323b4347693fdb0f331bad1ce" + integrity sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg== + dependencies: + find-parent-dir "^0.3.0" + +normalize-package-data@^2.0.0, normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + +npm-bundled@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" + +npm-install-checks@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== + dependencies: + semver "^7.1.1" + +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +npm-package-arg@8.0.1, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.0.1.tgz#9d76f8d7667b2373ffda60bb801a27ef71e3e270" + integrity sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ== + dependencies: + hosted-git-info "^3.0.2" + semver "^7.0.0" + validate-npm-package-name "^3.0.0" + +npm-packlist@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.1.1.tgz#08806a1df79acdc43d02d20c83a3d5472d96c90c" + integrity sha512-95TSDvGwujIhqfSpIiRRLodEF+y6mJMopuZdahoGzqtRDFZXGav46S0p6ngeWaiAkb5R72w6eVARhzej0HvZeQ== + dependencies: + glob "^7.1.6" + ignore-walk "^3.0.3" + npm-bundled "^1.1.1" + npm-normalize-package-bin "^1.0.1" + +npm-pick-manifest@6.0.0, npm-pick-manifest@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.0.0.tgz#bfde7abe95f2670aed1629a3c18245ccb3cc2eb8" + integrity sha512-PdJpXMvjqt4nftNEDpCgjBUF8yI3Q3MyuAmVB9nemnnCg32F4BPL/JFBfdj8DubgHCYUFQhtLWmBPvdsFtjWMg== + dependencies: + npm-install-checks "^4.0.0" + npm-package-arg "^8.0.0" + semver "^7.0.0" + +npm-registry-fetch@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-8.0.0.tgz#65bb51dd2b9634b8363019aac9c76c003e5c5eaf" + integrity sha512-975WwLvZjX97y9UWWQ8nAyr7bw02s9xKPHqvEm5T900LQsB1HXb8Gb9ebYtCBLSX+K8gSOrO5KS/9yV/naLZmQ== + dependencies: + "@npmcli/ci-detect" "^1.0.0" + lru-cache "^5.1.1" + make-fetch-happen "^8.0.2" + minipass "^3.0.0" + minipass-fetch "^1.1.2" + minipass-json-stream "^1.0.1" + minizlib "^2.0.0" + npm-package-arg "^8.0.0" + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +object-component@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" + integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= + +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object.assign@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== + dependencies: + mimic-fn "^2.1.0" + +open@7.0.3: + version "7.0.3" + resolved "https://registry.yarnpkg.com/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48" + integrity sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA== + dependencies: + is-docker "^2.0.0" + is-wsl "^2.1.1" + +optimist@^0.6.1, optimist@~0.6.0: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +ora@4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" + integrity sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg== + dependencies: + chalk "^3.0.0" + cli-cursor "^3.1.0" + cli-spinners "^2.2.0" + is-interactive "^1.0.0" + log-symbols "^3.0.0" + mute-stream "0.0.8" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-map@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-json@^6.3.0: + version "6.5.0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== + dependencies: + got "^9.6.0" + registry-auth-token "^4.0.0" + registry-url "^5.0.0" + semver "^6.2.0" + +pacote@11.1.4: + version "11.1.4" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.1.4.tgz#5529a453c59881b7f059da8af6903b0f79c124b2" + integrity sha512-eUGJvSSpWFZKn3z8gig/HgnBmUl6gIWByIIaHzSyEr3tOWX0w8tFEADXtpu8HGv5E0ShCeTP6enRq8iHKCHSvw== + dependencies: + "@npmcli/git" "^2.0.1" + "@npmcli/installed-package-contents" "^1.0.5" + "@npmcli/promise-spawn" "^1.1.0" + cacache "^15.0.0" + chownr "^1.1.4" + fs-minipass "^2.1.0" + infer-owner "^1.0.4" + lru-cache "^5.1.1" + minipass "^3.0.1" + minipass-fetch "^1.2.1" + mkdirp "^1.0.3" + npm-package-arg "^8.0.1" + npm-packlist "^2.1.0" + npm-pick-manifest "^6.0.0" + npm-registry-fetch "^8.0.0" + promise-inflight "^1.0.1" + promise-retry "^1.1.1" + read-package-json-fast "^1.1.3" + rimraf "^2.7.1" + semver "^7.1.3" + ssri "^8.0.0" + tar "^6.0.1" + which "^2.0.2" + +pako@~1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + +parse-json@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + lines-and-columns "^1.1.6" + +parseqs@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" + integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= + dependencies: + better-assert "~1.0.0" + +parseuri@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" + integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= + dependencies: + better-assert "~1.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +picomatch@^2.0.4, picomatch@^2.0.7: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +pkg-up@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== + dependencies: + find-up "^3.0.0" + +postcss-url@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-8.0.0.tgz#7b10059bd12929cdbb1971c60f61a0e5af86b4ca" + integrity sha512-E2cbOQ5aii2zNHh8F6fk1cxls7QVFZjLPSrqvmiza8OuXLzIpErij8BDS5Y3STPfJgpIMNCPEr8JlKQWEoozUw== + dependencies: + mime "^2.3.1" + minimatch "^3.0.4" + mkdirp "^0.5.0" + postcss "^7.0.2" + xxhashjs "^0.2.1" + +postcss-value-parser@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d" + integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg== + +postcss@^7.0.18, postcss@^7.0.2, postcss@^7.0.27: + version "7.0.27" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" + integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= + +promise-retry@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= + dependencies: + err-code "^1.0.0" + retry "^0.10.0" + +promise@^7.1.1: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== + dependencies: + asap "~2.0.3" + +protractor@~5.4.3: + version "5.4.3" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.3.tgz#35f050741e404a45868618ea648745d89af31683" + integrity sha512-7pMAolv8Ah1yJIqaorDTzACtn3gk7BamVKPTeO5lqIGOrfosjPgXFx/z1dqSI+m5EeZc2GMJHPr5DYlodujDNA== + dependencies: + "@types/q" "^0.0.32" + "@types/selenium-webdriver" "^3.0.0" + blocking-proxy "^1.0.0" + browserstack "^1.5.1" + chalk "^1.1.3" + glob "^7.0.3" + jasmine "2.8.0" + jasminewd2 "^2.1.0" + optimist "~0.6.0" + q "1.4.1" + saucelabs "^1.5.0" + selenium-webdriver "3.6.0" + source-map-support "~0.4.0" + webdriver-js-extender "2.1.0" + webdriver-manager "^12.0.6" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +pupa@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" + integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== + dependencies: + escape-goat "^2.0.0" + +q@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= + +q@^1.4.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + +qjobs@^1.1.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" + integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== + +qs@6.7.0: + version "6.7.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" + integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +range-parser@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" + integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== + dependencies: + bytes "3.1.0" + http-errors "1.7.2" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.8: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-package-json-fast@^1.1.1, read-package-json-fast@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-1.1.3.tgz#3b78464ea8f3c4447f3358635390b6946dc0737e" + integrity sha512-MmFqiyfCXV2Dmm4jH24DEGhxdkUDFivJQj4oPZQPOKywxR7HWBE6WnMWDAapfFHi3wm1b+mhR+XHlUH0CL8axg== + dependencies: + json-parse-even-better-errors "^2.0.1" + npm-normalize-package-bin "^1.0.1" + +read-package-json@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== + dependencies: + glob "^7.1.1" + json-parse-better-errors "^1.0.1" + normalize-package-data "^2.0.0" + npm-normalize-package-bin "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.2" + +read-package-tree@5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== + dependencies: + read-package-json "^2.0.0" + readdir-scoped-modules "^1.0.0" + util-promisify "^2.1.0" + +read-pkg-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-5.0.0.tgz#b6a6741cb144ed3610554f40162aa07a6db621b8" + integrity sha512-XBQjqOBtTzyol2CpsQOw8LHV0XbDZVG7xMMjmXAJomlVY03WOBRmYgDJETlvcg0H63AJvPRwT7GFi5rvOzUOKg== + dependencies: + find-up "^3.0.0" + read-pkg "^5.0.0" + +read-pkg@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +"readable-stream@1 || 2", readable-stream@~2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== + dependencies: + debuglog "^1.0.1" + dezalgo "^1.0.0" + graceful-fs "^4.1.2" + once "^1.3.0" + +readdirp@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== + dependencies: + picomatch "^2.0.7" + +reflect-metadata@^0.1.2: + version "0.1.13" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== + dependencies: + regenerate "^1.4.0" + +regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== + +regexpu-core@^4.6.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== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.2.0" + regjsgen "^0.5.1" + regjsparser "^0.6.4" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.2.0" + +registry-auth-token@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" + integrity sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA== + dependencies: + rc "^1.2.8" + +registry-url@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== + dependencies: + rc "^1.2.8" + +regjsgen@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== + +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== + dependencies: + jsesc "~0.5.0" + +request@^2.83.0, request@^2.87.0, request@^2.88.0: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + +resolve@^1.10.0, resolve@^1.11.0, resolve@^1.14.2, resolve@^1.3.2: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + dependencies: + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +retry@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= + +rfdc@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" + integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug== + +rimraf@3.0.2, rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rollup-plugin-sourcemaps@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.5.0.tgz#898e8411c9b5b7b524b4d96c3b41d5c43f9da77e" + integrity sha512-xp2vvRvgnYiXydgf/JFFFgYxrqMaQaOrK/g6yZvgwT9R1TSYjD3HKku1pD7iQNjQHkl5yGpokvJLp7cP/lR+aQ== + dependencies: + "@rollup/pluginutils" "^3.0.1" + source-map-resolve "^0.5.3" + +rollup@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.2.0.tgz#d82cfd6eda6d9561593a7e8a2fc0b72811a89b49" + integrity sha512-iAu/j9/WJ0i+zT0sAMuQnsEbmOKzdQ4Yxu5rbPs9aUCyqveI1Kw3H4Fi9NWfCOpb8luEySD2lDyFWL9CrLE8iw== + optionalDependencies: + fsevents "~2.1.2" + +run-async@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" + integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== + dependencies: + is-promise "^2.1.0" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= + dependencies: + aproba "^1.1.1" + +rxjs@6.5.4, rxjs@^6.5.0, rxjs@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.0" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== + +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" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sass@^1.23.0: + version "1.26.3" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.3.tgz#412df54486143b76b5a65cdf7569e86f44659f46" + integrity sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw== + dependencies: + chokidar ">=2.0.0 <4.0.0" + +saucelabs@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" + integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ== + dependencies: + https-proxy-agent "^2.2.1" + +sax@>=0.6.0, sax@~1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== + +selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: + version "3.6.0" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" + integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q== + dependencies: + jszip "^3.1.3" + rimraf "^2.5.4" + tmp "0.0.30" + xml2js "^0.4.17" + +semver-diff@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== + dependencies: + semver "^6.3.0" + +semver-dsl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/semver-dsl/-/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" + integrity sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA= + dependencies: + semver "^5.3.0" + +semver-intersect@1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/semver-intersect/-/semver-intersect-1.4.0.tgz#bdd9c06bedcdd2fedb8cd352c3c43ee8c61321f3" + integrity sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ== + dependencies: + semver "^5.0.0" + +"semver@2 || 3 || 4 || 5", semver@^5.0.0, semver@^5.3.0, semver@^5.6.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@7.1.3, semver@^7.0.0, semver@^7.1.1, semver@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" + integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== + +semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= + +set-immediate-shim@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== + +socket.io-adapter@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" + integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== + +socket.io-client@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" + integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ== + dependencies: + backo2 "1.0.2" + base64-arraybuffer "0.1.5" + component-bind "1.0.0" + component-emitter "1.2.1" + debug "~3.1.0" + engine.io-client "~3.2.0" + has-binary2 "~1.0.2" + has-cors "1.1.0" + indexof "0.0.1" + object-component "0.0.3" + parseqs "0.0.5" + parseuri "0.0.5" + socket.io-parser "~3.2.0" + to-array "0.1.4" + +socket.io-parser@~3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" + integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA== + dependencies: + component-emitter "1.2.1" + debug "~3.1.0" + isarray "2.0.1" + +socket.io@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" + integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA== + dependencies: + debug "~3.1.0" + engine.io "~3.2.0" + has-binary2 "~1.0.2" + socket.io-adapter "~1.1.0" + socket.io-client "2.1.1" + socket.io-parser "~3.2.0" + +socks-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== + dependencies: + agent-base "6" + debug "4" + socks "^2.3.3" + +socks@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== + dependencies: + ip "1.1.5" + smart-buffer "^4.1.0" + +source-map-resolve@^0.5.2, source-map-resolve@^0.5.3: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.5.6, source-map-support@~0.5.12: + version "0.5.16" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@~0.4.0: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= + +source-map@0.7.3, source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.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== + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +ssri@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" + integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== + dependencies: + minipass "^3.1.1" + +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +streamroller@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" + integrity sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg== + dependencies: + async "^2.6.2" + date-format "^2.0.0" + debug "^3.2.6" + fs-extra "^7.0.1" + lodash "^4.17.14" + +string-width@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string.prototype.trimleft@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" + integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" + integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= + +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" + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== + dependencies: + has-flag "^4.0.0" + +symbol-observable@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +tar@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.1.tgz#7b3bd6c313cb6e0153770108f8d70ac298607efa" + integrity sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q== + dependencies: + chownr "^1.1.3" + fs-minipass "^2.0.0" + minipass "^3.0.0" + minizlib "^2.1.0" + mkdirp "^1.0.3" + yallist "^4.0.0" + +term-size@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" + integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== + +terser@^4.3.8: + version "4.6.7" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" + integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + +through@X.X.X, through@^2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + +tmp@0.0.30: + version "0.0.30" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= + dependencies: + os-tmpdir "~1.0.1" + +tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-array@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" + integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +ts-node@~8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" + integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== + dependencies: + arg "^4.1.0" + diff "^4.0.1" + make-error "^1.1.1" + source-map-support "^0.5.6" + yn "^3.0.0" + +tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== + +tslint@~6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.0.tgz#c6c611b8ba0eed1549bf5a59ba05a7732133d851" + integrity sha512-fXjYd/61vU6da04E505OZQGb2VCN2Mq3doeWcOIryuG+eqdmFUXTYVwdhnbEu2k46LNLgUYt9bI5icQze/j0bQ== + dependencies: + "@babel/code-frame" "^7.0.0" + builtin-modules "^1.1.1" + chalk "^2.3.0" + commander "^2.12.1" + diff "^4.0.1" + glob "^7.1.1" + js-yaml "^3.13.1" + minimatch "^3.0.4" + mkdirp "^0.5.1" + resolve "^1.3.2" + semver "^5.3.0" + tslib "^1.10.0" + tsutils "^2.29.0" + +tsutils@^2.29.0: + version "2.29.0" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== + dependencies: + tslib "^1.8.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +type-fest@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.17: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typedarray-to-buffer@^3.1.5: + version "3.1.5" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== + dependencies: + is-typedarray "^1.0.0" + +typescript@~3.8.3: + version "3.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" + integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== + +ultron@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" + integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== + +unique-filename@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== + dependencies: + imurmurhash "^0.1.4" + +unique-string@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== + dependencies: + crypto-random-string "^2.0.0" + +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== + dependencies: + debug "^3.0.0" + request "^2.88.0" + uuid "^3.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + +update-notifier@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" + integrity sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew== + dependencies: + boxen "^4.2.0" + chalk "^3.0.0" + configstore "^5.0.1" + has-yarn "^2.1.0" + import-lazy "^2.1.0" + is-ci "^2.0.0" + is-installed-globally "^0.3.1" + is-npm "^4.0.0" + is-yarn-global "^0.3.0" + latest-version "^5.0.0" + pupa "^2.0.1" + semver-diff "^3.1.1" + xdg-basedir "^4.0.0" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +useragent@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" + integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== + dependencies: + lru-cache "4.1.x" + tmp "0.0.x" + +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= + +util-promisify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= + dependencies: + object.getownpropertydescriptors "^2.0.3" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= + +uuid@7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.2.tgz#7ff5c203467e91f5e0d85cfcbaaf7d2ebbca9be6" + integrity sha512-vy9V/+pKG+5ZTYKf+VcphF5Oc6EFiu3W8Nv3P3zIh0EqVI80ZxOzuPfe9EHjkFNvf8+xuTHVeei4Drydlx4zjw== + +uuid@^3.0.0, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= + dependencies: + builtins "^1.0.3" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +void-elements@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" + integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= + dependencies: + defaults "^1.0.3" + +webdriver-js-extender@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" + integrity sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ== + dependencies: + "@types/selenium-webdriver" "^3.0.0" + selenium-webdriver "^3.0.1" + +webdriver-manager@^12.0.6: + version "12.1.7" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.7.tgz#ed4eaee8f906b33c146e869b55e850553a1b1162" + integrity sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA== + dependencies: + adm-zip "^0.4.9" + chalk "^1.1.1" + del "^2.2.0" + glob "^7.0.3" + ini "^1.3.4" + minimist "^1.2.0" + q "^1.4.1" + request "^2.87.0" + rimraf "^2.5.2" + semver "^5.3.0" + xml2js "^0.4.17" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= + +which@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1, which@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +write-file-atomic@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== + dependencies: + imurmurhash "^0.1.4" + is-typedarray "^1.0.0" + signal-exit "^3.0.2" + typedarray-to-buffer "^3.1.5" + +ws@~3.3.1: + version "3.3.3" + resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" + integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + ultron "~1.1.0" + +xdg-basedir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== + +xml2js@^0.4.17: + version "0.4.23" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xmlhttprequest-ssl@~1.5.4: + version "1.5.5" + resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" + integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= + +xxhashjs@^0.2.1: + version "0.2.2" + resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" + integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== + dependencies: + cuint "^0.2.2" + +y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@^18.1.0: + version "18.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" + integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== + 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" + integrity sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.0" + +yeast@0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" + integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= + +yn@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 3f26e2b8ac6f7c952c6aced41e99faf82b42df2e Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 30 Mar 2020 14:48:31 +0800 Subject: [PATCH 041/182] Refactor. --- .../src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs index 5f15df99b4..24e7732c9c 100644 --- a/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs +++ b/modules/account/src/Volo.Abp.Account.Web/Pages/Account/Login.cshtml.cs @@ -137,7 +137,7 @@ namespace Volo.Abp.Account.Web.Pages.Account { var schemes = await SchemeProvider.GetAllSchemesAsync(); - var providers = schemes + return schemes .Where(x => x.DisplayName != null || x.Name.Equals(AccountOptions.WindowsAuthenticationSchemeName, StringComparison.OrdinalIgnoreCase)) .Select(x => new ExternalProviderModel { @@ -145,8 +145,6 @@ namespace Volo.Abp.Account.Web.Pages.Account AuthenticationScheme = x.Name }) .ToList(); - - return providers.ToList(); } [UnitOfWork] From 2db48f23ff2bcac2f31fc5e31da130019785cc35 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 30 Mar 2020 10:46:52 +0300 Subject: [PATCH 042/182] chore: add npmignore --- npm/packs/utils/.npmignore | 2 ++ npm/packs/utils/package.json | 21 ++++++++----------- npm/packs/utils/prepublish.js | 1 + .../utils/projects/utils/ng-package.json | 1 + 4 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 npm/packs/utils/.npmignore diff --git a/npm/packs/utils/.npmignore b/npm/packs/utils/.npmignore new file mode 100644 index 0000000000..59aab27092 --- /dev/null +++ b/npm/packs/utils/.npmignore @@ -0,0 +1,2 @@ +**/* +!dist/**/* \ No newline at end of file diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index 5b409db79a..570db9f30b 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -12,18 +12,15 @@ "publishConfig": { "access": "public" }, - "files": [ - "dist/*" - ], - "main": "lib/bundles/abp-utils.umd.js", - "module": "lib/fesm5/abp-utils.js", - "es2015": "lib/fesm2015/abp-utils.js", - "esm5": "lib/esm5/abp-utils.js", - "esm2015": "lib/esm2015/abp-utils.js", - "fesm5": "lib/fesm5/abp-utils.js", - "fesm2015": "lib/fesm2015/abp-utils.js", - "typings": "lib/abp-utils.d.ts", - "metadata": "lib/abp-utils.metadata.json", + "main": "dist/bundles/abp-utils.umd.js", + "module": "dist/fesm5/abp-utils.js", + "es2015": "dist/fesm2015/abp-utils.js", + "esm5": "dist/esm5/abp-utils.js", + "esm2015": "dist/esm2015/abp-utils.js", + "fesm5": "dist/fesm5/abp-utils.js", + "fesm2015": "dist/fesm2015/abp-utils.js", + "typings": "dist/abp-utils.d.ts", + "metadata": "dist/abp-utils.metadata.json", "sideEffects": false, "devDependencies": { "@angular-devkit/build-ng-packagr": "~0.901.0", diff --git a/npm/packs/utils/prepublish.js b/npm/packs/utils/prepublish.js index cf9738b2ef..7612652a52 100644 --- a/npm/packs/utils/prepublish.js +++ b/npm/packs/utils/prepublish.js @@ -6,6 +6,7 @@ fse.copyFileSync('./README.md', './projects/utils/README.md'); try { execa.sync('yarn', ['build'], { stdout: 'inherit' }); + process.exit(0); } catch (error) { console.error(error); process.exit(1); diff --git a/npm/packs/utils/projects/utils/ng-package.json b/npm/packs/utils/projects/utils/ng-package.json index 2071230521..050aa39833 100644 --- a/npm/packs/utils/projects/utils/ng-package.json +++ b/npm/packs/utils/projects/utils/ng-package.json @@ -1,6 +1,7 @@ { "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", "dest": "../../dist", + "deleteDestPath": true, "lib": { "entryFile": "src/public-api.ts" } From 5684159cf3427e616881981d743cb5bf61757658 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 30 Mar 2020 13:43:52 +0300 Subject: [PATCH 043/182] feat(utils): add linked-list.ts --- .../utils/src/lib/linked-list.spec.ts | 1532 +++++++++++++++++ .../projects/utils/src/lib/linked-list.ts | 397 ++++- 2 files changed, 1927 insertions(+), 2 deletions(-) create mode 100644 npm/packs/utils/projects/utils/src/lib/linked-list.spec.ts diff --git a/npm/packs/utils/projects/utils/src/lib/linked-list.spec.ts b/npm/packs/utils/projects/utils/src/lib/linked-list.spec.ts new file mode 100644 index 0000000000..d84ea0de9a --- /dev/null +++ b/npm/packs/utils/projects/utils/src/lib/linked-list.spec.ts @@ -0,0 +1,1532 @@ +import { LinkedList, ListNode } from './linked-list'; + +describe('Linked List (Doubly)', () => { + let list: LinkedList; + + beforeEach(() => (list = new LinkedList())); + + describe('#length', () => { + it('should initially be 0', () => { + expect(list.length).toBe(0); + }); + }); + + describe('#head', () => { + it('should initially be undefined', () => { + expect(list.head).toBeUndefined(); + }); + }); + + describe('#tail', () => { + it('should initially be undefined', () => { + expect(list.tail).toBeUndefined(); + }); + }); + + describe('#add', () => { + describe('#head', () => { + it('should add node to the head of the list', () => { + list.addHead('a'); + + // "a" + + expect(list.head.value).toBe('a'); + expect(list.tail.value).toBe('a'); + }); + + it('should create reference to previous and next nodes', () => { + list.add('a').head(); + list.add('b').head(); + list.add('c').head(); + + // "c" <-> "b" <-> "a" + + expect(list.length).toBe(3); + expect(list.head.value).toBe('c'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('a'); + expect(list.head.previous).toBeUndefined(); + expect(list.tail.value).toBe('a'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('c'); + expect(list.tail.next).toBeUndefined(); + }); + }); + + describe('#tail', () => { + it('should add node to the tail of the list', () => { + list.addTail('a'); + + // "a" + + expect(list.head.value).toBe('a'); + expect(list.tail.value).toBe('a'); + expect(list.tail.next).toBeUndefined(); + }); + + it('should create reference to previous and next nodes', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.head.previous).toBeUndefined(); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + expect(list.tail.next).toBeUndefined(); + }); + }); + + describe('#after', () => { + it('should add a node after node with given value', () => { + list.add('a').tail(); + + // "a" + + list.add('b').after('a'); + list.add('c').after('b'); + + // "a" <-> "b" <-> "c" + + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + + it('should add a node to tail if given value is not found', () => { + list.add('a').tail(); + + // "a" + + list.add('b').after('x'); + + // "a" <-> "b" + + expect(list.length).toBe(2); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.tail.value).toBe('b'); + expect(list.tail.previous.value).toBe('a'); + }); + + it('should be able to receive a custom compareFn', () => { + list.add({ x: 1 }).tail(); + list.add({ x: 2 }).tail(); + list.add({ x: 3 }).tail(); + + // {"x":1} <-> {"x":2} <-> {"x":3} + + list.add({ x: 0 }).after({ x: 1 }, (v1: X, v2: X) => v1.x === v2.x); + + // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":3} + + expect(list.length).toBe(4); + expect(list.head.value.x).toBe(1); + expect(list.head.next.value.x).toBe(0); + expect(list.head.next.next.value.x).toBe(2); + expect(list.head.next.next.next.value.x).toBe(3); + expect(list.tail.value.x).toBe(3); + expect(list.tail.previous.value.x).toBe(2); + expect(list.tail.previous.previous.value.x).toBe(0); + expect(list.tail.previous.previous.previous.value.x).toBe(1); + }); + }); + + describe('#before', () => { + it('should add a node before node with given value', () => { + list.add('c').tail(); + + // "c" + + list.add('b').before('c'); + list.add('a').before('b'); + + // "a" <-> "b" <-> "c" + + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + + it('should add a node to head if given value is not found', () => { + list.add('b').tail(); + + // "a" + + list.add('a').before('x'); + + // "a" <-> "b" + + expect(list.length).toBe(2); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.tail.value).toBe('b'); + expect(list.tail.previous.value).toBe('a'); + }); + + it('should be able to receive a custom compareFn', () => { + list.add({ x: 1 }).tail(); + list.add({ x: 2 }).tail(); + list.add({ x: 3 }).tail(); + + // {"x":1} <-> {"x":2} <-> {"x":3} + + list.add({ x: 0 }).before({ x: 2 }, (v1: X, v2: X) => v1.x === v2.x); + + // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":3} + + expect(list.length).toBe(4); + expect(list.head.value.x).toBe(1); + expect(list.head.next.value.x).toBe(0); + expect(list.head.next.next.value.x).toBe(2); + expect(list.head.next.next.next.value.x).toBe(3); + expect(list.tail.value.x).toBe(3); + expect(list.tail.previous.value.x).toBe(2); + expect(list.tail.previous.previous.value.x).toBe(0); + expect(list.tail.previous.previous.previous.value.x).toBe(1); + }); + }); + + describe('#byIndex', () => { + it('should add a node at given index', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + list.add('x').byIndex(1); + + // "a" <-> "x" <-> "b" <-> "c" + + list.add('y').byIndex(3); + + // "a" <-> "x" <-> "b" <-> "y" <-> "c" + + expect(list.length).toBe(5); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('x'); + expect(list.head.next.next.value).toBe('b'); + expect(list.head.next.next.next.value).toBe('y'); + expect(list.head.next.next.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('y'); + expect(list.tail.previous.previous.value).toBe('b'); + expect(list.tail.previous.previous.previous.value).toBe('x'); + expect(list.tail.previous.previous.previous.previous.value).toBe('a'); + }); + + it('should add a node to head if given index is zero', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + list.add('x').byIndex(0); + + // "x" <-> "a" <-> "b" <-> "c" + + expect(list.length).toBe(4); + expect(list.head.value).toBe('x'); + expect(list.head.next.value).toBe('a'); + expect(list.head.next.next.value).toBe('b'); + expect(list.head.next.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + expect(list.tail.previous.previous.previous.value).toBe('x'); + }); + + it('should add a node to tail if given index more than size', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + list.add('x').byIndex(4); + + // "a" <-> "b" <-> "c" <-> "x" + + expect(list.length).toBe(4); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.head.next.next.next.value).toBe('x'); + expect(list.tail.value).toBe('x'); + expect(list.tail.previous.value).toBe('c'); + expect(list.tail.previous.previous.value).toBe('b'); + expect(list.tail.previous.previous.previous.value).toBe('a'); + }); + + it('should be able to add a node at given index counting from right to left', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + list.add('x').byIndex(-1); + + // "a" <-> "b" <-> "x" <-> "c" + + expect(list.length).toBe(4); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('x'); + expect(list.head.next.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('x'); + expect(list.tail.previous.previous.value).toBe('b'); + expect(list.tail.previous.previous.previous.value).toBe('a'); + }); + + it('should add a node to head if given index is less than minus size', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + list.add('x').byIndex(-4); + + // "x" <-> "a" <-> "b" <-> "c" + + expect(list.length).toBe(4); + expect(list.head.value).toBe('x'); + expect(list.head.next.value).toBe('a'); + expect(list.head.next.next.value).toBe('b'); + expect(list.head.next.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + expect(list.tail.previous.previous.previous.value).toBe('x'); + }); + }); + }); + + describe('#addMany', () => { + describe('#head', () => { + it('should add multiple nodes to the head of the list', () => { + list.add('x').head(); + + // "x" + + list.addMany(['a', 'b', 'c']).head(); + + // "a" <-> "b" <-> "c" <-> "x" + + expect(list.length).toBe(4); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.head.next.next.next.value).toBe('x'); + expect(list.head.previous).toBeUndefined(); + expect(list.tail.value).toBe('x'); + expect(list.tail.previous.value).toBe('c'); + expect(list.tail.previous.previous.value).toBe('b'); + expect(list.tail.previous.previous.previous.value).toBe('a'); + expect(list.tail.next).toBeUndefined(); + }); + }); + + describe('#tail', () => { + it('should add multiple nodes to the tail of the list', () => { + list.add('x').tail(); + + // "x" + + list.addMany(['a', 'b', 'c']).tail(); + + // "x" <-> "a" <-> "b" <-> "c" + + expect(list.length).toBe(4); + expect(list.head.value).toBe('x'); + expect(list.head.next.value).toBe('a'); + expect(list.head.next.next.value).toBe('b'); + expect(list.head.next.next.next.value).toBe('c'); + expect(list.head.previous).toBeUndefined(); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + expect(list.tail.previous.previous.previous.value).toBe('x'); + expect(list.tail.next).toBeUndefined(); + }); + }); + + describe('#after', () => { + it('should add multiple nodes after node with given value', () => { + list.add('a').tail(); + + // "a" + + list.addMany(['b', 'c']).after('a'); + + // "a" <-> "b" <-> "c" + + list.addMany(['x', 'y', 'z']).after('b'); + + // "a" <-> "b" <-> "x" <-> "y" <-> "z" <-> "c" + + expect(list.length).toBe(6); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('x'); + expect(list.head.next.next.next.value).toBe('y'); + expect(list.head.next.next.next.next.value).toBe('z'); + expect(list.head.next.next.next.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('z'); + expect(list.tail.previous.previous.value).toBe('y'); + expect(list.tail.previous.previous.previous.value).toBe('x'); + expect(list.tail.previous.previous.previous.previous.value).toBe('b'); + expect(list.tail.previous.previous.previous.previous.previous.value).toBe('a'); + }); + + it('should add multiple nodes to tail if given value is not found', () => { + list.add('a').tail(); + + // "a" + + list.addMany(['b', 'c']).after('x'); + + // "a" <-> "b" <-> "c" + + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + + it('should be able to receive a custom compareFn', () => { + list.addMany([{ x: 1 }, { x: 2 }, { x: 3 }]).tail(); + + // {"x":1} <-> {"x":2} <-> {"x":3} + + list.addMany([{ x: 4 }, { x: 5 }]).after({ x: 1 }, (v1: X, v2: X) => v1.x === v2.x); + + // {"x":1} <-> {"x":4} <-> {"x":5} <-> {"x":2} <-> {"x":3} + + expect(list.length).toBe(5); + expect(list.head.value.x).toBe(1); + expect(list.head.next.value.x).toBe(4); + expect(list.head.next.next.value.x).toBe(5); + expect(list.head.next.next.next.value.x).toBe(2); + expect(list.head.next.next.next.next.value.x).toBe(3); + expect(list.tail.value.x).toBe(3); + expect(list.tail.previous.value.x).toBe(2); + expect(list.tail.previous.previous.value.x).toBe(5); + expect(list.tail.previous.previous.previous.value.x).toBe(4); + expect(list.tail.previous.previous.previous.previous.value.x).toBe(1); + }); + + it('should not change the list when empty array given as value', () => { + list.add('a').tail(); + + // "a" + + list.addMany([]).after('a'); + + // "a" + + expect(list.length).toBe(1); + expect(list.head.value).toBe('a'); + expect(list.tail.value).toBe('a'); + }); + }); + + describe('#before', () => { + it('should add multiple nodes before node with given value', () => { + list.add('c').tail(); + + // "c" + + list.addMany(['a', 'b']).before('c'); + + // "a" <-> "b" <-> "c" + + list.addMany(['x', 'y', 'z']).before('b'); + + // "a" <-> "x" <-> "y" <-> "z" <-> "b" <-> "c" + + expect(list.length).toBe(6); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('x'); + expect(list.head.next.next.value).toBe('y'); + expect(list.head.next.next.next.value).toBe('z'); + expect(list.head.next.next.next.next.value).toBe('b'); + expect(list.head.next.next.next.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('z'); + expect(list.tail.previous.previous.previous.value).toBe('y'); + expect(list.tail.previous.previous.previous.previous.value).toBe('x'); + expect(list.tail.previous.previous.previous.previous.previous.value).toBe('a'); + }); + + it('should add multiple nodes to head if given value is not found', () => { + list.add('c').tail(); + + // "c" + + list.addMany(['a', 'b']).before('x'); + + // "a" <-> "b" <-> "c" + + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + + it('should be able to receive a custom compareFn', () => { + list.addMany([{ x: 1 }, { x: 2 }, { x: 3 }]).tail(); + + // {"x":1} <-> {"x":2} <-> {"x":3} + + list.addMany([{ x: 4 }, { x: 5 }]).before({ x: 3 }, (v1: X, v2: X) => v1.x === v2.x); + + // {"x":1} <-> {"x":2} <-> {"x":4} <-> {"x":5} <-> {"x":3} + + expect(list.length).toBe(5); + expect(list.head.value.x).toBe(1); + expect(list.head.next.value.x).toBe(2); + expect(list.head.next.next.value.x).toBe(4); + expect(list.head.next.next.next.value.x).toBe(5); + expect(list.head.next.next.next.next.value.x).toBe(3); + expect(list.tail.value.x).toBe(3); + expect(list.tail.previous.value.x).toBe(5); + expect(list.tail.previous.previous.value.x).toBe(4); + expect(list.tail.previous.previous.previous.value.x).toBe(2); + expect(list.tail.previous.previous.previous.previous.value.x).toBe(1); + }); + + it('should not change the list when empty array given as value', () => { + list.add('a').tail(); + + // "a" + + list.addMany([]).before('a'); + + // "a" + + expect(list.length).toBe(1); + expect(list.head.value).toBe('a'); + expect(list.tail.value).toBe('a'); + }); + }); + + describe('#byIndex', () => { + it('should add multiple nodes starting from given index', () => { + list.addMany(['a', 'b', 'c']).tail(); + + // "a" <-> "b" <-> "c" + + list.addMany(['x', 'y']).byIndex(1); + + // "a" <-> "x" <-> "y" <-> "b" <-> "c" + + list.addMany(['z']).byIndex(4); + + // "a" <-> "x" <-> "y" <-> "b" <-> "z" <-> "c" + + expect(list.length).toBe(6); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('x'); + expect(list.head.next.next.value).toBe('y'); + expect(list.head.next.next.next.value).toBe('b'); + expect(list.head.next.next.next.next.value).toBe('z'); + expect(list.head.next.next.next.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('z'); + expect(list.tail.previous.previous.value).toBe('b'); + expect(list.tail.previous.previous.previous.value).toBe('y'); + expect(list.tail.previous.previous.previous.previous.value).toBe('x'); + expect(list.tail.previous.previous.previous.previous.previous.value).toBe('a'); + }); + + it('should add multiple nodes to head if given index is zero', () => { + list.addMany(['a', 'b', 'c']).tail(); + + // "a" <-> "b" <-> "c" + + list.addMany(['x', 'y']).byIndex(0); + + // "x" <-> "y" <-> "a" <-> "b" <-> "c" + + expect(list.length).toBe(5); + expect(list.head.value).toBe('x'); + expect(list.head.next.value).toBe('y'); + expect(list.head.next.next.value).toBe('a'); + expect(list.head.next.next.next.value).toBe('b'); + expect(list.head.next.next.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + expect(list.tail.previous.previous.previous.value).toBe('y'); + expect(list.tail.previous.previous.previous.previous.value).toBe('x'); + }); + + it('should add multiple nodes to tail if given index more than size', () => { + list.addMany(['a', 'b', 'c']).tail(); + + // "a" <-> "b" <-> "c" + + list.addMany(['x', 'y']).byIndex(4); + + // "a" <-> "b" <-> "c" <-> "x" <-> "y" + + expect(list.length).toBe(5); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.head.next.next.next.value).toBe('x'); + expect(list.head.next.next.next.next.value).toBe('y'); + expect(list.tail.value).toBe('y'); + expect(list.tail.previous.value).toBe('x'); + expect(list.tail.previous.previous.value).toBe('c'); + expect(list.tail.previous.previous.previous.value).toBe('b'); + expect(list.tail.previous.previous.previous.previous.value).toBe('a'); + }); + + it('should be able to add multiple nodes at given index counting from right to left', () => { + list.addMany(['a', 'b', 'c']).tail(); + + // "a" <-> "b" <-> "c" + + list.addMany(['x', 'y']).byIndex(-1); + + // "a" <-> "b" <-> "x" <-> "y" <-> "c" + + expect(list.length).toBe(5); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('x'); + expect(list.head.next.next.next.value).toBe('y'); + expect(list.head.next.next.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('y'); + expect(list.tail.previous.previous.value).toBe('x'); + expect(list.tail.previous.previous.previous.value).toBe('b'); + expect(list.tail.previous.previous.previous.previous.value).toBe('a'); + }); + + it('should add a node to head if given index is less than minus size', () => { + list.addMany(['a', 'b', 'c']).tail(); + + // "a" <-> "b" <-> "c" + + list.addMany(['x', 'y']).byIndex(-4); + + // "x" <-> "y" <-> "a" <-> "b" <-> "c" + + expect(list.length).toBe(5); + expect(list.head.value).toBe('x'); + expect(list.head.next.value).toBe('y'); + expect(list.head.next.next.value).toBe('a'); + expect(list.head.next.next.next.value).toBe('b'); + expect(list.head.next.next.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + expect(list.tail.previous.previous.previous.value).toBe('y'); + expect(list.tail.previous.previous.previous.previous.value).toBe('x'); + }); + }); + }); + + describe('#find', () => { + it('should return the first node found based on given predicate', () => { + list.add('a').tail(); + list.add('x').tail(); + list.add('b').tail(); + list.add('x').tail(); + list.add('c').tail(); + + // "a" <-> "x" <-> "b" <-> "x" <-> "c" + + const found1 = list.find(node => node.previous && node.previous.value === 'a'); + + expect(found1.value).toBe('x'); + expect(found1.previous.value).toBe('a'); + expect(found1.next.value).toBe('b'); + + // "a" <-> "x" <-> "b" <-> "x" <-> "c" + + const found2 = list.find(node => node.next && node.next.value === 'c'); + + expect(found2.value).toBe('x'); + expect(found2.previous.value).toBe('b'); + expect(found2.next.value).toBe('c'); + }); + + it('should return undefined when list is empty', () => { + const found = list.find(node => node.value === 'x'); + + expect(found).toBeUndefined(); + }); + + it('should return undefined when predicate finds no match', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + const found = list.find(node => node.value === 'x'); + + expect(found).toBeUndefined(); + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + }); + + describe('#findIndex', () => { + it('should return the index of the first node found based on given predicate', () => { + list.add('a').tail(); + list.add('x').tail(); + list.add('b').tail(); + list.add('x').tail(); + list.add('c').tail(); + + // "a" <-> "x" <-> "b" <-> "x" <-> "c" + + const index1 = list.findIndex(node => node.previous && node.previous.value === 'a'); + + expect(index1).toBe(1); + + // "a" <-> "x" <-> "b" <-> "x" <-> "c" + + const index2 = list.findIndex(node => node.next && node.next.value === 'c'); + + expect(index2).toBe(3); + }); + + it('should return -1 when list is empty', () => { + const index = list.findIndex(node => node.value === 'x'); + + expect(index).toBe(-1); + }); + + it('should return -1 when no match is found', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + const index = list.findIndex(node => node.value === 'x'); + + expect(index).toBe(-1); + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + }); + + describe('#forEach', () => { + it('should call given function for each node of the list', () => { + const a = list.add('a').tail(); + const b = list.add('b').tail(); + const c = list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + const spy = jest.fn(); + list.forEach(spy); + + expect(spy.mock.calls).toEqual([ + [a, 0, list], + [b, 1, list], + [c, 2, list], + ]); + }); + + it('should not call given function when list is empty', () => { + const spy = jest.fn(); + list.forEach(spy); + + expect(spy).not.toHaveBeenCalled(); + }); + }); + + describe('#drop', () => { + describe('#head', () => { + it('should return undefined when there is no head', () => { + const dropped = list.drop().head(); + expect(dropped).toBeUndefined(); + }); + + it('should remove the node from the head of the list', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + list.drop().head(); + + // "b" <-> "c" + + expect(list.length).toBe(2); + expect(list.head.value).toBe('b'); + expect(list.head.next.value).toBe('c'); + expect(list.head.previous).toBeUndefined(); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.next).toBeUndefined(); + + // "b" <-> "c" + + list.drop().head(); + list.drop().head(); + + expect(list.length).toBe(0); + expect(list.head).toBeUndefined(); + expect(list.tail).toBeUndefined(); + }); + }); + + describe('#tail', () => { + it('should return undefined when there is no tail', () => { + const dropped = list.drop().tail(); + expect(dropped).toBeUndefined(); + }); + + it('should remove the node from the tail of the list', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + list.drop().tail(); + + // "a" <-> "b" + + expect(list.length).toBe(2); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.previous).toBeUndefined(); + expect(list.tail.value).toBe('b'); + expect(list.tail.previous.value).toBe('a'); + expect(list.tail.next).toBeUndefined(); + + // "a" <-> "b" + + list.drop().tail(); + list.drop().tail(); + + expect(list.length).toBe(0); + expect(list.head).toBeUndefined(); + expect(list.tail).toBeUndefined(); + }); + }); + + describe('#byIndex', () => { + it('should remove the node at given index', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + list.add('d').tail(); + list.add('e').tail(); + + // "a" <-> "b" <-> "c" <-> "d" <-> "e" + + list.drop().byIndex(1); + + // "a" <-> "c" <-> "d" <-> "e" + + list.drop().byIndex(-2); + + // "a" <-> "c" <-> "e" + + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('c'); + expect(list.head.next.next.value).toBe('e'); + expect(list.tail.value).toBe('e'); + expect(list.tail.previous.value).toBe('c'); + expect(list.tail.previous.previous.value).toBe('a'); + + // "a" <-> "c" <-> "e" + + list.drop().byIndex(2); + list.drop().byIndex(1); + list.drop().byIndex(0); + + expect(list.length).toBe(0); + expect(list.head).toBeUndefined(); + expect(list.tail).toBeUndefined(); + }); + + it('should return undefined when list is empty', () => { + const dropped = list.drop().byIndex(0); + expect(dropped).toBeUndefined(); + }); + + it('should return undefined when given index does not exist', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + const dropped1 = list.drop().byIndex(4); + + // "a" <-> "b" <-> "c" + + expect(dropped1).toBeUndefined(); + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + + // "a" <-> "b" <-> "c" + + const dropped2 = list.drop().byIndex(-4); + + // "a" <-> "b" <-> "c" + + expect(dropped2).toBeUndefined(); + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + }); + + describe('#byValue', () => { + it('should remove the first node with given value', () => { + list.add('a').tail(); + list.add('x').tail(); + list.add('b').tail(); + list.add('x').tail(); + list.add('c').tail(); + + // "a" <-> "x" <-> "b" <-> "x" <-> "c" + + list.drop().byValue('x'); + + // "a" <-> "b" <-> "x" <-> "c" + + expect(list.length).toBe(4); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('x'); + expect(list.head.next.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('x'); + expect(list.tail.previous.previous.value).toBe('b'); + expect(list.tail.previous.previous.previous.value).toBe('a'); + + // "a" <-> "b" <-> "x" <-> "c" + + list.drop().byValue('x'); + + // "a" <-> "b" <-> "c" + + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + + it('should be able to receive a custom compareFn', () => { + list.add({ x: 1 }).tail(); + list.add({ x: 2 }).tail(); + list.add({ x: 3 }).tail(); + + // {"x":1} <-> {"x":2} <-> {"x":3} + + list.drop().byValue({ x: 2 }, (v1: X, v2: X) => v1.x === v2.x); + + // {"x":1} <-> {"x":3} + + expect(list.length).toBe(2); + expect(list.head.value.x).toBe(1); + expect(list.head.next.value.x).toBe(3); + expect(list.tail.value.x).toBe(3); + expect(list.tail.previous.value.x).toBe(1); + }); + + it('should return undefined when list is empty', () => { + const dropped = list.drop().byValue('x'); + expect(dropped).toBeUndefined(); + }); + + it('should return undefined when given value is not found', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + const node = list.drop().byValue('x'); + + // "a" <-> "b" <-> "c" + + expect(node).toBeUndefined(); + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + }); + + describe('#byValueAll', () => { + it('should remove all nodes with given value', () => { + list.add('a').tail(); + list.add('x').tail(); + list.add('b').tail(); + list.add('x').tail(); + list.add('c').tail(); + + // "a" <-> "x" <-> "b" <-> "x" <-> "c" + + const dropped = list.drop().byValueAll('x'); + + // "a" <-> "b" <-> "c" + + expect(dropped.length).toBe(2); + expect(dropped[0].value).toEqual('x'); + expect(dropped[0].previous.value).toEqual('a'); + expect(dropped[0].next.value).toEqual('b'); + expect(dropped[1].value).toEqual('x'); + expect(dropped[1].previous.value).toEqual('b'); + expect(dropped[1].next.value).toEqual('c'); + + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + + it('should be able to receive a custom compareFn', () => { + list.add({ x: 1 }).tail(); + list.add({ x: 0 }).tail(); + list.add({ x: 2 }).tail(); + list.add({ x: 0 }).tail(); + list.add({ x: 3 }).tail(); + + // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":0} <-> {"x":3} + + const dropped = list.drop().byValueAll({ x: 0 }, (v1: X, v2: X) => v1.x === v2.x); + + // {"x":1} <-> {"x":2} <-> {"x":3} + + expect(dropped.length).toBe(2); + expect(dropped[0].value.x).toEqual(0); + expect(dropped[0].previous.value.x).toEqual(1); + expect(dropped[0].next.value.x).toEqual(2); + expect(dropped[1].value.x).toEqual(0); + expect(dropped[1].previous.value.x).toEqual(2); + expect(dropped[1].next.value.x).toEqual(3); + + expect(list.length).toBe(3); + expect(list.head.value.x).toBe(1); + expect(list.head.next.value.x).toBe(2); + expect(list.head.next.next.value.x).toBe(3); + expect(list.tail.value.x).toBe(3); + expect(list.tail.previous.value.x).toBe(2); + expect(list.tail.previous.previous.value.x).toBe(1); + }); + + it('should return empty array when list is empty', () => { + const dropped = list.drop().byValueAll('x'); + expect(dropped).toEqual([]); + }); + + it('should return empty array when given value is not found', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + const dropped = list.drop().byValueAll('x'); + + // "a" <-> "b" <-> "c" + + expect(dropped).toEqual([]); + + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + }); + }); + + describe('#dropMany', () => { + describe('#head', () => { + it('should return empty array when there is no head', () => { + const dropped = list.dropMany(1).head(); + expect(dropped).toEqual([]); + }); + + it('should remove multiple nodes from the head of the list', () => { + list.addMany(['a', 'b', 'c', 'd', 'e']).tail(); + + // "a" <-> "b" <-> "c" <-> "d" <-> "e" + + list.dropMany(3).head(); + + // "d" <-> "e" + + expect(list.length).toBe(2); + expect(list.head.value).toBe('d'); + expect(list.head.next.value).toBe('e'); + expect(list.head.previous).toBeUndefined(); + expect(list.tail.value).toBe('e'); + expect(list.tail.previous.value).toBe('d'); + expect(list.tail.next).toBeUndefined(); + }); + + it('should not change the list when count is less than or equal to zero', () => { + list.add('a').tail(); + + // "a" + + list.dropMany(0).head(); + + // "a" + + list.dropMany(-1).head(); + + // "a" + + expect(list.length).toBe(1); + expect(list.head.value).toBe('a'); + expect(list.tail.value).toBe('a'); + }); + }); + + describe('#tail', () => { + it('should return empty array when there is no tail', () => { + const dropped = list.dropMany(1).tail(); + expect(dropped).toEqual([]); + }); + + it('should remove multiple nodes from the tail of the list', () => { + list.addMany(['a', 'b', 'c', 'd', 'e']).tail(); + + // "a" <-> "b" <-> "c" <-> "d" <-> "e" + + list.dropMany(3).tail(); + + // "a" <-> "b" + + expect(list.length).toBe(2); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.previous).toBeUndefined(); + expect(list.tail.value).toBe('b'); + expect(list.tail.previous.value).toBe('a'); + expect(list.tail.next).toBeUndefined(); + }); + + it('should not change the list when count is less than or equal to zero', () => { + list.add('a').tail(); + + // "a" + + list.dropMany(0).tail(); + + // "a" + + list.dropMany(-1).tail(); + + // "a" + + expect(list.length).toBe(1); + expect(list.head.value).toBe('a'); + expect(list.tail.value).toBe('a'); + }); + }); + + describe('#byIndex', () => { + it('should remove multiple nodes starting from given index', () => { + list.addMany(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']).tail(); + + // "a" <-> "b" <-> "c" <-> "d" <-> "e" <-> "f" <-> "g" <-> "h" + + list.dropMany(2).byIndex(1); + + // "a" <-> "d" <-> "e" <-> "f" <-> "g" <-> "h" + + list.dropMany(2).byIndex(-3); + + // "a" <-> "d" <-> "e" <-> "h" + + expect(list.length).toBe(4); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('d'); + expect(list.head.next.next.value).toBe('e'); + expect(list.head.next.next.next.value).toBe('h'); + expect(list.tail.value).toBe('h'); + expect(list.tail.previous.value).toBe('e'); + expect(list.tail.previous.previous.value).toBe('d'); + expect(list.tail.previous.previous.previous.value).toBe('a'); + + list.dropMany(4).byIndex(0); + + expect(list.length).toBe(0); + expect(list.head).toBeUndefined(); + expect(list.tail).toBeUndefined(); + }); + + it('should return empty array when list is empty', () => { + const dropped = list.dropMany(1).byIndex(0); + expect(dropped).toEqual([]); + }); + + it('should return empty array when given index does not exist', () => { + list.addMany(['a', 'b', 'c']).tail(); + + // "a" <-> "b" <-> "c" + + const dropped = list.dropMany(3).byIndex(4); + + // "a" <-> "b" <-> "c" + + expect(dropped).toEqual([]); + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + + it('should remove from start when given index is less than minus size', () => { + list.addMany(['a', 'b', 'c', 'd', 'e']).tail(); + + // "a" <-> "b" <-> "c" <-> "d" <-> "e" + + list.dropMany(2).byIndex(-9); + + // "c" <-> "d" <-> "e" + + expect(list.length).toBe(3); + expect(list.head.value).toBe('c'); + expect(list.head.next.value).toBe('d'); + expect(list.head.next.next.value).toBe('e'); + expect(list.tail.value).toBe('e'); + expect(list.tail.previous.value).toBe('d'); + expect(list.tail.previous.previous.value).toBe('c'); + }); + + it('should remove from end when given index + count is larger than or equal to size', () => { + list.addMany(['a', 'b', 'c', 'd', 'e']).tail(); + + // "a" <-> "b" <-> "c" <-> "d" <-> "e" + + list.dropMany(2).byIndex(3); + + // "a" <-> "b" <-> "c" + + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + + // "a" <-> "b" <-> "c" + + list.dropMany(9).byIndex(1); + + // "a" + + expect(list.length).toBe(1); + expect(list.head.value).toBe('a'); + expect(list.tail.value).toBe('a'); + }); + + it('should not change the list when count is less than or equal to zero', () => { + list.add('a').tail(); + + // "a" + + list.dropMany(0).byIndex(0); + + // "a" + + list.dropMany(-1).byIndex(0); + + // "a" + + expect(list.length).toBe(1); + expect(list.head.value).toBe('a'); + expect(list.tail.value).toBe('a'); + }); + }); + }); + + describe('#get', () => { + it('should return node at given index', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + const node = list.get(1); + + expect(node.value).toBe('b'); + expect(node.previous.value).toBe('a'); + expect(node.next.value).toBe('c'); + }); + + it('should return undefined when list is empty', () => { + const node = list.get(1); + + expect(node).toBeUndefined(); + }); + + it('should return undefined when predicate finds no match', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + const node1 = list.get(4); + + expect(node1).toBeUndefined(); + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + + // "a" <-> "b" <-> "c" + + const node2 = list.get(-1); + + expect(node2).toBeUndefined(); + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + }); + + describe('#indexOf', () => { + it('should return the index of the first node found based on given value', () => { + list.add('a').tail(); + list.add('x').tail(); + list.add('b').tail(); + list.add('x').tail(); + list.add('c').tail(); + + // "a" <-> "x" <-> "b" <-> "x" <-> "c" + + const index1 = list.indexOf('x'); + + expect(index1).toBe(1); + + // "a" <-> "x" <-> "b" <-> "x" <-> "c" + + let timesFound = 0; + const index2 = list.indexOf('x', (v1: string, v2: string) => { + if (timesFound > 1) return false; + + timesFound += Number(v1 === v2); + + return timesFound > 1; + }); + + expect(index2).toBe(3); + }); + + it('should be able to receive a custom compareFn', () => { + list.add({ x: 1 }).tail(); + list.add({ x: 2 }).tail(); + list.add({ x: 3 }).tail(); + + // {"x":1} <-> {"x":2} <-> {"x":3} + + const index = list.indexOf({ x: 2 }, (v1: X, v2: X) => v1.x === v2.x); + + expect(index).toBe(1); + }); + + it('should return -1 when list is empty', () => { + const index = list.indexOf('x'); + + expect(index).toBe(-1); + }); + + it('should return -1 when no match is found', () => { + list.add('a').tail(); + list.add('b').tail(); + list.add('c').tail(); + + // "a" <-> "b" <-> "c" + + const index = list.indexOf('x'); + + expect(index).toBe(-1); + expect(list.length).toBe(3); + expect(list.head.value).toBe('a'); + expect(list.head.next.value).toBe('b'); + expect(list.head.next.next.value).toBe('c'); + expect(list.tail.value).toBe('c'); + expect(list.tail.previous.value).toBe('b'); + expect(list.tail.previous.previous.value).toBe('a'); + }); + }); + + describe('#toArray', () => { + it('should return array representation', () => { + list.addTail('a'); + list.addTail(2); + list.addTail('c'); + list.addTail({ k: 4, v: 'd' }); + + // "a" <-> 2 <-> "c" <-> {"k":4,"v":"d"} + + const arr = list.toArray(); + expect(arr).toEqual(['a', 2, 'c', { k: 4, v: 'd' }]); + }); + + it('should return empty array when list is empty', () => { + const arr = list.toArray(); + expect(arr).toEqual([]); + }); + }); + + describe('#toNodeArray', () => { + it('should return array of nodes', () => { + list.addTail('a'); + list.addTail(2); + list.addTail('c'); + list.addTail({ k: 4, v: 'd' }); + + // "a" <-> 2 <-> "c" <-> {"k":4,"v":"d"} + + const arr = list.toNodeArray(); + + expect(arr.every(node => node instanceof ListNode)).toBe(true); + expect(arr.map(node => node.value)).toEqual(['a', 2, 'c', { k: 4, v: 'd' }]); + }); + + it('should return empty array when list is empty', () => { + const arr = list.toNodeArray(); + expect(arr).toEqual([]); + }); + }); + + describe('#toString', () => { + it('should return string representation', () => { + list.addTail('a'); + list.addTail(2); + list.addTail('c'); + list.addTail({ k: 4, v: 'd' }); + + // "a" <-> 2 <-> "c" <-> {"k":4,"v":"d"} + + const str = list.toString(); + expect(str).toBe('"a" <-> 2 <-> "c" <-> {"k":4,"v":"d"}'); + }); + + it('should return empty string when list is empty', () => { + const str = list.toString(); + expect(str).toBe(''); + }); + + it('should be coercible', () => { + list.addMany(['a', 'b', 'c']).tail(); + + // "a" <-> "b" <-> "c" + + expect('' + list).toBe('"a" <-> "b" <-> "c"'); + }); + + it('should be able to receive a custom mapperFn', () => { + list.addMany([{ x: 1 }, { x: 2 }, { x: 3 }]).tail(); + + // {"x":1} <-> {"x":2} <-> {"x":3} + + const str = list.toString(value => value.x); + expect(str).toBe('1 <-> 2 <-> 3'); + }); + }); + + it('should be iterable', () => { + list.addTail('a'); + list.addTail('b'); + list.addTail('c'); + + // "a" <-> "b" <-> "c" + + const arr = []; + + for (const value of list) { + arr.push(value); + } + + expect(arr).toEqual(['a', 'b', 'c']); + }); +}); + +interface X { + [k: string]: any; +} diff --git a/npm/packs/utils/projects/utils/src/lib/linked-list.ts b/npm/packs/utils/projects/utils/src/lib/linked-list.ts index 86ebebbcc1..c0f014121a 100644 --- a/npm/packs/utils/projects/utils/src/lib/linked-list.ts +++ b/npm/packs/utils/projects/utils/src/lib/linked-list.ts @@ -1,3 +1,396 @@ -export class LinkedList { - constructor() {} +/* tslint:disable:no-non-null-assertion */ + +import compare from 'just-compare'; + +export class ListNode { + readonly value: T; + next: ListNode | undefined; + previous: ListNode | undefined; + + constructor(value: T) { + this.value = value; + } } + +export class LinkedList { + private first: ListNode | undefined; + private last: ListNode | undefined; + private size = 0; + + get head(): ListNode | undefined { + return this.first; + } + get tail(): ListNode | undefined { + return this.last; + } + get length(): number { + return this.size; + } + + private attach( + value: T, + previousNode: ListNode | undefined, + nextNode: ListNode | undefined, + ): ListNode { + if (!previousNode) return this.addHead(value); + + if (!nextNode) return this.addTail(value); + + const node = new ListNode(value); + node.previous = previousNode; + previousNode.next = node; + node.next = nextNode; + nextNode.previous = node; + + this.size++; + + return node; + } + + private attachMany( + values: T[], + previousNode: ListNode | undefined, + nextNode: ListNode | undefined, + ): ListNode[] { + if (!values.length) return []; + + if (!previousNode) return this.addManyHead(values); + + if (!nextNode) return this.addManyTail(values); + + const list = new LinkedList(); + list.addManyTail(values); + list.first!.previous = previousNode; + previousNode.next = list.first; + list.last!.next = nextNode; + nextNode.previous = list.last; + + this.size += values.length; + + return list.toNodeArray(); + } + + private detach(node: ListNode) { + if (!node.previous) return this.dropHead(); + + if (!node.next) return this.dropTail(); + + node.previous.next = node.next; + node.next.previous = node.previous; + + this.size--; + + return node; + } + + add(value: T) { + return { + after: (previousValue: T, compareFn: ListComparisonFn = compare) => + this.addAfter(value, previousValue, compareFn), + before: (nextValue: T, compareFn: ListComparisonFn = compare) => + this.addBefore(value, nextValue, compareFn), + byIndex: (position: number) => this.addByIndex(value, position), + head: () => this.addHead(value), + tail: () => this.addTail(value), + }; + } + + addMany(values: T[]) { + return { + after: (previousValue: T, compareFn: ListComparisonFn = compare) => + this.addManyAfter(values, previousValue, compareFn), + before: (nextValue: T, compareFn: ListComparisonFn = compare) => + this.addManyBefore(values, nextValue, compareFn), + byIndex: (position: number) => this.addManyByIndex(values, position), + head: () => this.addManyHead(values), + tail: () => this.addManyTail(values), + }; + } + + addAfter(value: T, previousValue: T, compareFn: ListComparisonFn = compare): ListNode { + const previous = this.find(node => compareFn(node.value, previousValue)); + + return previous ? this.attach(value, previous, previous.next) : this.addTail(value); + } + + addBefore(value: T, nextValue: T, compareFn: ListComparisonFn = compare): ListNode { + const next = this.find(node => compareFn(node.value, nextValue)); + + return next ? this.attach(value, next.previous, next) : this.addHead(value); + } + + addByIndex(value: T, position: number): ListNode { + if (position < 0) position += this.size; + else if (position >= this.size) return this.addTail(value); + + if (position <= 0) return this.addHead(value); + + const next = this.get(position)!; + + return this.attach(value, next.previous, next); + } + + addHead(value: T): ListNode { + const node = new ListNode(value); + + node.next = this.first; + + if (this.first) this.first.previous = node; + else this.last = node; + + this.first = node; + this.size++; + + return node; + } + + addTail(value: T): ListNode { + const node = new ListNode(value); + + if (this.first) { + node.previous = this.last; + this.last!.next = node; + this.last = node; + } else { + this.first = node; + this.last = node; + } + + this.size++; + + return node; + } + + addManyAfter( + values: T[], + previousValue: T, + compareFn: ListComparisonFn = compare, + ): ListNode[] { + const previous = this.find(node => compareFn(node.value, previousValue)); + + return previous ? this.attachMany(values, previous, previous.next) : this.addManyTail(values); + } + + addManyBefore( + values: T[], + nextValue: T, + compareFn: ListComparisonFn = compare, + ): ListNode[] { + const next = this.find(node => compareFn(node.value, nextValue)); + + return next ? this.attachMany(values, next.previous, next) : this.addManyHead(values); + } + + addManyByIndex(values: T[], position: number): ListNode[] { + if (position < 0) position += this.size; + + if (position <= 0) return this.addManyHead(values); + + if (position >= this.size) return this.addManyTail(values); + + const next = this.get(position)!; + + return this.attachMany(values, next.previous, next); + } + + addManyHead(values: T[]): ListNode[] { + return values.reduceRight[]>((nodes, value) => { + nodes.unshift(this.addHead(value)); + return nodes; + }, []); + } + + addManyTail(values: T[]): ListNode[] { + return values.map(value => this.addTail(value)); + } + + drop() { + return { + byIndex: (position: number) => this.dropByIndex(position), + byValue: (value: T, compareFn: ListComparisonFn = compare) => + this.dropByValue(value, compareFn), + byValueAll: (value: T, compareFn: ListComparisonFn = compare) => + this.dropByValueAll(value, compareFn), + head: () => this.dropHead(), + tail: () => this.dropTail(), + }; + } + + dropMany(count: number) { + return { + byIndex: (position: number) => this.dropManyByIndex(count, position), + head: () => this.dropManyHead(count), + tail: () => this.dropManyTail(count), + }; + } + + dropByIndex(position: number): ListNode | undefined { + if (position < 0) position += this.size; + + const current = this.get(position); + + return current ? this.detach(current) : undefined; + } + + dropByValue(value: T, compareFn: ListComparisonFn = compare): ListNode | undefined { + const position = this.findIndex(node => compareFn(node.value, value)); + + return position < 0 ? undefined : this.dropByIndex(position); + } + + dropByValueAll(value: T, compareFn: ListComparisonFn = compare): ListNode[] { + const dropped: ListNode[] = []; + + for (let current = this.first, position = 0; current; position++, current = current.next) { + if (compareFn(current.value, value)) { + dropped.push(this.dropByIndex(position - dropped.length)!); + } + } + + return dropped; + } + + dropHead(): ListNode | undefined { + const head = this.first; + + if (head) { + this.first = head.next; + + if (this.first) this.first.previous = undefined; + else this.last = undefined; + + this.size--; + + return head; + } + + return undefined; + } + + dropTail(): ListNode | undefined { + const tail = this.last; + + if (tail) { + this.last = tail.previous; + + if (this.last) this.last.next = undefined; + else this.first = undefined; + + this.size--; + + return tail; + } + + return undefined; + } + + dropManyByIndex(count: number, position: number): ListNode[] { + if (count <= 0) return []; + + if (position < 0) position = Math.max(position + this.size, 0); + else if (position >= this.size) return []; + + count = Math.min(count, this.size - position); + + const dropped: ListNode[] = []; + + while (count--) { + const current = this.get(position); + dropped.push(this.detach(current!)!); + } + + return dropped; + } + + dropManyHead(count: Exclude): ListNode[] { + if (count <= 0) return []; + + count = Math.min(count, this.size); + + const dropped: ListNode[] = []; + + while (count--) dropped.unshift(this.dropHead()!); + + return dropped; + } + + dropManyTail(count: Exclude): ListNode[] { + if (count <= 0) return []; + + count = Math.min(count, this.size); + + const dropped: ListNode[] = []; + + while (count--) dropped.push(this.dropTail()!); + + return dropped; + } + + find(predicate: ListIteratorFn): ListNode | undefined { + for (let current = this.first, position = 0; current; position++, current = current.next) { + if (predicate(current, position, this)) return current; + } + + return undefined; + } + + findIndex(predicate: ListIteratorFn): number { + for (let current = this.first, position = 0; current; position++, current = current.next) { + if (predicate(current, position, this)) return position; + } + + return -1; + } + + forEach(callback: ListIteratorFn) { + for (let node = this.first, position = 0; node; position++, node = node.next) { + callback(node, position, this); + } + } + + get(position: number): ListNode | undefined { + return this.find((_, index) => position === index); + } + + indexOf(value: T, compareFn: ListComparisonFn = compare): number { + return this.findIndex(node => compareFn(node.value, value)); + } + + toArray(): T[] { + const array = new Array(this.size); + + this.forEach((node, index) => (array[index!] = node.value)); + + return array; + } + + toNodeArray(): ListNode[] { + const array = new Array(this.size); + + this.forEach((node, index) => (array[index!] = node)); + + return array; + } + + toString(mapperFn: ListMapperFn = JSON.stringify): string { + return this.toArray() + .map(value => mapperFn(value)) + .join(' <-> '); + } + + *[Symbol.iterator](): any { + for (let node = this.first, position = 0; node; position++, node = node.next) { + yield node.value; + } + } +} + +export type ListMapperFn = (value: T) => any; + +export type ListComparisonFn = (value1: T, value2: T) => boolean; + +export type ListIteratorFn = ( + node: ListNode, + index?: number, + list?: LinkedList, +) => R; From c7399068c86a0c7ca36d0b5c846eb0a40117cd7d Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 30 Mar 2020 13:45:37 +0300 Subject: [PATCH 044/182] test(utils): implement jest --- npm/packs/utils/angular.json | 21 +- npm/packs/utils/jest.config.js | 15 + npm/packs/utils/package.json | 26 +- npm/packs/utils/projects/utils/jest.config.js | 6 + npm/packs/utils/projects/utils/karma.conf.js | 32 - .../utils/projects/utils/ng-package.json | 3 +- npm/packs/utils/projects/utils/src/test.ts | 26 - .../utils/projects/utils/tsconfig.spec.json | 18 +- npm/packs/utils/projects/utils/tslint.json | 17 + npm/packs/utils/test-setup.ts | 1 + npm/packs/utils/yarn.lock | 4143 +++++++++++------ 11 files changed, 2904 insertions(+), 1404 deletions(-) create mode 100644 npm/packs/utils/jest.config.js create mode 100644 npm/packs/utils/projects/utils/jest.config.js delete mode 100644 npm/packs/utils/projects/utils/karma.conf.js delete mode 100644 npm/packs/utils/projects/utils/src/test.ts create mode 100644 npm/packs/utils/projects/utils/tslint.json create mode 100644 npm/packs/utils/test-setup.ts diff --git a/npm/packs/utils/angular.json b/npm/packs/utils/angular.json index 35717d6644..2dc5b81b7a 100644 --- a/npm/packs/utils/angular.json +++ b/npm/packs/utils/angular.json @@ -22,29 +22,24 @@ } }, "test": { - "builder": "@angular-devkit/build-angular:karma", + "builder": "@angular-builders/jest:run", "options": { - "main": "projects/utils/src/test.ts", - "tsConfig": "projects/utils/tsconfig.spec.json", - "karmaConfig": "projects/utils/karma.conf.js" + "coverage": true, + "passWithNoTests": true } }, "lint": { "builder": "@angular-devkit/build-angular:tslint", "options": { - "tsConfig": [ - "projects/utils/tsconfig.lib.json", - "projects/utils/tsconfig.spec.json" - ], - "exclude": [ - "**/node_modules/**" - ] + "tsConfig": ["projects/utils/tsconfig.lib.json", "projects/utils/tsconfig.spec.json"], + "exclude": ["**/node_modules/**"] } } } - }}, + } + }, "cli": { "analytics": false }, "defaultProject": "utils" -} \ No newline at end of file +} diff --git a/npm/packs/utils/jest.config.js b/npm/packs/utils/jest.config.js new file mode 100644 index 0000000000..925a2a1d3c --- /dev/null +++ b/npm/packs/utils/jest.config.js @@ -0,0 +1,15 @@ +module.exports = { + globals: { + 'ts-jest': { + allowSyntheticDefaultImports: true, + }, + }, + transform: { + '^.+\\.(ts|js|html)$': 'ts-jest', + }, + moduleFileExtensions: ['ts', 'js', 'html'], + coverageDirectory: '/coverage', + coverageReporters: ['html'], + preset: 'jest-preset-angular', + setupFilesAfterEnv: ['/test-setup.ts'], +}; diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index 570db9f30b..f28c647e97 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,8 +1,8 @@ { "name": "@abp/utils", - "version": "0.0.2", + "version": "0.0.6", "scripts": { - "prepublish": "node prepublish.js", + "prepublish": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", "start": "ng serve", "build": "ng build", @@ -23,34 +23,36 @@ "metadata": "dist/abp-utils.metadata.json", "sideEffects": false, "devDependencies": { + "@angular-builders/jest": "^9.0.0", "@angular-devkit/build-ng-packagr": "~0.901.0", "@angular/cli": "~9.1.0", + "@angular/common": "^9.1.0", "@angular/compiler": "~9.1.0", "@angular/compiler-cli": "~9.1.0", "@angular/core": "~9.1.0", + "@angular/platform-browser": "^9.1.0", + "@angular/platform-browser-dynamic": "^9.1.0", "@types/execa": "^2.0.0", "@types/fs-extra": "^8.1.0", - "@types/jasmine": "~3.5.0", - "@types/jasminewd2": "~2.0.3", + "@types/jest": "^25.1.4", "@types/node": "^12.11.1", "codelyzer": "^5.1.2", "execa": "^4.0.0", "fs-extra": "^9.0.0", - "jasmine-core": "~3.5.0", - "jasmine-spec-reporter": "~4.2.1", - "karma": "~4.4.1", - "karma-chrome-launcher": "~3.1.0", - "karma-coverage-istanbul-reporter": "~2.1.0", - "karma-jasmine": "~3.0.1", - "karma-jasmine-html-reporter": "^1.4.2", + "jest": "^25.2.4", + "jest-preset-angular": "^8.1.2", "ng-packagr": "^9.0.0", "protractor": "~5.4.3", "ts-node": "~8.3.0", "tslib": "^1.10.0", "tslint": "~6.1.0", - "typescript": "~3.8.3" + "typescript": "~3.6.0", + "zone.js": "~0.10.2" }, "peerDependencies": { "tslib": "^1.10.0" + }, + "dependencies": { + "just-compare": "^1.3.0" } } diff --git a/npm/packs/utils/projects/utils/jest.config.js b/npm/packs/utils/projects/utils/jest.config.js new file mode 100644 index 0000000000..383a005785 --- /dev/null +++ b/npm/packs/utils/projects/utils/jest.config.js @@ -0,0 +1,6 @@ +const jestConfig = require('../../jest.config'); + +module.exports = { + ...jestConfig, + name: 'utils', +}; diff --git a/npm/packs/utils/projects/utils/karma.conf.js b/npm/packs/utils/projects/utils/karma.conf.js deleted file mode 100644 index c267a7236a..0000000000 --- a/npm/packs/utils/projects/utils/karma.conf.js +++ /dev/null @@ -1,32 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage-istanbul-reporter'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - coverageIstanbulReporter: { - dir: require('path').join(__dirname, '../../coverage/utils'), - reports: ['html', 'lcovonly', 'text-summary'], - fixWebpackSourcePaths: true - }, - reporters: ['progress', 'kjhtml'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false, - restartOnFileChange: true - }); -}; diff --git a/npm/packs/utils/projects/utils/ng-package.json b/npm/packs/utils/projects/utils/ng-package.json index 050aa39833..c5ccce90e4 100644 --- a/npm/packs/utils/projects/utils/ng-package.json +++ b/npm/packs/utils/projects/utils/ng-package.json @@ -4,5 +4,6 @@ "deleteDestPath": true, "lib": { "entryFile": "src/public-api.ts" - } + }, + "whitelistedNonPeerDependencies": ["just-compare"] } diff --git a/npm/packs/utils/projects/utils/src/test.ts b/npm/packs/utils/projects/utils/src/test.ts deleted file mode 100644 index 303b32a220..0000000000 --- a/npm/packs/utils/projects/utils/src/test.ts +++ /dev/null @@ -1,26 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'zone.js/dist/zone'; -import 'zone.js/dist/zone-testing'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -declare const require: { - context(path: string, deep?: boolean, filter?: RegExp): { - keys(): string[]; - (id: string): T; - }; -}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting() -); -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().map(context); diff --git a/npm/packs/utils/projects/utils/tsconfig.spec.json b/npm/packs/utils/projects/utils/tsconfig.spec.json index 16da33db07..54e55c4f05 100644 --- a/npm/packs/utils/projects/utils/tsconfig.spec.json +++ b/npm/packs/utils/projects/utils/tsconfig.spec.json @@ -1,17 +1,11 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "outDir": "../../out-tsc/spec", - "types": [ - "jasmine", - "node" - ] + "emitDecoratorMetadata": true, + "esModuleInterop": true, + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] }, - "files": [ - "src/test.ts" - ], - "include": [ - "**/*.spec.ts", - "**/*.d.ts" - ] + "include": ["**/*.spec.ts", "**/*.d.ts"] } diff --git a/npm/packs/utils/projects/utils/tslint.json b/npm/packs/utils/projects/utils/tslint.json new file mode 100644 index 0000000000..8c3919ea62 --- /dev/null +++ b/npm/packs/utils/projects/utils/tslint.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tslint.json", + "rules": { + "directive-selector": [ + true, + "attribute", + "abp", + "camelCase" + ], + "component-selector": [ + true, + "element", + "abp", + "kebab-case" + ] + } +} diff --git a/npm/packs/utils/test-setup.ts b/npm/packs/utils/test-setup.ts new file mode 100644 index 0000000000..8d88704e8f --- /dev/null +++ b/npm/packs/utils/test-setup.ts @@ -0,0 +1 @@ +import 'jest-preset-angular'; diff --git a/npm/packs/utils/yarn.lock b/npm/packs/utils/yarn.lock index bfcbdc3504..e562be19f4 100644 --- a/npm/packs/utils/yarn.lock +++ b/npm/packs/utils/yarn.lock @@ -2,25 +2,54 @@ # yarn lockfile v1 +"@angular-builders/jest@^9.0.0": + version "9.0.0" + resolved "http://localhost:4873/@angular-builders%2fjest/-/jest-9.0.0.tgz#84c88d3e177823cd5c47e3c3ed7f550d40c64bf5" + integrity sha512-7kEoX6qXHwI5b/DpPvAZzJs29vSm20Pe7IBJAsGU6Csns69FtqS+IxB0J2oxIhKMjbnclXvSYnIb6QLvjUKUEQ== + dependencies: + "@angular-devkit/architect" "^0.900.0" + "@angular-devkit/core" "^9.0.0" + jest-preset-angular "^8.0.0" + lodash "^4.17.10" + "@angular-devkit/architect@0.901.0": version "0.901.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.901.0.tgz#c660cb76e3bd35fc294d8e8578782b83157924aa" + resolved "http://localhost:4873/@angular-devkit%2farchitect/-/architect-0.901.0.tgz#c660cb76e3bd35fc294d8e8578782b83157924aa" integrity sha512-SlqEBkPrT40zMCy5344AsUqC76pEPCaGPaAkCIvadaz2dC9vNMzQrvubCPJHViD/TumkSX1kYmLS3iYASVM9GQ== dependencies: "@angular-devkit/core" "9.1.0" rxjs "6.5.4" +"@angular-devkit/architect@^0.900.0": + version "0.900.7" + resolved "http://localhost:4873/@angular-devkit%2farchitect/-/architect-0.900.7.tgz#11884bc3c3be8618a62c8e80d61c3410ab954719" + integrity sha512-hfiTVYc72kzbXrzK4tea6jnTDnSKpE1D+vEptBXN2tdXEVNEAQI5Qm5L1zVDtt16UdqoUTUypIgUc9jcNH1mUQ== + dependencies: + "@angular-devkit/core" "9.0.7" + rxjs "6.5.3" + "@angular-devkit/build-ng-packagr@~0.901.0": version "0.901.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.901.0.tgz#48d191f49f5f1b9d5b3bc10d63b85e2c47f0de1d" + resolved "http://localhost:4873/@angular-devkit%2fbuild-ng-packagr/-/build-ng-packagr-0.901.0.tgz#48d191f49f5f1b9d5b3bc10d63b85e2c47f0de1d" integrity sha512-cUQKK7+bYi3fOmq41cfr1ZFQwqAUUm0Yz7DgH34Ek7D98XudNOxJ63Xv4manId528WhqyGDP5/2tut7QNV3VJA== dependencies: "@angular-devkit/architect" "0.901.0" rxjs "6.5.4" -"@angular-devkit/core@9.1.0": +"@angular-devkit/core@9.0.7": + version "9.0.7" + resolved "http://localhost:4873/@angular-devkit%2fcore/-/core-9.0.7.tgz#97e452ad88d36391d621748487c5bab655edfe84" + integrity sha512-tMrz36sM1xrwvFf9Qm59GwALscVlMP7rQBjtd0fIR/QbsiOAIX4AQbV+vN6Vtwnzo5NIRZY1IXJUhesWms+h5w== + dependencies: + ajv "6.10.2" + fast-json-stable-stringify "2.0.0" + magic-string "0.25.4" + rxjs "6.5.3" + source-map "0.7.3" + +"@angular-devkit/core@9.1.0", "@angular-devkit/core@^9.0.0": version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-9.1.0.tgz#5cc89bb5d44c6fd12a3527bae0253adb60d64b07" + resolved "http://localhost:4873/@angular-devkit%2fcore/-/core-9.1.0.tgz#5cc89bb5d44c6fd12a3527bae0253adb60d64b07" integrity sha512-vHTsrB4JaVUQ95FRnKrgo79Y3F6FokImrZdrmwkQmwAThpjXeXmpUEKZS+ZSTFRgesjiIysVGOFijARP4BQ7Bg== dependencies: ajv "6.12.0" @@ -31,7 +60,7 @@ "@angular-devkit/schematics@9.1.0": version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-9.1.0.tgz#f453a9ff78c34a5468cc21830ac4a46089ee1a31" + resolved "http://localhost:4873/@angular-devkit%2fschematics/-/schematics-9.1.0.tgz#f453a9ff78c34a5468cc21830ac4a46089ee1a31" integrity sha512-cb9PSvskMwWlL54fPfCcpJoyNDWAX6Wo7CzL5qpIB2cJCPLAuyfRUYYrkO77YUST+n2HvypHz0cZ5SNGMfaaBQ== dependencies: "@angular-devkit/core" "9.1.0" @@ -40,7 +69,7 @@ "@angular/cli@~9.1.0": version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-9.1.0.tgz#07ec165d507208bb8d8d8ab73c3e14102643edff" + resolved "http://localhost:4873/@angular%2fcli/-/cli-9.1.0.tgz#07ec165d507208bb8d8d8ab73c3e14102643edff" integrity sha512-ofum4gPE/W3fKyzuJrpdHeOS0ZL8x0eYCgsrMyUoFodSpb5LWPqeW+56NgDTpIeny+Trx3pM9dr9QTUVTJ0vYg== dependencies: "@angular-devkit/architect" "0.901.0" @@ -64,9 +93,14 @@ universal-analytics "0.4.20" uuid "7.0.2" +"@angular/common@^9.1.0": + version "9.1.0" + resolved "http://localhost:4873/@angular%2fcommon/-/common-9.1.0.tgz#f9b5353a28f9da6c06266bc7244bbabf9e005176" + integrity sha512-6JPLNtMhI03bGTVQJeSwc+dTjV6DtP7M/BAyzIV0InZP1D6XsOh2QahLFIaaN2sSxYA2ClKuwfX1v+rx9AbXQA== + "@angular/compiler-cli@~9.1.0": version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-9.1.0.tgz#5887c278a2fe1f3165018b1cbceef71d9023b9ae" + resolved "http://localhost:4873/@angular%2fcompiler-cli/-/compiler-cli-9.1.0.tgz#5887c278a2fe1f3165018b1cbceef71d9023b9ae" integrity sha512-xZ8mVPmPporSTtvNA+cbFJQymLzuWfMX6HDDgztZ2eZ5WcQJYloRN4CcYMEzDhCxfV1Zw9Tfc2l14jZD8osi6g== dependencies: canonical-path "1.0.0" @@ -84,24 +118,56 @@ "@angular/compiler@~9.1.0": version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.1.0.tgz#e55b4f2f24df75283002d5e8e85e1acfc46928f6" + resolved "http://localhost:4873/@angular%2fcompiler/-/compiler-9.1.0.tgz#e55b4f2f24df75283002d5e8e85e1acfc46928f6" integrity sha512-QHw/JSeTXHiJQ2Ih0EtU7FGsYcOr+0hwZhqwSW3EEn8TtUgA3DS5lXeiDV66f+3DdvNZFPmgiZIvun3ypxn1HA== "@angular/core@~9.1.0": version "9.1.0" - resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.1.0.tgz#9dfc386bd1461e0fd4786031fd245da04371421c" + resolved "http://localhost:4873/@angular%2fcore/-/core-9.1.0.tgz#9dfc386bd1461e0fd4786031fd245da04371421c" integrity sha512-RVlyegdIAij0P1wLY5ObIdsBAzvmHkHfElnmfiNKhaDftP6U/3zRtaKDu0bq0jvn1WCQ8zXxFQ8AWyKZwyFS+w== +"@angular/platform-browser-dynamic@^9.1.0": + version "9.1.0" + resolved "http://localhost:4873/@angular%2fplatform-browser-dynamic/-/platform-browser-dynamic-9.1.0.tgz#830bd5038d1875736e87e68c3aef44f0f835e418" + integrity sha512-sMtz/poQ3TYaWZzWjrn9apKUZ/WKql2MYCWbpax7pql3GgC9OoTslc7ZEe7/d3ynfFE/CQqWBBOuWGD71Z0LMQ== + +"@angular/platform-browser@^9.1.0": + version "9.1.0" + resolved "http://localhost:4873/@angular%2fplatform-browser/-/platform-browser-9.1.0.tgz#0bd40db37c9e314944c149de935b0f6cdd1f7350" + integrity sha512-OsS/blUjl8ranmDaRADjFAmvnlmwbT6WNU7dVov7FhV0rqesbwaOJ5bR0LSYHYpej7Jaa6oYk0v0XWkaH9LTFg== + "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + resolved "http://localhost:4873/@babel%2fcode-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== dependencies: "@babel/highlight" "^7.8.3" -"@babel/generator@^7.4.0", "@babel/generator@^7.9.0": +"@babel/core@^7.1.0", "@babel/core@^7.7.5": + version "7.9.0" + resolved "http://localhost:4873/@babel%2fcore/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" + integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== + dependencies: + "@babel/code-frame" "^7.8.3" + "@babel/generator" "^7.9.0" + "@babel/helper-module-transforms" "^7.9.0" + "@babel/helpers" "^7.9.0" + "@babel/parser" "^7.9.0" + "@babel/template" "^7.8.6" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" + 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/generator@^7.9.0": version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce" + resolved "http://localhost:4873/@babel%2fgenerator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce" integrity sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA== dependencies: "@babel/types" "^7.9.0" @@ -111,7 +177,7 @@ "@babel/helper-function-name@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + resolved "http://localhost:4873/@babel%2fhelper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== dependencies: "@babel/helper-get-function-arity" "^7.8.3" @@ -120,49 +186,129 @@ "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + resolved "http://localhost:4873/@babel%2fhelper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== dependencies: "@babel/types" "^7.8.3" +"@babel/helper-member-expression-to-functions@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-imports@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fhelper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-module-transforms@^7.9.0": + version "7.9.0" + resolved "http://localhost:4873/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== + dependencies: + "@babel/helper-module-imports" "^7.8.3" + "@babel/helper-replace-supers" "^7.8.6" + "@babel/helper-simple-access" "^7.8.3" + "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/template" "^7.8.6" + "@babel/types" "^7.9.0" + lodash "^4.17.13" + +"@babel/helper-optimise-call-expression@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== + dependencies: + "@babel/types" "^7.8.3" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== + +"@babel/helper-replace-supers@^7.8.6": + version "7.8.6" + resolved "http://localhost:4873/@babel%2fhelper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" + integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.8.3" + "@babel/helper-optimise-call-expression" "^7.8.3" + "@babel/traverse" "^7.8.6" + "@babel/types" "^7.8.6" + +"@babel/helper-simple-access@^7.8.3": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fhelper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== + dependencies: + "@babel/template" "^7.8.3" + "@babel/types" "^7.8.3" + "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + resolved "http://localhost:4873/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== dependencies: "@babel/types" "^7.8.3" "@babel/helper-validator-identifier@^7.9.0": version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" + resolved "http://localhost:4873/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== +"@babel/helpers@^7.9.0": + version "7.9.2" + resolved "http://localhost:4873/@babel%2fhelpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" + integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== + dependencies: + "@babel/template" "^7.8.3" + "@babel/traverse" "^7.9.0" + "@babel/types" "^7.9.0" + "@babel/highlight@^7.8.3": version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + resolved "http://localhost:4873/@babel%2fhighlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== dependencies: "@babel/helper-validator-identifier" "^7.9.0" chalk "^2.0.0" js-tokens "^4.0.0" -"@babel/parser@^7.4.3", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": +"@babel/parser@^7.1.0", "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" + resolved "http://localhost:4873/@babel%2fparser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== -"@babel/template@^7.4.0", "@babel/template@^7.8.3": +"@babel/plugin-syntax-bigint@^7.0.0": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fplugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.8.3" + resolved "http://localhost:4873/@babel%2fplugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6": version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + resolved "http://localhost:4873/@babel%2ftemplate/-/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/traverse@^7.4.3": +"@babel/traverse@^7.1.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" + resolved "http://localhost:4873/@babel%2ftraverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w== dependencies: "@babel/code-frame" "^7.8.3" @@ -175,23 +321,208 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/types@^7.4.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": +"@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" + resolved "http://localhost:4873/@babel%2ftypes/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng== dependencies: "@babel/helper-validator-identifier" "^7.9.0" lodash "^4.17.13" to-fast-properties "^2.0.0" +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "http://localhost:4873/@bcoe%2fv8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@cnakazawa/watch@^1.0.3": + version "1.0.4" + resolved "http://localhost:4873/@cnakazawa%2fwatch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== + dependencies: + exec-sh "^0.3.2" + minimist "^1.2.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.0.0" + resolved "http://localhost:4873/@istanbuljs%2fload-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" + integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2": + version "0.1.2" + resolved "http://localhost:4873/@istanbuljs%2fschema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== + +"@jest/console@^25.2.3": + version "25.2.3" + resolved "http://localhost:4873/@jest%2fconsole/-/console-25.2.3.tgz#38ac19b916ff61457173799239472659e1a67c39" + integrity sha512-k+37B1aSvOt9tKHWbZZSOy1jdgzesB0bj96igCVUG1nAH1W5EoUfgc5EXbBVU08KSLvkVdWopLXaO3xfVGlxtQ== + dependencies: + "@jest/source-map" "^25.2.1" + chalk "^3.0.0" + jest-util "^25.2.3" + slash "^3.0.0" + +"@jest/core@^25.2.4": + version "25.2.4" + resolved "http://localhost:4873/@jest%2fcore/-/core-25.2.4.tgz#382ef80369d3311f1df79db1ee19e958ae95cdad" + integrity sha512-WcWYShl0Bqfcb32oXtjwbiR78D/djhMdJW+ulp4/bmHgeODcsieqUJfUH+kEv8M7VNV77E6jds5aA+WuGh1nmg== + dependencies: + "@jest/console" "^25.2.3" + "@jest/reporters" "^25.2.4" + "@jest/test-result" "^25.2.4" + "@jest/transform" "^25.2.4" + "@jest/types" "^25.2.3" + ansi-escapes "^4.2.1" + chalk "^3.0.0" + exit "^0.1.2" + graceful-fs "^4.2.3" + jest-changed-files "^25.2.3" + jest-config "^25.2.4" + jest-haste-map "^25.2.3" + jest-message-util "^25.2.4" + jest-regex-util "^25.2.1" + jest-resolve "^25.2.3" + jest-resolve-dependencies "^25.2.4" + jest-runner "^25.2.4" + jest-runtime "^25.2.4" + jest-snapshot "^25.2.4" + jest-util "^25.2.3" + jest-validate "^25.2.3" + jest-watcher "^25.2.4" + micromatch "^4.0.2" + p-each-series "^2.1.0" + realpath-native "^2.0.0" + rimraf "^3.0.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^25.2.4": + version "25.2.4" + resolved "http://localhost:4873/@jest%2fenvironment/-/environment-25.2.4.tgz#74f4d8dd87b427434d0b822cde37bc0e78f3e28b" + integrity sha512-wA4xlhD19/gukkDpJ5HQsTle0pgnzI5qMFEjw267lpTDC8d9N7Ihqr5pI+l0p8Qn1SQhai+glSqxrGdzKy4jxw== + dependencies: + "@jest/fake-timers" "^25.2.4" + "@jest/types" "^25.2.3" + jest-mock "^25.2.3" + +"@jest/fake-timers@^25.2.4": + version "25.2.4" + resolved "http://localhost:4873/@jest%2ffake-timers/-/fake-timers-25.2.4.tgz#6821b6edde74fda2a42467ae92cc93095d4c9527" + integrity sha512-oC1TJiwfMcBttVN7Wz+VZnqEAgYTiEMu0QLOXpypR89nab0uCB31zm/QeBZddhSstn20qe3yqOXygp6OwvKT/Q== + dependencies: + "@jest/types" "^25.2.3" + jest-message-util "^25.2.4" + jest-mock "^25.2.3" + jest-util "^25.2.3" + lolex "^5.0.0" + +"@jest/reporters@^25.2.4": + version "25.2.4" + resolved "http://localhost:4873/@jest%2freporters/-/reporters-25.2.4.tgz#aa01c20aab217150d3a6080d5c98ce0bf34b17ed" + integrity sha512-VHbLxM03jCc+bTLOluW/IqHR2G0Cl0iATwIQbuZtIUast8IXO4fD0oy4jpVGpG5b20S6REA8U3BaQoCW/CeVNQ== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^25.2.3" + "@jest/test-result" "^25.2.4" + "@jest/transform" "^25.2.4" + "@jest/types" "^25.2.3" + chalk "^3.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.2" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^4.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.0.0" + jest-haste-map "^25.2.3" + jest-resolve "^25.2.3" + jest-util "^25.2.3" + jest-worker "^25.2.1" + slash "^3.0.0" + source-map "^0.6.0" + string-length "^3.1.0" + terminal-link "^2.0.0" + v8-to-istanbul "^4.0.1" + optionalDependencies: + node-notifier "^6.0.0" + +"@jest/source-map@^25.2.1": + version "25.2.1" + resolved "http://localhost:4873/@jest%2fsource-map/-/source-map-25.2.1.tgz#b62ecf8ae76170b08eff8859b56eb7576df34ab8" + integrity sha512-PgScGJm1U27+9Te/cxP4oUFqJ2PX6NhBL2a6unQ7yafCgs8k02c0LSyjSIx/ao0AwcAdCczfAPDf5lJ7zoB/7A== + dependencies: + callsites "^3.0.0" + graceful-fs "^4.2.3" + source-map "^0.6.0" + +"@jest/test-result@^25.2.4": + version "25.2.4" + resolved "http://localhost:4873/@jest%2ftest-result/-/test-result-25.2.4.tgz#8fc9eac58e82eb2a82e4058e68c3814f98f59cf5" + integrity sha512-AI7eUy+q2lVhFnaibDFg68NGkrxVWZdD6KBr9Hm6EvN0oAe7GxpEwEavgPfNHQjU2mi6g+NsFn/6QPgTUwM1qg== + dependencies: + "@jest/console" "^25.2.3" + "@jest/transform" "^25.2.4" + "@jest/types" "^25.2.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^25.2.4": + version "25.2.4" + resolved "http://localhost:4873/@jest%2ftest-sequencer/-/test-sequencer-25.2.4.tgz#28364aeddec140c696324114f63570f3de536c87" + integrity sha512-TEZm/Rkd6YgskdpTJdYLBtu6Gc11tfWPuSpatq0duH77ekjU8dpqX2zkPdY/ayuHxztV5LTJoV5BLtI9mZfXew== + dependencies: + "@jest/test-result" "^25.2.4" + jest-haste-map "^25.2.3" + jest-runner "^25.2.4" + jest-runtime "^25.2.4" + +"@jest/transform@^25.2.4": + version "25.2.4" + resolved "http://localhost:4873/@jest%2ftransform/-/transform-25.2.4.tgz#34336f37f13f62f7d1f5b93d5d150ba9eb3e11b9" + integrity sha512-6eRigvb+G6bs4kW5j1/y8wu4nCrmVuIe0epPBbiWaYlwawJ8yi1EIyK3d/btDqmBpN5GpN4YhR6iPPnDmkYdTA== + dependencies: + "@babel/core" "^7.1.0" + "@jest/types" "^25.2.3" + babel-plugin-istanbul "^6.0.0" + chalk "^3.0.0" + convert-source-map "^1.4.0" + fast-json-stable-stringify "^2.0.0" + graceful-fs "^4.2.3" + jest-haste-map "^25.2.3" + jest-regex-util "^25.2.1" + jest-util "^25.2.3" + micromatch "^4.0.2" + pirates "^4.0.1" + realpath-native "^2.0.0" + slash "^3.0.0" + source-map "^0.6.1" + write-file-atomic "^3.0.0" + +"@jest/types@^25.2.3": + version "25.2.3" + resolved "http://localhost:4873/@jest%2ftypes/-/types-25.2.3.tgz#035c4fb94e2da472f359ff9a211915d59987f6b6" + integrity sha512-6oLQwO9mKif3Uph3RX5J1i3S7X7xtDHWBaaaoeKw8hOzV6YUd0qDcYcHZ6QXMHDIzSr7zzrEa51o2Ovlj6AtKQ== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^1.1.1" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + "@npmcli/ci-detect@^1.0.0": version "1.2.0" - resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.2.0.tgz#0df142a1ac3bba6cbf2e9da1a6994cd898e32c95" + resolved "http://localhost:4873/@npmcli%2fci-detect/-/ci-detect-1.2.0.tgz#0df142a1ac3bba6cbf2e9da1a6994cd898e32c95" integrity sha512-JtktVH7ASBVIWsQTFlFpeOzhBJskvoBCTfeeRhhZy7ybATcUvwiwotZ8j5rkqUUyB69lIy/AvboiiiGBjYBKBA== "@npmcli/git@^2.0.1": version "2.0.1" - resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.0.1.tgz#d7ecaa9c945de6bb1af5a7e6ea634771193c168b" + resolved "http://localhost:4873/@npmcli%2fgit/-/git-2.0.1.tgz#d7ecaa9c945de6bb1af5a7e6ea634771193c168b" integrity sha512-hVatexiBtx71F01Ars38Hr5AFUGmJgHAfQtRlO5fJlnAawRGSXwEFgjB5i3XdUUmElZU/RXy7fefN02dZKxgPw== dependencies: "@npmcli/promise-spawn" "^1.1.0" @@ -204,7 +535,7 @@ "@npmcli/installed-package-contents@^1.0.5": version "1.0.5" - resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.5.tgz#cc78565e55d9f14d46acf46a96f70934e516fa3d" + resolved "http://localhost:4873/@npmcli%2finstalled-package-contents/-/installed-package-contents-1.0.5.tgz#cc78565e55d9f14d46acf46a96f70934e516fa3d" integrity sha512-aKIwguaaqb6ViwSOFytniGvLPb9SMCUm39TgM3SfUo7n0TxUMbwoXfpwyvQ4blm10lzbAwTsvjr7QZ85LvTi4A== dependencies: npm-bundled "^1.1.1" @@ -214,14 +545,14 @@ "@npmcli/promise-spawn@^1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.1.0.tgz#660009a5c54209142ec7c469c190d212834b6087" + resolved "http://localhost:4873/@npmcli%2fpromise-spawn/-/promise-spawn-1.1.0.tgz#660009a5c54209142ec7c469c190d212834b6087" integrity sha512-FwbuYN9KXBkloLeIR3xRgI8dyOdfK/KzaJlChszNuwmUXD1lHXfLlSeo4n4KrKt2udIK9K9/TzlnyCA3ubM2fA== dependencies: infer-owner "^1.0.4" "@rollup/plugin-commonjs@^11.0.2": version "11.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.2.tgz#837cc6950752327cb90177b608f0928a4e60b582" + resolved "http://localhost:4873/@rollup%2fplugin-commonjs/-/plugin-commonjs-11.0.2.tgz#837cc6950752327cb90177b608f0928a4e60b582" integrity sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g== dependencies: "@rollup/pluginutils" "^3.0.0" @@ -232,14 +563,14 @@ "@rollup/plugin-json@^4.0.0": version "4.0.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.0.2.tgz#482185ee36ac7dd21c346e2dbcc22ffed0c6f2d6" + resolved "http://localhost:4873/@rollup%2fplugin-json/-/plugin-json-4.0.2.tgz#482185ee36ac7dd21c346e2dbcc22ffed0c6f2d6" integrity sha512-t4zJMc98BdH42mBuzjhQA7dKh0t4vMJlUka6Fz0c+iO5IVnWaEMiYBy1uBj9ruHZzXBW23IPDGL9oCzBkQ9Udg== dependencies: "@rollup/pluginutils" "^3.0.4" "@rollup/plugin-node-resolve@^7.1.0": version "7.1.1" - resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.1.tgz#8c6e59c4b28baf9d223028d0e450e06a485bb2b7" + resolved "http://localhost:4873/@rollup%2fplugin-node-resolve/-/plugin-node-resolve-7.1.1.tgz#8c6e59c4b28baf9d223028d0e450e06a485bb2b7" integrity sha512-14ddhD7TnemeHE97a4rLOhobfYvUVcaYuqTnL8Ti7Jxi9V9Jr5LY7Gko4HZ5k4h4vqQM0gBQt6tsp9xXW94WPA== dependencies: "@rollup/pluginutils" "^3.0.6" @@ -250,14 +581,14 @@ "@rollup/pluginutils@^3.0.0", "@rollup/pluginutils@^3.0.1", "@rollup/pluginutils@^3.0.4", "@rollup/pluginutils@^3.0.6": version "3.0.8" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.0.8.tgz#4e94d128d94b90699e517ef045422960d18c8fde" + resolved "http://localhost:4873/@rollup%2fpluginutils/-/pluginutils-3.0.8.tgz#4e94d128d94b90699e517ef045422960d18c8fde" integrity sha512-rYGeAc4sxcZ+kPG/Tw4/fwJODC3IXHYDH4qusdN/b6aLw5LPUbzpecYbEJh4sVQGPFJxd2dBU4kc1H3oy9/bnw== dependencies: estree-walker "^1.0.1" "@schematics/angular@9.1.0": version "9.1.0" - resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-9.1.0.tgz#fc0ad9099d3c3be3044d6b3f260cac6eb9f3e564" + resolved "http://localhost:4873/@schematics%2fangular/-/angular-9.1.0.tgz#fc0ad9099d3c3be3044d6b3f260cac6eb9f3e564" integrity sha512-qkehaITQ1S1udfnnBY5CXGWnk1iVFI8cZayjLUlRfD5w+6v9if3VIuqPssX96MqvkbjyRu1N214+ieaawzLmuA== dependencies: "@angular-devkit/core" "9.1.0" @@ -265,7 +596,7 @@ "@schematics/update@0.901.0": version "0.901.0" - resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.901.0.tgz#3e08231354f2c414c7d5b3bde1d9f7c08c664a74" + resolved "http://localhost:4873/@schematics%2fupdate/-/update-0.901.0.tgz#3e08231354f2c414c7d5b3bde1d9f7c08c664a74" integrity sha512-u2VESL1dgOSGZK/wcWEz0WcCU/yv764zhzCQerCwUtbV1CISSSDZ6x+prVYDXOdxWBGtDos2MbCF3GEJJI1T+w== dependencies: "@angular-devkit/core" "9.1.0" @@ -280,129 +611,222 @@ "@sindresorhus/is@^0.14.0": version "0.14.0" - resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + resolved "http://localhost:4873/@sindresorhus%2fis/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== +"@sinonjs/commons@^1.7.0": + version "1.7.1" + resolved "http://localhost:4873/@sinonjs%2fcommons/-/commons-1.7.1.tgz#da5fd19a5f71177a53778073978873964f49acf1" + integrity sha512-Debi3Baff1Qu1Unc3mjJ96MgpbwTn43S1+9yJ0llWygPwDNu2aaWBD6yc9y/Z8XDRNhx7U+u2UDg2OGQXkclUQ== + dependencies: + type-detect "4.0.8" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" - resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + resolved "http://localhost:4873/@szmarczak%2fhttp-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== dependencies: defer-to-connect "^1.0.1" "@tootallnate/once@1": version "1.0.0" - resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.0.0.tgz#9c13c2574c92d4503b005feca8f2e16cc1611506" + resolved "http://localhost:4873/@tootallnate%2fonce/-/once-1.0.0.tgz#9c13c2574c92d4503b005feca8f2e16cc1611506" integrity sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA== +"@types/babel__core@^7.1.0": + version "7.1.6" + resolved "http://localhost:4873/@types%2fbabel__core/-/babel__core-7.1.6.tgz#16ff42a5ae203c9af1c6e190ed1f30f83207b610" + integrity sha512-tTnhWszAqvXnhW7m5jQU9PomXSiKXk2sFxpahXvI20SZKu9ylPi8WtIxueZ6ehDWikPT0jeFujMj3X4ZHuf3Tg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.6.1" + resolved "http://localhost:4873/@types%2fbabel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" + integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.0.2" + resolved "http://localhost:4873/@types%2fbabel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.0.9" + resolved "http://localhost:4873/@types%2fbabel__traverse/-/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a" + integrity sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw== + dependencies: + "@babel/types" "^7.3.0" + "@types/color-name@^1.1.1": version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + resolved "http://localhost:4873/@types%2fcolor-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== "@types/estree@0.0.39": version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + resolved "http://localhost:4873/@types%2festree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/execa@^2.0.0": version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/execa/-/execa-2.0.0.tgz#4dd5523520c51834bf8d0c280f460814e5238281" + resolved "http://localhost:4873/@types%2fexeca/-/execa-2.0.0.tgz#4dd5523520c51834bf8d0c280f460814e5238281" integrity sha512-aBnkJ0r3khaZkHzu9pDZeWXrDg1N/ZtDGRQkK+KIqNVvvTvW+URXMUHQQCQMYdb2GPrcwu9Fq6l9iiT+pirIbg== dependencies: execa "*" "@types/fs-extra@^8.1.0": version "8.1.0" - resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.0.tgz#1114834b53c3914806cd03b3304b37b3bd221a4d" + resolved "http://localhost:4873/@types%2ffs-extra/-/fs-extra-8.1.0.tgz#1114834b53c3914806cd03b3304b37b3bd221a4d" integrity sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg== dependencies: "@types/node" "*" -"@types/jasmine@*", "@types/jasmine@~3.5.0": - version "3.5.10" - resolved "https://registry.yarnpkg.com/@types/jasmine/-/jasmine-3.5.10.tgz#a1a41012012b5da9d4b205ba9eba58f6cce2ab7b" - integrity sha512-3F8qpwBAiVc5+HPJeXJpbrl+XjawGmciN5LgiO7Gv1pl1RHtjoMNqZpqEksaPJW05ViKe8snYInRs6xB25Xdew== +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.1" + resolved "http://localhost:4873/@types%2fistanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== + +"@types/istanbul-lib-report@*": + version "3.0.0" + resolved "http://localhost:4873/@types%2fistanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^1.1.1": + version "1.1.1" + resolved "http://localhost:4873/@types%2fistanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== + dependencies: + "@types/istanbul-lib-coverage" "*" + "@types/istanbul-lib-report" "*" -"@types/jasminewd2@~2.0.3": - version "2.0.8" - resolved "https://registry.yarnpkg.com/@types/jasminewd2/-/jasminewd2-2.0.8.tgz#67afe5098d5ef2386073a7b7384b69a840dfe93b" - integrity sha512-d9p31r7Nxk0ZH0U39PTH0hiDlJ+qNVGjlt1ucOoTUptxb2v+Y5VMnsxfwN+i3hK4yQnqBi3FMmoMFcd1JHDxdg== +"@types/jest@^25.1.4": + version "25.1.4" + resolved "http://localhost:4873/@types%2fjest/-/jest-25.1.4.tgz#9e9f1e59dda86d3fd56afce71d1ea1b331f6f760" + integrity sha512-QDDY2uNAhCV7TMCITrxz+MRk1EizcsevzfeS6LykIlq2V1E5oO4wXG8V2ZEd9w7Snxeeagk46YbMgZ8ESHx3sw== dependencies: - "@types/jasmine" "*" + jest-diff "^25.1.0" + pretty-format "^25.1.0" "@types/node@*": version "13.9.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.5.tgz#59738bf30b31aea1faa2df7f4a5f55613750cf00" + resolved "http://localhost:4873/@types%2fnode/-/node-13.9.5.tgz#59738bf30b31aea1faa2df7f4a5f55613750cf00" integrity sha512-hkzMMD3xu6BrJpGVLeQ3htQQNAcOrJjX7WFmtK8zWQpz2UJf13LCFF2ALA7c9OVdvc2vQJeDdjfR35M0sBCxvw== "@types/node@^12.11.1": version "12.12.32" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.32.tgz#0ccc836d273e8a3cddf568daf22729cfa57c1925" + resolved "http://localhost:4873/@types%2fnode/-/node-12.12.32.tgz#0ccc836d273e8a3cddf568daf22729cfa57c1925" integrity sha512-44/reuCrwiQEsXud3I5X3sqI5jIXAmHB5xoiyKUw965olNHF3IWKjBLKK3F9LOSUZmK+oDt8jmyO637iX+hMgA== "@types/normalize-package-data@^2.4.0": version "2.4.0" - resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + resolved "http://localhost:4873/@types%2fnormalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/prettier@^1.19.0": + version "1.19.1" + resolved "http://localhost:4873/@types%2fprettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" + integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== + "@types/q@^0.0.32": version "0.0.32" - resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" + resolved "http://localhost:4873/@types%2fq/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= "@types/resolve@0.0.8": version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + resolved "http://localhost:4873/@types%2fresolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== dependencies: "@types/node" "*" "@types/selenium-webdriver@^3.0.0": version "3.0.17" - resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz#50bea0c3c2acc31c959c5b1e747798b3b3d06d4b" + resolved "http://localhost:4873/@types%2fselenium-webdriver/-/selenium-webdriver-3.0.17.tgz#50bea0c3c2acc31c959c5b1e747798b3b3d06d4b" integrity sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw== +"@types/stack-utils@^1.0.1": + version "1.0.1" + resolved "http://localhost:4873/@types%2fstack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== + +"@types/yargs-parser@*": + version "15.0.0" + resolved "http://localhost:4873/@types%2fyargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== + +"@types/yargs@^15.0.0": + version "15.0.4" + resolved "http://localhost:4873/@types%2fyargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" + integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== + dependencies: + "@types/yargs-parser" "*" + "@yarnpkg/lockfile@1.1.0": version "1.1.0" - resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + resolved "http://localhost:4873/@yarnpkg%2flockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== -accepts@~1.3.4: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== +abab@^2.0.0: + version "2.0.3" + resolved "http://localhost:4873/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== + +acorn-globals@^4.3.2: + version "4.3.4" + resolved "http://localhost:4873/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" + acorn "^6.0.1" + acorn-walk "^6.0.1" + +acorn-walk@^6.0.1: + version "6.2.0" + resolved "http://localhost:4873/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== + +acorn@^6.0.1: + version "6.4.1" + resolved "http://localhost:4873/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== + +acorn@^7.1.0: + version "7.1.1" + resolved "http://localhost:4873/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" + integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== adm-zip@^0.4.9: version "0.4.14" - resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9" + resolved "http://localhost:4873/adm-zip/-/adm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9" integrity sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g== -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= - agent-base@6: version "6.0.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.0.tgz#5d0101f19bbfaed39980b22ae866de153b93f09a" + resolved "http://localhost:4873/agent-base/-/agent-base-6.0.0.tgz#5d0101f19bbfaed39980b22ae866de153b93f09a" integrity sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw== dependencies: debug "4" agent-base@^4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + resolved "http://localhost:4873/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== dependencies: es6-promisify "^5.0.0" agentkeepalive@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.0.tgz#a48e040ed16745dd29ce923675f60c9c90f39ee0" + resolved "http://localhost:4873/agentkeepalive/-/agentkeepalive-4.1.0.tgz#a48e040ed16745dd29ce923675f60c9c90f39ee0" integrity sha512-CW/n1wxF8RpEuuiq6Vbn9S8m0VSYDMnZESqaJ6F2cWN9fY8rei2qaxweIaRgq+ek8TqfoFIsUjaGNKGGEHElSg== dependencies: debug "^4.1.0" @@ -411,15 +835,25 @@ agentkeepalive@^4.1.0: aggregate-error@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + resolved "http://localhost:4873/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== dependencies: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv@6.10.2: + version "6.10.2" + resolved "http://localhost:4873/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + ajv@6.12.0, ajv@^6.10.2, ajv@^6.5.5: version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + resolved "http://localhost:4873/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== dependencies: fast-deep-equal "^3.1.1" @@ -429,61 +863,69 @@ ajv@6.12.0, ajv@^6.10.2, ajv@^6.5.5: ansi-align@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + resolved "http://localhost:4873/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== dependencies: string-width "^3.0.0" ansi-colors@4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + resolved "http://localhost:4873/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-escapes@^4.2.1: version "4.3.1" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + resolved "http://localhost:4873/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: type-fest "^0.11.0" ansi-regex@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "http://localhost:4873/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + resolved "http://localhost:4873/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-regex@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + resolved "http://localhost:4873/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== ansi-styles@^2.2.1: version "2.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + resolved "http://localhost:4873/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= ansi-styles@^3.2.1: version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "http://localhost:4873/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + resolved "http://localhost:4873/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== dependencies: "@types/color-name" "^1.1.1" color-convert "^2.0.1" -anymatch@~3.1.1: +anymatch@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@^3.0.3, anymatch@~3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + resolved "http://localhost:4873/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: normalize-path "^3.0.0" @@ -491,115 +933,126 @@ anymatch@~3.1.1: 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" + resolved "http://localhost:4873/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" integrity sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA== -append-transform@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" - integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== - dependencies: - default-require-extensions "^2.0.0" - aproba@^1.1.1: version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + resolved "http://localhost:4873/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "http://localhost:4873/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "http://localhost:4873/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" aria-query@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + resolved "http://localhost:4873/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= dependencies: ast-types-flow "0.0.7" commander "^2.11.0" +arr-diff@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "http://localhost:4873/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "http://localhost:4873/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= + +array-equal@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= + array-union@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + resolved "http://localhost:4873/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + resolved "http://localhost:4873/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== +array-unique@^0.3.2: + version "0.3.2" + resolved "http://localhost:4873/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= arrify@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + resolved "http://localhost:4873/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= asap@^2.0.0, asap@~2.0.3: version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + resolved "http://localhost:4873/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= asn1@~0.2.3: version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + resolved "http://localhost:4873/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "http://localhost:4873/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assign-symbols@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + ast-types-flow@0.0.7: version "0.0.7" - resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + resolved "http://localhost:4873/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" - integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== - dependencies: - lodash "^4.17.14" +astral-regex@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== asynckit@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "http://localhost:4873/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= at-least-node@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + resolved "http://localhost:4873/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== atob@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + resolved "http://localhost:4873/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^9.6.5: version "9.7.5" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.5.tgz#8df10b9ff9b5814a8d411a5cfbab9c793c392376" + resolved "http://localhost:4873/autoprefixer/-/autoprefixer-9.7.5.tgz#8df10b9ff9b5814a8d411a5cfbab9c793c392376" integrity sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg== dependencies: browserslist "^4.11.0" @@ -612,96 +1065,101 @@ autoprefixer@^9.6.5: aws-sign2@~0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + resolved "http://localhost:4873/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + resolved "http://localhost:4873/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== axobject-query@2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" + resolved "http://localhost:4873/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== dependencies: ast-types-flow "0.0.7" -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= +babel-jest@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/babel-jest/-/babel-jest-25.2.4.tgz#b21b68d3af8f161c3e6e501e91f0dea8e652e344" + integrity sha512-+yDzlyJVWrqih9i2Cvjpt7COaN8vUwCsKGtxJLzg6I0xhxD54K8mvDUCliPKLufyzHh/c5C4MRj4Vk7VMjOjIg== + dependencies: + "@jest/transform" "^25.2.4" + "@jest/types" "^25.2.3" + "@types/babel__core" "^7.1.0" + babel-plugin-istanbul "^6.0.0" + babel-preset-jest "^25.2.1" + chalk "^3.0.0" + slash "^3.0.0" + +babel-plugin-istanbul@^6.0.0: + version "6.0.0" + resolved "http://localhost:4873/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^4.0.0" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^25.2.1: + version "25.2.1" + resolved "http://localhost:4873/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.2.1.tgz#d0003a1f3d5caa281e1107fe03bbf16b799f9955" + integrity sha512-HysbCQfJhxLlyxDbKcB2ucGYV0LjqK4h6dBoI3RtFuOxTiTWK6XGZMsHb0tGh8iJdV4hC6Z2GCHzVvDeh9i0lQ== + dependencies: + "@types/babel__traverse" "^7.0.6" + +babel-preset-jest@^25.2.1: + version "25.2.1" + resolved "http://localhost:4873/babel-preset-jest/-/babel-preset-jest-25.2.1.tgz#4ccd0e577f69aa11b71806edfe8b25a5c3ac93a2" + integrity sha512-zXHJBM5iR8oEO4cvdF83AQqqJf3tJrXy3x8nfu2Nlqvn4cneg4Ca8M7cQvC5S9BzDDy1O0tZ9iXru9J6E3ym+A== + dependencies: + "@babel/plugin-syntax-bigint" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + babel-plugin-jest-hoist "^25.2.1" balanced-match@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + resolved "http://localhost:4873/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= - -base64id@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" - integrity sha1-R2iMuZu2gE8OBtPnY7HDLlfY5rY= +base@^0.11.1: + version "0.11.2" + resolved "http://localhost:4873/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + resolved "http://localhost:4873/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= - dependencies: - callsite "1.0.0" - binary-extensions@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + resolved "http://localhost:4873/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== -blob@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== - blocking-proxy@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" + resolved "http://localhost:4873/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" integrity sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA== dependencies: minimist "^1.2.0" -bluebird@^3.3.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -body-parser@^1.16.1: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - boxen@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + resolved "http://localhost:4873/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== dependencies: ansi-align "^3.0.0" @@ -715,22 +1173,50 @@ boxen@^4.2.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "http://localhost:4873/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" -braces@^3.0.2, braces@~3.0.2: +braces@^2.3.1: + version "2.3.2" + resolved "http://localhost:4873/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +braces@^3.0.1, braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "http://localhost:4873/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" +browser-process-hrtime@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== + +browser-resolve@^1.11.3: + version "1.11.3" + resolved "http://localhost:4873/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== + dependencies: + resolve "1.1.7" + browserslist@^4.11.0, browserslist@^4.7.0: version "4.11.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.0.tgz#aef4357b10a8abda00f97aac7cd587b2082ba1ad" + resolved "http://localhost:4873/browserslist/-/browserslist-4.11.0.tgz#aef4357b10a8abda00f97aac7cd587b2082ba1ad" integrity sha512-WqEC7Yr5wUH5sg6ruR++v2SGOQYpyUdYYd4tZoAq1F7y+QXoLoYGXVbxhtaIqWmAJjtNTRjVD3HuJc1OXTel2A== dependencies: caniuse-lite "^1.0.30001035" @@ -740,57 +1226,48 @@ browserslist@^4.11.0, browserslist@^4.7.0: browserstack@^1.5.1: version "1.5.3" - resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" + resolved "http://localhost:4873/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" integrity sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg== dependencies: https-proxy-agent "^2.2.1" -buffer-alloc-unsafe@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" - integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== - -buffer-alloc@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" - integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== +bs-logger@0.x: + version "0.2.6" + resolved "http://localhost:4873/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== dependencies: - buffer-alloc-unsafe "^1.1.0" - buffer-fill "^1.0.0" + fast-json-stable-stringify "2.x" -buffer-fill@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" - integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= +bser@2.1.1: + version "2.1.1" + resolved "http://localhost:4873/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" -buffer-from@^1.0.0: +buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + resolved "http://localhost:4873/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== builtin-modules@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + resolved "http://localhost:4873/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= builtin-modules@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + resolved "http://localhost:4873/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== builtins@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + resolved "http://localhost:4873/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - cacache@^15.0.0: version "15.0.0" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.0.tgz#133b59edbd2a37ea8ef2d54964c6f247e47e5059" + resolved "http://localhost:4873/cacache/-/cacache-15.0.0.tgz#133b59edbd2a37ea8ef2d54964c6f247e47e5059" integrity sha512-L0JpXHhplbJSiDGzyJJnJCTL7er7NzbBgxzVqLswEb4bO91Zbv17OUMuUeu/q0ZwKn3V+1HM4wb9tO4eVE/K8g== dependencies: chownr "^1.1.2" @@ -811,9 +1288,24 @@ cacache@^15.0.0: tar "^6.0.1" unique-filename "^1.1.1" +cache-base@^1.0.1: + version "1.0.1" + resolved "http://localhost:4873/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + cacheable-request@^6.0.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + resolved "http://localhost:4873/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== dependencies: clone-response "^1.0.2" @@ -824,34 +1316,41 @@ cacheable-request@^6.0.0: normalize-url "^4.1.0" responselike "^1.0.2" -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= +callsites@^3.0.0: + version "3.1.0" + resolved "http://localhost:4873/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "http://localhost:4873/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001036: version "1.0.30001038" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz#44da3cbca2ab6cb6aa83d1be5d324e17f141caff" + resolved "http://localhost:4873/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz#44da3cbca2ab6cb6aa83d1be5d324e17f141caff" integrity sha512-zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ== canonical-path@1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/canonical-path/-/canonical-path-1.0.0.tgz#fcb470c23958def85081856be7a86e904f180d1d" + resolved "http://localhost:4873/canonical-path/-/canonical-path-1.0.0.tgz#fcb470c23958def85081856be7a86e904f180d1d" integrity sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg== +capture-exit@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== + dependencies: + rsvp "^4.8.4" + caseless@~0.12.0: version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + resolved "http://localhost:4873/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "http://localhost:4873/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" @@ -862,7 +1361,7 @@ chalk@^1.1.1, chalk@^1.1.3: chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "http://localhost:4873/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -871,7 +1370,7 @@ chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2: chalk@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + resolved "http://localhost:4873/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== dependencies: ansi-styles "^4.1.0" @@ -879,12 +1378,12 @@ chalk@^3.0.0: chardet@^0.7.0: version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "http://localhost:4873/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== "chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.2.1: version "3.3.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + resolved "http://localhost:4873/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== dependencies: anymatch "~3.1.1" @@ -899,51 +1398,61 @@ chardet@^0.7.0: chownr@^1.1.2, chownr@^1.1.3, chownr@^1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "http://localhost:4873/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + resolved "http://localhost:4873/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== +class-utils@^0.3.5: + version "0.3.6" + resolved "http://localhost:4873/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + clean-css@^4.1.11: version "4.2.3" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + resolved "http://localhost:4873/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== dependencies: source-map "~0.6.0" clean-stack@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "http://localhost:4873/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-boxes@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" + resolved "http://localhost:4873/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== cli-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "http://localhost:4873/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-spinners@^2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" + resolved "http://localhost:4873/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== cli-width@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + resolved "http://localhost:4873/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= cliui@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + resolved "http://localhost:4873/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: string-width "^4.2.0" @@ -952,24 +1461,29 @@ cliui@^6.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" + resolved "http://localhost:4873/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= dependencies: mimic-response "^1.0.0" clone@^1.0.2: version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "http://localhost:4873/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= clone@^2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + resolved "http://localhost:4873/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= +co@^4.6.0: + version "4.6.0" + resolved "http://localhost:4873/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= + codelyzer@^5.1.2: version "5.2.2" - resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-5.2.2.tgz#d0530a455784e6bea0b6d7e97166c73c30a5347f" + resolved "http://localhost:4873/codelyzer/-/codelyzer-5.2.2.tgz#d0530a455784e6bea0b6d7e97166c73c30a5347f" integrity sha512-jB4FZ1Sx7kZhvZVdf+N2BaKTdrrNZOL0Bj10RRfrhHrb3zEvXjJvvq298JPMJAiyiCS/v4zs1QlGU0ip7xGqeA== dependencies: app-root-path "^2.2.1" @@ -982,85 +1496,73 @@ codelyzer@^5.1.2: source-map "^0.5.7" sprintf-js "^1.1.2" +collect-v8-coverage@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz#150ee634ac3650b71d9c985eb7f608942334feb1" + integrity sha512-VKIhJgvk8E1W28m5avZ2Gv2Ruv5YiF56ug2oclvaG9md69BuZImMG2sk9g7QNKLUbtYAKQjXjYxbYZVUlMMKmQ== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + color-convert@^1.9.0: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "http://localhost:4873/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "http://localhost:4873/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "http://localhost:4873/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@~1.1.4: version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "http://localhost:4873/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colors@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - -colors@^1.1.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" - integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== - combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "http://localhost:4873/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^2.11.0, commander@^2.12.1, commander@^2.20.0: version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "http://localhost:4873/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + resolved "http://localhost:4873/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== -compare-versions@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" - integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= +component-emitter@^1.2.1: + version "1.3.0" + resolved "http://localhost:4873/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "http://localhost:4873/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= configstore@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + resolved "http://localhost:4873/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== dependencies: dot-prop "^5.2.0" @@ -1070,36 +1572,16 @@ configstore@^5.0.1: write-file-atomic "^3.0.0" xdg-basedir "^4.0.0" -connect@^3.6.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/connect/-/connect-3.7.0.tgz#5d49348910caa5e07a01800b030d0c35f20484f8" - integrity sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ== - dependencies: - debug "2.6.9" - finalhandler "1.1.2" - parseurl "~1.3.3" - utils-merge "1.0.1" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -convert-source-map@^1.5.1: +convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + resolved "http://localhost:4873/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= - copy-concurrently@^1.0.0: version "1.0.5" - resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + resolved "http://localhost:4873/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" @@ -1109,14 +1591,30 @@ copy-concurrently@^1.0.0: rimraf "^2.5.4" run-queue "^1.0.0" +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "http://localhost:4873/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + resolved "http://localhost:4873/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cross-spawn@^6.0.0: + version "6.0.5" + resolved "http://localhost:4873/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^7.0.0: version "7.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + resolved "http://localhost:4873/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== dependencies: path-key "^3.1.0" @@ -1125,19 +1623,19 @@ cross-spawn@^7.0.0: crypto-random-string@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + resolved "http://localhost:4873/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== css-parse@~2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" + resolved "http://localhost:4873/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= dependencies: css "^2.0.0" css-selector-tokenizer@^0.7.1: version "0.7.2" - resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" + resolved "http://localhost:4873/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" integrity sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw== dependencies: cssesc "^3.0.0" @@ -1146,7 +1644,7 @@ css-selector-tokenizer@^0.7.1: css@^2.0.0: version "2.2.4" - resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + resolved "http://localhost:4873/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== dependencies: inherits "^2.0.3" @@ -1156,127 +1654,168 @@ css@^2.0.0: cssauron@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" + resolved "http://localhost:4873/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" integrity sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg= dependencies: through X.X.X cssesc@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "http://localhost:4873/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== +cssom@^0.4.1: + version "0.4.4" + resolved "http://localhost:4873/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== + +cssom@~0.3.6: + version "0.3.8" + resolved "http://localhost:4873/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.0.0: + version "2.2.0" + resolved "http://localhost:4873/cssstyle/-/cssstyle-2.2.0.tgz#e4c44debccd6b7911ed617a4395e5754bba59992" + integrity sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA== + dependencies: + cssom "~0.3.6" + cuint@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + resolved "http://localhost:4873/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= -custom-event@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/custom-event/-/custom-event-1.0.1.tgz#5d02a46850adf1b4a317946a3928fccb5bfd0425" - integrity sha1-XQKkaFCt8bSjF5RqOSj8y1v9BCU= - damerau-levenshtein@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + resolved "http://localhost:4873/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== dashdash@^1.12.0: version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "http://localhost:4873/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" -date-format@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/date-format/-/date-format-2.1.0.tgz#31d5b5ea211cf5fd764cd38baf9d033df7e125cf" - integrity sha512-bYQuGLeFxhkxNOF3rcMtiZxvCBAquGzZm6oWA1oZ0g2THUzivaRhv8uOhdr19LmoobSOLoIAxeUK2RdbM8IFTA== - -debug@2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== +data-urls@^1.1.0: + version "1.1.0" + resolved "http://localhost:4873/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== dependencies: - ms "2.0.0" + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" debug@4, debug@4.1.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + resolved "http://localhost:4873/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.2.6: +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "http://localhost:4873/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.0.0, debug@^3.1.0: version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + resolved "http://localhost:4873/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" debug@~3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + resolved "http://localhost:4873/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" debuglog@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + resolved "http://localhost:4873/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= decamelize@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "http://localhost:4873/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decode-uri-component@^0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + resolved "http://localhost:4873/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= decompress-response@^3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + resolved "http://localhost:4873/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= dependencies: mimic-response "^1.0.0" deep-extend@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "http://localhost:4873/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== -default-require-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" - integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= - dependencies: - strip-bom "^3.0.0" +deep-is@~0.1.3: + version "0.1.3" + resolved "http://localhost:4873/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + +deepmerge@^4.2.2: + version "4.2.2" + resolved "http://localhost:4873/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== defaults@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + resolved "http://localhost:4873/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: clone "^1.0.2" defer-to-connect@^1.0.1: version "1.1.3" - resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + resolved "http://localhost:4873/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + resolved "http://localhost:4873/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" -del@^2.2.0: +define-property@^0.2.5: + version "0.2.5" + resolved "http://localhost:4873/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "http://localhost:4873/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +del@^2.2.0: version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + resolved "http://localhost:4873/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= dependencies: globby "^5.0.0" @@ -1289,173 +1828,120 @@ del@^2.2.0: delayed-stream@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "http://localhost:4873/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -depd@^1.1.2, depd@~1.1.2: +depd@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + resolved "http://localhost:4873/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= dependency-graph@^0.7.2: version "0.7.2" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.7.2.tgz#91db9de6eb72699209d88aea4c1fd5221cac1c49" + resolved "http://localhost:4873/dependency-graph/-/dependency-graph-0.7.2.tgz#91db9de6eb72699209d88aea4c1fd5221cac1c49" integrity sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ== +detect-newline@^3.0.0: + version "3.1.0" + resolved "http://localhost:4873/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + dezalgo@^1.0.0: version "1.0.3" - resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + resolved "http://localhost:4873/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= dependencies: asap "^2.0.0" wrappy "1" -di@^0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/di/-/di-0.0.1.tgz#806649326ceaa7caa3306d75d985ea2748ba913c" - integrity sha1-gGZJMmzqp8qjMG112YXqJ0i6kTw= +diff-sequences@^25.2.1: + version "25.2.1" + resolved "http://localhost:4873/diff-sequences/-/diff-sequences-25.2.1.tgz#fcfe8aa07dd9b0c648396a478dabca8e76c6ab27" + integrity sha512-foe7dXnGlSh3jR1ovJmdv+77VQj98eKCHHwJPbZ2eEf0fHwKbkZicpPxEch9smZ+n2dnF6QFwkOQdLq9hpeJUg== diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "http://localhost:4873/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== -dom-serialize@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/dom-serialize/-/dom-serialize-2.2.1.tgz#562ae8999f44be5ea3076f5419dcd59eb43ac95b" - integrity sha1-ViromZ9Evl6jB29UGdzVnrQ6yVs= +domexception@^1.0.1: + version "1.0.1" + resolved "http://localhost:4873/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== dependencies: - custom-event "~1.0.0" - ent "~2.2.0" - extend "^3.0.0" - void-elements "^2.0.0" + webidl-conversions "^4.0.2" dot-prop@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + resolved "http://localhost:4873/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== dependencies: is-obj "^2.0.0" duplexer3@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + resolved "http://localhost:4873/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= ecc-jsbn@~0.1.1: version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "http://localhost:4873/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" safer-buffer "^2.1.0" -ee-first@1.1.1: - version "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.380: version "1.3.390" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.390.tgz#a49e67dea22e52ea8027c475dd5447b1c00b1d4e" + resolved "http://localhost:4873/electron-to-chromium/-/electron-to-chromium-1.3.390.tgz#a49e67dea22e52ea8027c475dd5447b1c00b1d4e" integrity sha512-4RvbM5x+002gKI8sltkqWEk5pptn0UnzekUx8RTThAMPDSb8jjpm6SwGiSnEve7f85biyZl8DMXaipaCxDjXag== emoji-regex@^7.0.1: version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + resolved "http://localhost:4873/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== emoji-regex@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "http://localhost:4873/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - encoding@^0.1.12: version "0.1.12" - resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + resolved "http://localhost:4873/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= dependencies: iconv-lite "~0.4.13" end-of-stream@^1.1.0: version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "http://localhost:4873/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" -engine.io-client@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.2.1.tgz#6f54c0475de487158a1a7c77d10178708b6add36" - integrity sha512-y5AbkytWeM4jQr7m/koQLc5AxpRKC1hEVUb/s1FUAWEJq5AzJJ4NLvzuKPuxtDi5Mq755WuDvZ6Iv2rXj4PTzw== - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~3.1.0" - engine.io-parser "~2.1.1" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~3.3.1" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.3.tgz#757ab970fbf2dfb32c7b74b033216d5739ef79a6" - integrity sha512-6HXPre2O4Houl7c4g7Ic/XzPnHBvaEmN90vtRO9uLmwtRqQmTOw0QMevL1TOfL2Cpu1VzsaTmMotQgMdkzGkVA== - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io@~3.2.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.2.1.tgz#b60281c35484a70ee0351ea0ebff83ec8c9522a2" - integrity sha512-+VlKzHzMhaU+GsCIg4AoXF1UdDFjHHwMmMKqMJNDNLlUlejz58FCy4LBqB2YVJskHGYl06BatYWKP2TVdVXE5w== - dependencies: - accepts "~1.3.4" - base64id "1.0.0" - cookie "0.3.1" - debug "~3.1.0" - engine.io-parser "~2.1.0" - ws "~3.3.1" - -ent@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ent/-/ent-2.2.0.tgz#e964219325a21d05f44466a2f686ed6ce5f5dd1d" - integrity sha1-6WQhkyWiHQX0RGai9obtbOX13R0= - err-code@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + resolved "http://localhost:4873/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= errno@^0.1.1: version "0.1.7" - resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + resolved "http://localhost:4873/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== dependencies: prr "~1.0.1" error-ex@^1.3.1: version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "http://localhost:4873/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.17.0-next.1: +es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: version "1.17.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + resolved "http://localhost:4873/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== dependencies: es-to-primitive "^1.2.1" @@ -1472,7 +1958,7 @@ es-abstract@^1.17.0-next.1: es-to-primitive@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "http://localhost:4873/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -1481,49 +1967,66 @@ es-to-primitive@^1.2.1: es6-promise@^4.0.3: version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + resolved "http://localhost:4873/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== es6-promisify@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + resolved "http://localhost:4873/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= dependencies: es6-promise "^4.0.3" escape-goat@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + resolved "http://localhost:4873/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== -escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -esprima@^4.0.0: +escodegen@^1.11.1: + version "1.14.1" + resolved "http://localhost:4873/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" + integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== + dependencies: + esprima "^4.0.1" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "http://localhost:4873/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +estraverse@^4.2.0: + version "4.3.0" + resolved "http://localhost:4873/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + estree-walker@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + resolved "http://localhost:4873/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== -eventemitter3@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" - integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== +esutils@^2.0.2: + version "2.0.3" + resolved "http://localhost:4873/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +exec-sh@^0.3.2: + version "0.3.4" + resolved "http://localhost:4873/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== execa@*, execa@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.0.tgz#7f37d6ec17f09e6b8fc53288611695b6d12b9daf" + resolved "http://localhost:4873/execa/-/execa-4.0.0.tgz#7f37d6ec17f09e6b8fc53288611695b6d12b9daf" integrity sha512-JbDUxwV3BoT5ZVXQrSVbAiaXhXUkIwvbhPIwZ0N13kX+5yCzOhUNdocxB/UQRuYOHRYYwAxKYwJYc0T4D12pDA== dependencies: cross-spawn "^7.0.0" @@ -1536,152 +2039,237 @@ execa@*, execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== + dependencies: + cross-spawn "^6.0.0" + get-stream "^4.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^3.2.0: + version "3.4.0" + resolved "http://localhost:4873/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + p-finally "^2.0.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + exit@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + resolved "http://localhost:4873/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= -extend@^3.0.0, extend@~3.0.2: +expand-brackets@^2.1.4: + version "2.1.4" + resolved "http://localhost:4873/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +expect@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/expect/-/expect-25.2.4.tgz#b66e0777c861034ebc21730bb34e1839d5d46806" + integrity sha512-hfuPhPds4yOsZtIw4kwAg70r0hqGmpqekgA+VX7pf/3wZ6FY+xIOXZhNsPMMMsspYG/YIsbAiwqsdnD4Ht+bCA== + dependencies: + "@jest/types" "^25.2.3" + ansi-styles "^4.0.0" + jest-get-type "^25.2.1" + jest-matcher-utils "^25.2.3" + jest-message-util "^25.2.4" + jest-regex-util "^25.2.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "http://localhost:4873/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "http://localhost:4873/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "http://localhost:4873/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + resolved "http://localhost:4873/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" iconv-lite "^0.4.24" tmp "^0.0.33" +extglob@^2.0.4: + version "2.0.4" + resolved "http://localhost:4873/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + extsprintf@1.3.0: version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "http://localhost:4873/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + resolved "http://localhost:4873/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "http://localhost:4873/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + fast-deep-equal@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + resolved "http://localhost:4873/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== -fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@^2.0.0: +fast-json-stable-stringify@2.0.0: + version "2.0.0" + resolved "http://localhost:4873/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= + +fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "http://localhost:4873/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "http://localhost:4873/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= + fastparse@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + resolved "http://localhost:4873/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== +fb-watchman@^2.0.0: + version "2.0.1" + resolved "http://localhost:4873/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== + dependencies: + bser "2.1.1" + figures@^3.0.0: version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "http://localhost:4873/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" -fileset@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0" - integrity sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA= +fill-range@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: - glob "^7.0.3" - minimatch "^3.0.3" + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "http://localhost:4873/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" -finalhandler@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - find-parent-dir@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + resolved "http://localhost:4873/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= find-up@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + resolved "http://localhost:4873/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" -find-up@^4.1.0: +find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "http://localhost:4873/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" path-exists "^4.0.0" -flatted@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" - integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== - -follow-redirects@^1.0.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.11.0.tgz#afa14f08ba12a52963140fe43212658897bc0ecb" - integrity sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA== - dependencies: - debug "^3.0.0" +for-in@^1.0.2: + version "1.0.2" + resolved "http://localhost:4873/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= forever-agent@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + resolved "http://localhost:4873/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@~2.3.2: version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + resolved "http://localhost:4873/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" combined-stream "^1.0.6" mime-types "^2.1.12" +fragment-cache@^0.2.1: + version "0.2.1" + resolved "http://localhost:4873/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + fs-extra@4.0.2: version "4.0.2" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" + resolved "http://localhost:4873/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" integrity sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s= dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" universalify "^0.1.0" -fs-extra@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - fs-extra@^9.0.0: version "9.0.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" + resolved "http://localhost:4873/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g== dependencies: at-least-node "^1.0.0" @@ -1691,14 +2279,14 @@ fs-extra@^9.0.0: fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "http://localhost:4873/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs-write-stream-atomic@^1.0.8: version "1.0.10" - resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + resolved "http://localhost:4873/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: graceful-fs "^4.1.2" @@ -1708,55 +2296,65 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "http://localhost:4873/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= -fsevents@~2.1.2: +fsevents@^2.1.2, fsevents@~2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + resolved "http://localhost:4873/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "http://localhost:4873/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +gensync@^1.0.0-beta.1: + version "1.0.0-beta.1" + resolved "http://localhost:4873/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== + get-caller-file@^2.0.1: version "2.0.5" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "http://localhost:4873/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-stream@^4.1.0: +get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + resolved "http://localhost:4873/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-stream@^5.0.0, get-stream@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + resolved "http://localhost:4873/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== dependencies: pump "^3.0.0" +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "http://localhost:4873/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + getpass@^0.1.1: version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "http://localhost:4873/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" glob-parent@~5.1.0: version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + resolved "http://localhost:4873/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + resolved "http://localhost:4873/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" @@ -1768,19 +2366,19 @@ glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl global-dirs@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" + resolved "http://localhost:4873/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== dependencies: ini "^1.3.5" globals@^11.1.0: version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "http://localhost:4873/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globby@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + resolved "http://localhost:4873/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= dependencies: array-union "^1.0.1" @@ -1792,7 +2390,7 @@ globby@^5.0.0: got@^9.6.0: version "9.6.0" - resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + resolved "http://localhost:4873/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== dependencies: "@sindresorhus/is" "^0.14.0" @@ -1807,19 +2405,24 @@ got@^9.6.0: to-readable-stream "^1.0.0" url-parse-lax "^3.0.0" -graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + resolved "http://localhost:4873/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== +growly@^1.3.0: + version "1.3.0" + resolved "http://localhost:4873/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= + har-schema@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + resolved "http://localhost:4873/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + resolved "http://localhost:4873/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== dependencies: ajv "^6.5.5" @@ -1827,104 +2430,110 @@ har-validator@~5.1.3: has-ansi@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "http://localhost:4873/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== - dependencies: - isarray "2.0.1" - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= - has-flag@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "http://localhost:4873/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "http://localhost:4873/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + resolved "http://localhost:4873/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== +has-value@^0.3.1: + version "0.3.1" + resolved "http://localhost:4873/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "http://localhost:4873/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + has-yarn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + resolved "http://localhost:4873/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "http://localhost:4873/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hosted-git-info@^2.1.4: version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + resolved "http://localhost:4873/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== hosted-git-info@^3.0.2: version "3.0.4" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" + resolved "http://localhost:4873/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ== dependencies: lru-cache "^5.1.1" +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "http://localhost:4873/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== + dependencies: + whatwg-encoding "^1.0.1" + html-escaper@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "http://localhost:4873/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-cache-semantics@^4.0.0, http-cache-semantics@^4.0.4: version "4.1.0" - resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + resolved "http://localhost:4873/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - http-proxy-agent@^4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + resolved "http://localhost:4873/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" agent-base "6" debug "4" -http-proxy@^1.13.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" - integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - http-signature@~1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + resolved "http://localhost:4873/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" @@ -1933,7 +2542,7 @@ http-signature@~1.2.0: https-proxy-agent@^2.2.1: version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + resolved "http://localhost:4873/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== dependencies: agent-base "^4.3.0" @@ -1941,7 +2550,7 @@ https-proxy-agent@^2.2.1: https-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + resolved "http://localhost:4873/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== dependencies: agent-base "6" @@ -1949,73 +2558,76 @@ https-proxy-agent@^5.0.0: human-signals@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + resolved "http://localhost:4873/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== humanize-ms@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "http://localhost:4873/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= dependencies: ms "^2.0.0" iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "http://localhost:4873/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iferr@^0.1.5: version "0.1.5" - resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + resolved "http://localhost:4873/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-walk@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + resolved "http://localhost:4873/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" image-size@~0.5.0: version "0.5.5" - resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + resolved "http://localhost:4873/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= immediate@~3.0.5: version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + resolved "http://localhost:4873/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= import-lazy@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + resolved "http://localhost:4873/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= +import-local@^3.0.2: + version "3.0.2" + resolved "http://localhost:4873/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + imurmurhash@^0.1.4: version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "http://localhost:4873/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "http://localhost:4873/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - infer-owner@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + resolved "http://localhost:4873/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "http://localhost:4873/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" @@ -2023,27 +2635,22 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "http://localhost:4873/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - ini@1.3.5, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + resolved "http://localhost:4873/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== injection-js@^2.2.1: version "2.3.0" - resolved "https://registry.yarnpkg.com/injection-js/-/injection-js-2.3.0.tgz#56d807282dfaf2f9663f45373c4206d7793c5dd6" + resolved "http://localhost:4873/injection-js/-/injection-js-2.3.0.tgz#56d807282dfaf2f9663f45373c4206d7793c5dd6" integrity sha512-rhS6E5jv603kbaO72ylOt0hGF1LT03oqQ4GU5KOO0qSaRbIWmdUCHjXq+VT79jL6/NmXtw9ccfK6dh/CzjoYjA== inquirer@7.1.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" + resolved "http://localhost:4873/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== dependencies: ansi-escapes "^4.2.1" @@ -2060,70 +2667,143 @@ inquirer@7.1.0: strip-ansi "^6.0.0" through "^2.3.6" +ip-regex@^2.1.0: + version "2.1.0" + resolved "http://localhost:4873/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= + ip@1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + resolved "http://localhost:4873/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "http://localhost:4873/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + is-arrayish@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "http://localhost:4873/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "http://localhost:4873/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" +is-buffer@^1.1.5: + version "1.1.6" + resolved "http://localhost:4873/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + resolved "http://localhost:4873/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== is-ci@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + resolved "http://localhost:4873/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: ci-info "^2.0.0" +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "http://localhost:4873/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + is-date-object@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + resolved "http://localhost:4873/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== +is-descriptor@^0.1.0: + version "0.1.6" + resolved "http://localhost:4873/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "http://localhost:4873/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + is-docker@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" + resolved "http://localhost:4873/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "http://localhost:4873/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "http://localhost:4873/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "http://localhost:4873/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + resolved "http://localhost:4873/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "http://localhost:4873/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "http://localhost:4873/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + resolved "http://localhost:4873/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" is-installed-globally@^0.3.1: version "0.3.1" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.1.tgz#679afef819347a72584617fd19497f010b8ed35f" + resolved "http://localhost:4873/is-installed-globally/-/is-installed-globally-0.3.1.tgz#679afef819347a72584617fd19497f010b8ed35f" integrity sha512-oiEcGoQbGc+3/iijAijrK2qFpkNoNjsHOm/5V5iaeydyrS/hnwaRCEgH5cpW0P3T1lSjV5piB7S5b5lEugNLhg== dependencies: global-dirs "^2.0.1" @@ -2131,222 +2811,207 @@ is-installed-globally@^0.3.1: is-interactive@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "http://localhost:4873/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-lambda@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + resolved "http://localhost:4873/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= is-module@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + resolved "http://localhost:4873/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= is-npm@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + resolved "http://localhost:4873/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== +is-number@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" + is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "http://localhost:4873/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + resolved "http://localhost:4873/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-path-cwd@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + resolved "http://localhost:4873/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= is-path-in-cwd@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + resolved "http://localhost:4873/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + resolved "http://localhost:4873/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= dependencies: path-is-inside "^1.0.1" is-path-inside@^3.0.1: version "3.0.2" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + resolved "http://localhost:4873/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "http://localhost:4873/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + is-promise@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + resolved "http://localhost:4873/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-reference@^1.1.2: version "1.1.4" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" + resolved "http://localhost:4873/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw== dependencies: "@types/estree" "0.0.39" is-regex@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + resolved "http://localhost:4873/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== dependencies: has "^1.0.3" +is-stream@^1.1.0: + version "1.1.0" + resolved "http://localhost:4873/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + is-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + resolved "http://localhost:4873/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== is-symbol@^1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + resolved "http://localhost:4873/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: has-symbols "^1.0.1" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "http://localhost:4873/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= +is-windows@^1.0.2: + version "1.0.2" + resolved "http://localhost:4873/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + is-wsl@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" + resolved "http://localhost:4873/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== is-yarn-global@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + resolved "http://localhost:4873/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= - -isarray@~1.0.0: +isarray@1.0.0, isarray@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "http://localhost:4873/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= -isbinaryfile@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" - integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== - dependencies: - buffer-alloc "^1.2.0" - isexe@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "http://localhost:4873/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= +isobject@^2.0.0: + version "2.1.0" + resolved "http://localhost:4873/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "http://localhost:4873/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + isstream@~0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + resolved "http://localhost:4873/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-api@^2.1.6: - version "2.1.6" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-2.1.6.tgz#d61702a9d1c66ad89d92e66d401e16b0bda4a35f" - integrity sha512-x0Eicp6KsShG1k1rMgBAi/1GgY7kFGEBwQpw3PXGEmu+rBcBNhqU8g2DgY9mlepAsLPzrzrbqSgCGANnki4POA== - dependencies: - async "^2.6.2" - compare-versions "^3.4.0" - fileset "^2.0.3" - istanbul-lib-coverage "^2.0.5" - istanbul-lib-hook "^2.0.7" - istanbul-lib-instrument "^3.3.0" - istanbul-lib-report "^2.0.8" - istanbul-lib-source-maps "^3.0.6" - istanbul-reports "^2.2.4" - js-yaml "^3.13.1" - make-dir "^2.1.0" - minimatch "^3.0.4" - once "^1.4.0" - -istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== - -istanbul-lib-hook@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133" - integrity sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== - dependencies: - append-transform "^1.0.0" +istanbul-lib-coverage@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + integrity sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg== -istanbul-lib-instrument@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== - dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" +istanbul-lib-instrument@^4.0.0: + version "4.0.1" + resolved "http://localhost:4873/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" + integrity sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg== + dependencies: + "@babel/core" "^7.7.5" + "@babel/parser" "^7.7.5" + "@babel/template" "^7.7.4" + "@babel/traverse" "^7.7.4" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.0.0" + semver "^6.3.0" -istanbul-lib-report@^2.0.8: - version "2.0.8" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== +istanbul-lib-report@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" + istanbul-lib-coverage "^3.0.0" + make-dir "^3.0.0" + supports-color "^7.1.0" -istanbul-lib-source-maps@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== +istanbul-lib-source-maps@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== dependencies: debug "^4.1.1" - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - rimraf "^2.6.3" + istanbul-lib-coverage "^3.0.0" source-map "^0.6.1" -istanbul-reports@^2.2.4: - version "2.2.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" - integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== +istanbul-reports@^3.0.0: + version "3.0.1" + resolved "http://localhost:4873/istanbul-reports/-/istanbul-reports-3.0.1.tgz#1343217244ad637e0c3b18e7f6b746941a9b5e9a" + integrity sha512-Vm9xwCiQ8t2cNNnckyeAV0UdxKpcQUz4nMxsBvIu8n2kmPSiyb5uaF/8LpmKr+yqL/MdOXaX2Nmdo4Qyxium9Q== dependencies: html-escaper "^2.0.0" - -jasmine-core@^3.5.0, 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== + istanbul-lib-report "^3.0.0" jasmine-core@~2.8.0: version "2.8.0" - resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" + resolved "http://localhost:4873/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= -jasmine-spec-reporter@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/jasmine-spec-reporter/-/jasmine-spec-reporter-4.2.1.tgz#1d632aec0341670ad324f92ba84b4b32b35e9e22" - integrity sha512-FZBoZu7VE5nR7Nilzy+Np8KuVIOxF4oXDPDknehCYBDE080EnlPu0afdZNmpGDBRCUBv3mj5qgqCRmk6W/K8vg== - dependencies: - colors "1.1.2" - jasmine@2.8.0: version "2.8.0" - resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" + resolved "http://localhost:4873/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= dependencies: exit "^0.1.2" @@ -2355,17 +3020,378 @@ jasmine@2.8.0: jasminewd2@^2.1.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" + resolved "http://localhost:4873/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= +jest-changed-files@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/jest-changed-files/-/jest-changed-files-25.2.3.tgz#ad19deef9e47ba37efb432d2c9a67dfd97cc78af" + integrity sha512-EFxy94dvvbqRB36ezIPLKJ4fDIC+jAdNs8i8uTwFpaXd6H3LVc3ova1lNS4ZPWk09OCR2vq5kSdSQgar7zMORg== + dependencies: + "@jest/types" "^25.2.3" + execa "^3.2.0" + throat "^5.0.0" + +jest-cli@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest-cli/-/jest-cli-25.2.4.tgz#021c2383904696597abc060dcb133c82ebd8bfcc" + integrity sha512-zeY2pRDWKj2LZudIncvvguwLMEdcnJqc2jJbwza1beqi80qqLvkPF/BjbFkK2sIV3r+mfTJS+7ITrvK6pCdRjg== + dependencies: + "@jest/core" "^25.2.4" + "@jest/test-result" "^25.2.4" + "@jest/types" "^25.2.3" + chalk "^3.0.0" + exit "^0.1.2" + import-local "^3.0.2" + is-ci "^2.0.0" + jest-config "^25.2.4" + jest-util "^25.2.3" + jest-validate "^25.2.3" + prompts "^2.0.1" + realpath-native "^2.0.0" + yargs "^15.3.1" + +jest-config@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest-config/-/jest-config-25.2.4.tgz#f4f33238979f225683179c89d1e402893008975d" + integrity sha512-fxy3nIpwJqOUQJRVF/q+pNQb6dv5b9YufOeCbpPZJ/md1zXpiupbhfehpfODhnKOfqbzSiigtSLzlWWmbRxnqQ== + dependencies: + "@babel/core" "^7.1.0" + "@jest/test-sequencer" "^25.2.4" + "@jest/types" "^25.2.3" + babel-jest "^25.2.4" + chalk "^3.0.0" + deepmerge "^4.2.2" + glob "^7.1.1" + jest-environment-jsdom "^25.2.4" + jest-environment-node "^25.2.4" + jest-get-type "^25.2.1" + jest-jasmine2 "^25.2.4" + jest-regex-util "^25.2.1" + jest-resolve "^25.2.3" + jest-util "^25.2.3" + jest-validate "^25.2.3" + micromatch "^4.0.2" + pretty-format "^25.2.3" + realpath-native "^2.0.0" + +jest-diff@^25.1.0, jest-diff@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/jest-diff/-/jest-diff-25.2.3.tgz#54d601a0a754ef26e808a8c8dbadd278c215aa3f" + integrity sha512-VtZ6LAQtaQpFsmEzps15dQc5ELbJxy4L2DOSo2Ev411TUEtnJPkAMD7JneVypeMJQ1y3hgxN9Ao13n15FAnavg== + dependencies: + chalk "^3.0.0" + diff-sequences "^25.2.1" + jest-get-type "^25.2.1" + pretty-format "^25.2.3" + +jest-docblock@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/jest-docblock/-/jest-docblock-25.2.3.tgz#ac45280c43d59e7139f9fbe5896c6e0320c01ebb" + integrity sha512-d3/tmjLLrH5fpRGmIm3oFa3vOaD/IjPxtXVOrfujpfJ9y1tCDB1x/tvunmdOVAyF03/xeMwburl6ITbiQT1mVA== + dependencies: + detect-newline "^3.0.0" + +jest-each@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/jest-each/-/jest-each-25.2.3.tgz#64067ba1508ebbd07e9b126c173ab371e8e6309d" + integrity sha512-RTlmCjsBDK2c9T5oO4MqccA3/5Y8BUtiEy7OOQik1iyCgdnNdHbI0pNEpyapZPBG0nlvZ4mIu7aY6zNUvLraAQ== + dependencies: + "@jest/types" "^25.2.3" + chalk "^3.0.0" + jest-get-type "^25.2.1" + jest-util "^25.2.3" + pretty-format "^25.2.3" + +jest-environment-jsdom@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest-environment-jsdom/-/jest-environment-jsdom-25.2.4.tgz#f2783541d0538b1bc43641703372cea6a2e83611" + integrity sha512-5dm+tNwrLmhELdjAwiQnVGf/U9iFMWdTL4/wyrMg2HU6RQnCiuxpWbIigLHUhuP1P2Ak0F4k3xhjrikboKyShA== + dependencies: + "@jest/environment" "^25.2.4" + "@jest/fake-timers" "^25.2.4" + "@jest/types" "^25.2.3" + jest-mock "^25.2.3" + jest-util "^25.2.3" + jsdom "^15.2.1" + +jest-environment-node@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest-environment-node/-/jest-environment-node-25.2.4.tgz#dc211dfb0d8b66dfc1965a8f846e72e54ff0c430" + integrity sha512-Jkc5Y8goyXPrLRHnrUlqC7P4o5zn2m4zw6qWoRJ59kxV1f2a5wK+TTGhrhCwnhW/Ckpdl/pm+LufdvhJkvJbiw== + dependencies: + "@jest/environment" "^25.2.4" + "@jest/fake-timers" "^25.2.4" + "@jest/types" "^25.2.3" + jest-mock "^25.2.3" + jest-util "^25.2.3" + semver "^6.3.0" + +jest-get-type@^25.2.1: + version "25.2.1" + resolved "http://localhost:4873/jest-get-type/-/jest-get-type-25.2.1.tgz#6c83de603c41b1627e6964da2f5454e6aa3c13a6" + integrity sha512-EYjTiqcDTCRJDcSNKbLTwn/LcDPEE7ITk8yRMNAOjEsN6yp+Uu+V1gx4djwnuj/DvWg0YGmqaBqPVGsPxlvE7w== + +jest-haste-map@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/jest-haste-map/-/jest-haste-map-25.2.3.tgz#2649392b5af191f0167a27bfb62e5d96d7eaaade" + integrity sha512-pAP22OHtPr4qgZlJJFks2LLgoQUr4XtM1a+F5UaPIZNiCRnePA0hM3L7aiJ0gzwiNIYwMTfKRwG/S1L28J3A3A== + dependencies: + "@jest/types" "^25.2.3" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.3" + jest-serializer "^25.2.1" + jest-util "^25.2.3" + jest-worker "^25.2.1" + micromatch "^4.0.2" + sane "^4.0.3" + walker "^1.0.7" + which "^2.0.2" + optionalDependencies: + fsevents "^2.1.2" + +jest-jasmine2@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest-jasmine2/-/jest-jasmine2-25.2.4.tgz#5f77de83e1027f0c7588137055a80da773872374" + integrity sha512-juoKrmNmLwaheNbAg71SuUF9ovwUZCFNTpKVhvCXWk+SSeORcIUMptKdPCoLXV3D16htzhTSKmNxnxSk4SrTjA== + dependencies: + "@babel/traverse" "^7.1.0" + "@jest/environment" "^25.2.4" + "@jest/source-map" "^25.2.1" + "@jest/test-result" "^25.2.4" + "@jest/types" "^25.2.3" + chalk "^3.0.0" + co "^4.6.0" + expect "^25.2.4" + is-generator-fn "^2.0.0" + jest-each "^25.2.3" + jest-matcher-utils "^25.2.3" + jest-message-util "^25.2.4" + jest-runtime "^25.2.4" + jest-snapshot "^25.2.4" + jest-util "^25.2.3" + pretty-format "^25.2.3" + throat "^5.0.0" + +jest-leak-detector@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/jest-leak-detector/-/jest-leak-detector-25.2.3.tgz#4cf39f137925e0061c04c24ca65cae36465f0238" + integrity sha512-yblCMPE7NJKl7778Cf/73yyFWAas5St0iiEBwq7RDyaz6Xd4WPFnPz2j7yDb/Qce71A1IbDoLADlcwD8zT74Aw== + dependencies: + jest-get-type "^25.2.1" + pretty-format "^25.2.3" + +jest-matcher-utils@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/jest-matcher-utils/-/jest-matcher-utils-25.2.3.tgz#59285bd6d6c810debc9caa585ed985e46a3f28fd" + integrity sha512-ZmiXiwQRVM9MoKjGMP5YsGGk2Th5ncyRxfXKz5AKsmU8m43kgNZirckVzaP61MlSa9LKmXbevdYqVp1ZKAw2Rw== + dependencies: + chalk "^3.0.0" + jest-diff "^25.2.3" + jest-get-type "^25.2.1" + pretty-format "^25.2.3" + +jest-message-util@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest-message-util/-/jest-message-util-25.2.4.tgz#b1441b9c82f5c11fc661303cbf200a2f136a7762" + integrity sha512-9wWMH3Bf+GVTv0GcQLmH/FRr0x0toptKw9TA8U5YFLVXx7Tq9pvcNzTyJrcTJ+wLqNbMPPJlJNft4MnlcrtF5Q== + dependencies: + "@babel/code-frame" "^7.0.0" + "@jest/test-result" "^25.2.4" + "@jest/types" "^25.2.3" + "@types/stack-utils" "^1.0.1" + chalk "^3.0.0" + micromatch "^4.0.2" + slash "^3.0.0" + stack-utils "^1.0.1" + +jest-mock@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/jest-mock/-/jest-mock-25.2.3.tgz#b37a581f59d61bd91db27a99bf7eb8b3e5e993d5" + integrity sha512-xlf+pyY0j47zoCs8zGGOGfWyxxLximE8YFOfEK8s4FruR8DtM/UjNj61um+iDuMAFEBDe1bhCXkqiKoCmWjJzg== + dependencies: + "@jest/types" "^25.2.3" + +jest-pnp-resolver@^1.2.1: + version "1.2.1" + resolved "http://localhost:4873/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== + +jest-preset-angular@^8.0.0, jest-preset-angular@^8.1.2: + version "8.1.2" + resolved "http://localhost:4873/jest-preset-angular/-/jest-preset-angular-8.1.2.tgz#2dc49e852351aa1d58ffdb94fce4bd9d4b5a59e2" + integrity sha512-a6RPuWIUAnEBq3nsgwh6B+ZaJ1wYF7ChvNNBp4vS9lM9OG8r2waa4+OpIQDZJ9ptERDsPC2vjr6QY3R0ai9vcw== + dependencies: + pretty-format "^25.0.0" + ts-jest "^25.0.0" + +jest-regex-util@^25.2.1: + version "25.2.1" + resolved "http://localhost:4873/jest-regex-util/-/jest-regex-util-25.2.1.tgz#db64b0d15cd3642c93b7b9627801d7c518600584" + integrity sha512-wroFVJw62LdqTdkL508ZLV82FrJJWVJMIuYG7q4Uunl1WAPTf4ftPKrqqfec4SvOIlvRZUdEX2TFpWR356YG/w== + +jest-resolve-dependencies@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest-resolve-dependencies/-/jest-resolve-dependencies-25.2.4.tgz#2d904400387d74a366dff54badb40a2b3210e733" + integrity sha512-qhUnK4PfNHzNdca7Ub1mbAqE0j5WNyMTwxBZZJjQlUrdqsiYho/QGK65FuBkZuSoYtKIIqriR9TpGrPEc3P5Gg== + dependencies: + "@jest/types" "^25.2.3" + jest-regex-util "^25.2.1" + jest-snapshot "^25.2.4" + +jest-resolve@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/jest-resolve/-/jest-resolve-25.2.3.tgz#ababeaf2bb948cb6d2dea8453759116da0fb7842" + integrity sha512-1vZMsvM/DBH258PnpUNSXIgtzpYz+vCVCj9+fcy4akZl4oKbD+9hZSlfe9RIDpU0Fc28ozHQrmwX3EqFRRIHGg== + dependencies: + "@jest/types" "^25.2.3" + browser-resolve "^1.11.3" + chalk "^3.0.0" + jest-pnp-resolver "^1.2.1" + realpath-native "^2.0.0" + resolve "^1.15.1" + +jest-runner@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest-runner/-/jest-runner-25.2.4.tgz#d0daf7c56b4a83b6b675863d5cdcd502c960f9a1" + integrity sha512-5xaIfqqxck9Wg2CV4b9KmJtf/sWO7zWQx7O+34GCLGPzoPcVmB3mZtdrQI1/jS3Reqjru9ycLjgLHSf6XoxRqA== + dependencies: + "@jest/console" "^25.2.3" + "@jest/environment" "^25.2.4" + "@jest/test-result" "^25.2.4" + "@jest/types" "^25.2.3" + chalk "^3.0.0" + exit "^0.1.2" + graceful-fs "^4.2.3" + jest-config "^25.2.4" + jest-docblock "^25.2.3" + jest-haste-map "^25.2.3" + jest-jasmine2 "^25.2.4" + jest-leak-detector "^25.2.3" + jest-message-util "^25.2.4" + jest-resolve "^25.2.3" + jest-runtime "^25.2.4" + jest-util "^25.2.3" + jest-worker "^25.2.1" + source-map-support "^0.5.6" + throat "^5.0.0" + +jest-runtime@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest-runtime/-/jest-runtime-25.2.4.tgz#c66a421e115944426b377a7fd331f6c0902cfa56" + integrity sha512-6ehOUizgIghN+aV5YSrDzTZ+zJ9omgEjJbTHj3Jqes5D52XHfhzT7cSfdREwkNjRytrR7mNwZ7pRauoyNLyJ8Q== + dependencies: + "@jest/console" "^25.2.3" + "@jest/environment" "^25.2.4" + "@jest/source-map" "^25.2.1" + "@jest/test-result" "^25.2.4" + "@jest/transform" "^25.2.4" + "@jest/types" "^25.2.3" + "@types/yargs" "^15.0.0" + chalk "^3.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.3" + jest-config "^25.2.4" + jest-haste-map "^25.2.3" + jest-message-util "^25.2.4" + jest-mock "^25.2.3" + jest-regex-util "^25.2.1" + jest-resolve "^25.2.3" + jest-snapshot "^25.2.4" + jest-util "^25.2.3" + jest-validate "^25.2.3" + realpath-native "^2.0.0" + slash "^3.0.0" + strip-bom "^4.0.0" + yargs "^15.3.1" + +jest-serializer@^25.2.1: + version "25.2.1" + resolved "http://localhost:4873/jest-serializer/-/jest-serializer-25.2.1.tgz#51727a5fc04256f461abe0fa024a022ba165877a" + integrity sha512-fibDi7M5ffx6c/P66IkvR4FKkjG5ldePAK1WlbNoaU4GZmIAkS9Le/frAwRUFEX0KdnisSPWf+b1RC5jU7EYJQ== + +jest-snapshot@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest-snapshot/-/jest-snapshot-25.2.4.tgz#08d4517579c864df4280bcc948ceea34327a4ded" + integrity sha512-nIwpW7FZCq5p0AE3Oyqyb6jL0ENJixXzJ5/CD/XRuOqp3gS5OM3O/k+NnTrniCXxPFV4ry6s9HNfiPQBi0wcoA== + dependencies: + "@babel/types" "^7.0.0" + "@jest/types" "^25.2.3" + "@types/prettier" "^1.19.0" + chalk "^3.0.0" + expect "^25.2.4" + jest-diff "^25.2.3" + jest-get-type "^25.2.1" + jest-matcher-utils "^25.2.3" + jest-message-util "^25.2.4" + jest-resolve "^25.2.3" + make-dir "^3.0.0" + natural-compare "^1.4.0" + pretty-format "^25.2.3" + semver "^6.3.0" + +jest-util@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/jest-util/-/jest-util-25.2.3.tgz#0abf95a1d6b96f2de5a3ecd61b36c40a182dc256" + integrity sha512-7tWiMICVSo9lNoObFtqLt9Ezt5exdFlWs5fLe1G4XLY2lEbZc814cw9t4YHScqBkWMfzth8ASHKlYBxiX2rdCw== + dependencies: + "@jest/types" "^25.2.3" + chalk "^3.0.0" + is-ci "^2.0.0" + make-dir "^3.0.0" + +jest-validate@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/jest-validate/-/jest-validate-25.2.3.tgz#ecb0f093cf8ae71d15075fb48439b6f78f1fcb5a" + integrity sha512-GObn91jzU0B0Bv4cusAwjP6vnWy78hJUM8MOSz7keRfnac/ZhQWIsUjvk01IfeXNTemCwgR57EtdjQMzFZGREg== + dependencies: + "@jest/types" "^25.2.3" + camelcase "^5.3.1" + chalk "^3.0.0" + jest-get-type "^25.2.1" + leven "^3.1.0" + pretty-format "^25.2.3" + +jest-watcher@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest-watcher/-/jest-watcher-25.2.4.tgz#dda85b914d470fa4145164a8f70bda4f208bafb6" + integrity sha512-p7g7s3zqcy69slVzQYcphyzkB2FBmJwMbv6k6KjI5mqd6KnUnQPfQVKuVj2l+34EeuxnbXqnrjtUFmxhcL87rg== + dependencies: + "@jest/test-result" "^25.2.4" + "@jest/types" "^25.2.3" + ansi-escapes "^4.2.1" + chalk "^3.0.0" + jest-util "^25.2.3" + string-length "^3.1.0" + +jest-worker@^25.2.1: + version "25.2.1" + resolved "http://localhost:4873/jest-worker/-/jest-worker-25.2.1.tgz#209617015c768652646aa33a7828cc2ab472a18a" + integrity sha512-IHnpekk8H/hCUbBlfeaPZzU6v75bqwJp3n4dUrQuQOAgOneI4tx3jV2o8pvlXnDfcRsfkFIUD//HWXpCmR+evQ== + dependencies: + merge-stream "^2.0.0" + supports-color "^7.0.0" + +jest@^25.2.4: + version "25.2.4" + resolved "http://localhost:4873/jest/-/jest-25.2.4.tgz#d10941948a2b57eb7accc2e7ae78af4a0e11b40a" + integrity sha512-Lu4LXxf4+durzN/IFilcAoQSisOwgHIXgl9vffopePpSSwFqfj1Pj4y+k3nL8oTbnvjxgDIsEcepy6he4bWqnQ== + dependencies: + "@jest/core" "^25.2.4" + import-local "^3.0.2" + jest-cli "^25.2.4" + js-tokens@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "http://localhost:4873/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + resolved "http://localhost:4873/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" @@ -2373,59 +3399,98 @@ js-yaml@^3.13.1: jsbn@~0.1.0: version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "http://localhost:4873/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= +jsdom@^15.2.1: + version "15.2.1" + resolved "http://localhost:4873/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" + integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== + dependencies: + abab "^2.0.0" + acorn "^7.1.0" + acorn-globals "^4.3.2" + array-equal "^1.0.0" + cssom "^0.4.1" + cssstyle "^2.0.0" + data-urls "^1.1.0" + domexception "^1.0.1" + escodegen "^1.11.1" + html-encoding-sniffer "^1.0.2" + nwsapi "^2.2.0" + parse5 "5.1.0" + pn "^1.1.0" + request "^2.88.0" + request-promise-native "^1.0.7" + saxes "^3.1.9" + symbol-tree "^3.2.2" + tough-cookie "^3.0.1" + w3c-hr-time "^1.0.1" + w3c-xmlserializer "^1.1.2" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.3.0" + whatwg-url "^7.0.0" + ws "^7.0.0" + xml-name-validator "^3.0.0" + jsesc@^2.5.1: version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "http://localhost:4873/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + resolved "http://localhost:4873/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= json-buffer@3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + resolved "http://localhost:4873/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + resolved "http://localhost:4873/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-parse-even-better-errors@^2.0.1: version "2.2.0" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.2.0.tgz#304d29aa54bb01156a1328c454034ff0ac8a7bf4" + resolved "http://localhost:4873/json-parse-even-better-errors/-/json-parse-even-better-errors-2.2.0.tgz#304d29aa54bb01156a1328c454034ff0ac8a7bf4" integrity sha512-2tLgY7LRNZ9Hd6gmCuBG5/OjRHQpSgJQqJoYyLLOhUgn8LdOYrjaZLcxkWnDads+AD/haWWioPNziXQcgvQJ/g== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "http://localhost:4873/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.2.3: version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + resolved "http://localhost:4873/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= json-stringify-safe@~5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "http://localhost:4873/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= +json5@2.x, json5@^2.1.2: + version "2.1.2" + resolved "http://localhost:4873/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" + integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ== + dependencies: + minimist "^1.2.5" + jsonfile@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "http://localhost:4873/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + resolved "http://localhost:4873/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== dependencies: universalify "^1.0.0" @@ -2434,12 +3499,12 @@ jsonfile@^6.0.1: jsonparse@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + resolved "http://localhost:4873/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= jsprim@^1.2.2: version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + resolved "http://localhost:4873/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" @@ -2449,7 +3514,7 @@ jsprim@^1.2.2: jszip@^3.1.3: version "3.2.2" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" + resolved "http://localhost:4873/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA== dependencies: lie "~3.3.0" @@ -2457,82 +3522,57 @@ jszip@^3.1.3: readable-stream "~2.3.6" set-immediate-shim "~1.0.1" -karma-chrome-launcher@~3.1.0: +just-compare@^1.3.0: + version "1.3.0" + resolved "http://localhost:4873/just-compare/-/just-compare-1.3.0.tgz#a53c31373f150a5b238555c243af4d8a38d7a0e5" + integrity sha512-i4QNo3mPYubDmAwPbCKQl5C2b5s0yudP5V5GDp6lGR1PM22Em4Idf7mcaIzXYcL6/RLdZtuGrAqkBe9RYM/t4w== + +keyv@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/karma-chrome-launcher/-/karma-chrome-launcher-3.1.0.tgz#805a586799a4d05f4e54f72a204979f3f3066738" - integrity sha512-3dPs/n7vgz1rxxtynpzZTvb9y/GIaW8xjAwcIGttLbycqoFtI7yo1NGnQi6oFTherRE+GIhCAHZC4vEqWGhNvg== + resolved "http://localhost:4873/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== dependencies: - which "^1.2.1" + json-buffer "3.0.0" -karma-coverage-istanbul-reporter@~2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/karma-coverage-istanbul-reporter/-/karma-coverage-istanbul-reporter-2.1.1.tgz#37a775fbfbb3cbe98cebf19605c94c6277c3b88a" - integrity sha512-CH8lTi8+kKXGvrhy94+EkEMldLCiUA0xMOiL31vvli9qK0T+qcXJAwWBRVJWnVWxYkTmyWar8lPz63dxX6/z1A== +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "http://localhost:4873/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: - istanbul-api "^2.1.6" - minimatch "^3.0.4" - -karma-jasmine-html-reporter@^1.4.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-1.5.3.tgz#c724078436ed7b7d17a47e79164af36eed2d2713" - integrity sha512-ci0VrjuCaFj+9d1tYlTE3KIPUCp0rz874zWWU3JgCMqGIyw5ke+BXWFPOAGAqUdCJcrMwneyvp1zFXA74MiPUA== + is-buffer "^1.1.5" -karma-jasmine@~3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/karma-jasmine/-/karma-jasmine-3.0.3.tgz#751ae15d84d16e9148d0af42787fc12f5959f66d" - integrity sha512-80iBR8/hLFY2Uw3S2GG6EndWtMCGMJjrCYNwYROWsJFVTjWrRSsLqcA2ye+U3ygW5sjOQo8f+78L8cGUxjC/+A== +kind-of@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: - jasmine-core "^3.5.0" + is-buffer "^1.1.5" -karma@~4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/karma/-/karma-4.4.1.tgz#6d9aaab037a31136dc074002620ee11e8c2e32ab" - integrity sha512-L5SIaXEYqzrh6b1wqYC42tNsFMx2PWuxky84pK9coK09MvmL7mxii3G3bZBh/0rvD27lqDd0le9jyhzvwif73A== - dependencies: - bluebird "^3.3.0" - body-parser "^1.16.1" - braces "^3.0.2" - chokidar "^3.0.0" - colors "^1.1.0" - connect "^3.6.0" - di "^0.0.1" - dom-serialize "^2.2.0" - flatted "^2.0.0" - glob "^7.1.1" - graceful-fs "^4.1.2" - http-proxy "^1.13.0" - isbinaryfile "^3.0.0" - lodash "^4.17.14" - log4js "^4.0.0" - mime "^2.3.1" - minimatch "^3.0.2" - optimist "^0.6.1" - qjobs "^1.1.4" - range-parser "^1.2.0" - rimraf "^2.6.0" - safe-buffer "^5.0.1" - socket.io "2.1.1" - source-map "^0.6.1" - tmp "0.0.33" - useragent "2.3.0" +kind-of@^5.0.0: + version "5.1.0" + resolved "http://localhost:4873/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== -keyv@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" - integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== - dependencies: - json-buffer "3.0.0" +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.3" + resolved "http://localhost:4873/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "http://localhost:4873/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== latest-version@^5.0.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + resolved "http://localhost:4873/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== dependencies: package-json "^6.3.0" less@^3.10.3: version "3.11.1" - resolved "https://registry.yarnpkg.com/less/-/less-3.11.1.tgz#c6bf08e39e02404fe6b307a3dfffafdc55bd36e2" + resolved "http://localhost:4873/less/-/less-3.11.1.tgz#c6bf08e39e02404fe6b307a3dfffafdc55bd36e2" integrity sha512-tlWX341RECuTOvoDIvtFqXsKj072hm3+9ymRBe76/mD6O5ZZecnlAOVDlWAleF2+aohFrxNidXhv2773f6kY7g== dependencies: clone "^2.1.2" @@ -2547,21 +3587,34 @@ less@^3.10.3: request "^2.83.0" source-map "~0.6.0" +leven@^3.1.0: + version "3.1.0" + resolved "http://localhost:4873/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@~0.3.0: + version "0.3.0" + resolved "http://localhost:4873/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + lie@~3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + resolved "http://localhost:4873/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== dependencies: immediate "~3.0.5" lines-and-columns@^1.1.6: version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + resolved "http://localhost:4873/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= locate-path@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + resolved "http://localhost:4873/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" @@ -2569,89 +3622,86 @@ locate-path@^3.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "http://localhost:4873/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" -lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15: +lodash.memoize@4.x: + version "4.1.2" + resolved "http://localhost:4873/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "http://localhost:4873/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= + +lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.15: version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + resolved "http://localhost:4873/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== log-symbols@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + resolved "http://localhost:4873/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== dependencies: chalk "^2.4.2" -log4js@^4.0.0: - version "4.5.1" - resolved "https://registry.yarnpkg.com/log4js/-/log4js-4.5.1.tgz#e543625e97d9e6f3e6e7c9fc196dd6ab2cae30b5" - integrity sha512-EEEgFcE9bLgaYUKuozyFfytQM2wDHtXn4tAN41pkaxpNjAykv11GVdeI4tHtmPWW4Xrgh9R/2d7XYghDVjbKKw== +lolex@^5.0.0: + version "5.1.2" + resolved "http://localhost:4873/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== dependencies: - date-format "^2.0.0" - debug "^4.1.1" - flatted "^2.0.0" - rfdc "^1.1.4" - streamroller "^1.0.6" + "@sinonjs/commons" "^1.7.0" lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + resolved "http://localhost:4873/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== lowercase-keys@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + resolved "http://localhost:4873/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== -lru-cache@4.1.x: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - lru-cache@^5.1.1: version "5.1.1" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "http://localhost:4873/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" +magic-string@0.25.4: + version "0.25.4" + resolved "http://localhost:4873/magic-string/-/magic-string-0.25.4.tgz#325b8a0a79fc423db109b77fd5a19183b7ba5143" + integrity sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw== + dependencies: + sourcemap-codec "^1.4.4" + magic-string@0.25.7, magic-string@^0.25.0, magic-string@^0.25.2: version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + resolved "http://localhost:4873/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== dependencies: sourcemap-codec "^1.4.4" -make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - make-dir@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" + resolved "http://localhost:4873/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== dependencies: semver "^6.0.0" -make-error@^1.1.1: +make-error@1.x, make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "http://localhost:4873/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-fetch-happen@^8.0.2: version "8.0.4" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.4.tgz#d3451baf5b43d6230c4eea7009c5aa6b6bccf9d4" + resolved "http://localhost:4873/make-fetch-happen/-/make-fetch-happen-8.0.4.tgz#d3451baf5b43d6230c4eea7009c5aa6b6bccf9d4" integrity sha512-hIFoqGq1db0QMiy/Atr/pI1Rs4rDV+ZdGSey2SQyF3KK3u1z4aj9mS5UdNnZkdQpA+H3pGn0J3KlEwsi2x4EqA== dependencies: agentkeepalive "^4.1.0" @@ -2670,75 +3720,116 @@ make-fetch-happen@^8.0.2: socks-proxy-agent "^5.0.0" ssri "^8.0.0" -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +makeerror@1.0.x: + version "1.0.11" + resolved "http://localhost:4873/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= + dependencies: + tmpl "1.0.x" + +map-cache@^0.2.2: + version "0.2.2" + resolved "http://localhost:4873/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" merge-stream@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "http://localhost:4873/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +micromatch@^3.1.4: + version "3.1.10" + resolved "http://localhost:4873/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +micromatch@^4.0.2: + version "4.0.2" + resolved "http://localhost:4873/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== + dependencies: + braces "^3.0.1" + picomatch "^2.0.5" + mime-db@1.43.0: version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + resolved "http://localhost:4873/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== -mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: +mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + resolved "http://localhost:4873/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: mime-db "1.43.0" mime@^1.4.1: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "http://localhost:4873/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.3.1: version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + resolved "http://localhost:4873/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== mimic-fn@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "http://localhost:4873/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + resolved "http://localhost:4873/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== -minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: +minimatch@^3.0.4: version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + resolved "http://localhost:4873/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" -minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + resolved "http://localhost:4873/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== minimist@~0.0.1: version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + resolved "http://localhost:4873/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass-collect@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + resolved "http://localhost:4873/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" minipass-fetch@^1.1.2, minipass-fetch@^1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.2.1.tgz#1b97ecb559be56b09812d45b2e9509f1f59ece2f" + resolved "http://localhost:4873/minipass-fetch/-/minipass-fetch-1.2.1.tgz#1b97ecb559be56b09812d45b2e9509f1f59ece2f" integrity sha512-ssHt0dkljEDaKmTgQ04DQgx2ag6G2gMPxA5hpcsoeTbfDgRf2fC2gNSRc6kISjD7ckCpHwwQvXxuTBK8402fXg== dependencies: minipass "^3.1.0" @@ -2750,14 +3841,14 @@ minipass-fetch@^1.1.2, minipass-fetch@^1.2.1: minipass-flush@^1.0.5: version "1.0.5" - resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + resolved "http://localhost:4873/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-json-stream@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + resolved "http://localhost:4873/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== dependencies: jsonparse "^1.3.1" @@ -2765,48 +3856,56 @@ minipass-json-stream@^1.0.1: minipass-pipeline@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" + resolved "http://localhost:4873/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + resolved "http://localhost:4873/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.0.1, minipass@^3.1.0, minipass@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" + resolved "http://localhost:4873/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== dependencies: yallist "^4.0.0" minizlib@^2.0.0, minizlib@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" + resolved "http://localhost:4873/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA== dependencies: minipass "^3.0.0" yallist "^4.0.0" +mixin-deep@^1.2.0: + version "1.3.2" + resolved "http://localhost:4873/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@1.x, mkdirp@^1.0.3: + version "1.0.3" + resolved "http://localhost:4873/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" + integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== + mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.x: version "0.5.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" + resolved "http://localhost:4873/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== dependencies: minimist "^1.2.5" -mkdirp@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" - integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== - move-concurrently@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + resolved "http://localhost:4873/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= dependencies: aproba "^1.1.1" @@ -2818,27 +3917,44 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "http://localhost:4873/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@^2.0.0, ms@^2.1.1: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "http://localhost:4873/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== mute-stream@0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + resolved "http://localhost:4873/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -negotiator@0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== +nanomatch@^1.2.9: + version "1.2.13" + resolved "http://localhost:4873/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "http://localhost:4873/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= ng-packagr@^9.0.0: version "9.1.0" - resolved "https://registry.yarnpkg.com/ng-packagr/-/ng-packagr-9.1.0.tgz#65380bd8f05c62ee3c5f42069404fe1ca492498c" + resolved "http://localhost:4873/ng-packagr/-/ng-packagr-9.1.0.tgz#65380bd8f05c62ee3c5f42069404fe1ca492498c" integrity sha512-783WCTa+qQl8QQefQ3n8cDzYF3PpsQUnY87SwuXIxaJ1p8NjBq/3vCZmTiI3AXzDZFhRacbCqghtaJGU1qcFrQ== dependencies: "@rollup/plugin-commonjs" "^11.0.2" @@ -2868,21 +3984,47 @@ ng-packagr@^9.0.0: terser "^4.3.8" update-notifier "^4.0.0" +nice-try@^1.0.4: + version "1.0.5" + resolved "http://localhost:4873/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-int64@^0.4.0: + version "0.4.0" + resolved "http://localhost:4873/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= + +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + +node-notifier@^6.0.0: + version "6.0.0" + resolved "http://localhost:4873/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" + integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== + dependencies: + growly "^1.3.0" + is-wsl "^2.1.1" + semver "^6.3.0" + shellwords "^0.1.1" + which "^1.3.1" + node-releases@^1.1.52: version "1.1.53" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" + resolved "http://localhost:4873/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== node-sass-tilde-importer@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz#1a15105c153f648323b4347693fdb0f331bad1ce" + resolved "http://localhost:4873/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz#1a15105c153f648323b4347693fdb0f331bad1ce" integrity sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg== dependencies: find-parent-dir "^0.3.0" normalize-package-data@^2.0.0, normalize-package-data@^2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + resolved "http://localhost:4873/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -2890,43 +4032,50 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.5.0: semver "2 || 3 || 4 || 5" validate-npm-package-license "^3.0.1" +normalize-path@^2.1.1: + version "2.1.1" + resolved "http://localhost:4873/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "http://localhost:4873/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + resolved "http://localhost:4873/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= normalize-url@^4.1.0: version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + resolved "http://localhost:4873/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== npm-bundled@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + resolved "http://localhost:4873/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== dependencies: npm-normalize-package-bin "^1.0.1" npm-install-checks@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + resolved "http://localhost:4873/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== dependencies: semver "^7.1.1" npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + resolved "http://localhost:4873/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== npm-package-arg@8.0.1, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.0.1.tgz#9d76f8d7667b2373ffda60bb801a27ef71e3e270" + resolved "http://localhost:4873/npm-package-arg/-/npm-package-arg-8.0.1.tgz#9d76f8d7667b2373ffda60bb801a27ef71e3e270" integrity sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ== dependencies: hosted-git-info "^3.0.2" @@ -2935,7 +4084,7 @@ npm-package-arg@8.0.1, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1: npm-packlist@^2.1.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.1.1.tgz#08806a1df79acdc43d02d20c83a3d5472d96c90c" + resolved "http://localhost:4873/npm-packlist/-/npm-packlist-2.1.1.tgz#08806a1df79acdc43d02d20c83a3d5472d96c90c" integrity sha512-95TSDvGwujIhqfSpIiRRLodEF+y6mJMopuZdahoGzqtRDFZXGav46S0p6ngeWaiAkb5R72w6eVARhzej0HvZeQ== dependencies: glob "^7.1.6" @@ -2945,7 +4094,7 @@ npm-packlist@^2.1.0: npm-pick-manifest@6.0.0, npm-pick-manifest@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.0.0.tgz#bfde7abe95f2670aed1629a3c18245ccb3cc2eb8" + resolved "http://localhost:4873/npm-pick-manifest/-/npm-pick-manifest-6.0.0.tgz#bfde7abe95f2670aed1629a3c18245ccb3cc2eb8" integrity sha512-PdJpXMvjqt4nftNEDpCgjBUF8yI3Q3MyuAmVB9nemnnCg32F4BPL/JFBfdj8DubgHCYUFQhtLWmBPvdsFtjWMg== dependencies: npm-install-checks "^4.0.0" @@ -2954,7 +4103,7 @@ npm-pick-manifest@6.0.0, npm-pick-manifest@^6.0.0: npm-registry-fetch@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-8.0.0.tgz#65bb51dd2b9634b8363019aac9c76c003e5c5eaf" + resolved "http://localhost:4873/npm-registry-fetch/-/npm-registry-fetch-8.0.0.tgz#65bb51dd2b9634b8363019aac9c76c003e5c5eaf" integrity sha512-975WwLvZjX97y9UWWQ8nAyr7bw02s9xKPHqvEm5T900LQsB1HXb8Gb9ebYtCBLSX+K8gSOrO5KS/9yV/naLZmQ== dependencies: "@npmcli/ci-detect" "^1.0.0" @@ -2966,46 +4115,69 @@ npm-registry-fetch@^8.0.0: minizlib "^2.0.0" npm-package-arg "^8.0.0" +npm-run-path@^2.0.0: + version "2.0.2" + resolved "http://localhost:4873/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= + dependencies: + path-key "^2.0.0" + npm-run-path@^4.0.0: version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "http://localhost:4873/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" num2fraction@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + resolved "http://localhost:4873/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= +nwsapi@^2.2.0: + version "2.2.0" + resolved "http://localhost:4873/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== + oauth-sign@~0.9.0: version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + resolved "http://localhost:4873/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4.0.1: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "http://localhost:4873/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= +object-copy@^0.1.0: + version "0.1.0" + resolved "http://localhost:4873/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" object-inspect@^1.7.0: version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + resolved "http://localhost:4873/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "http://localhost:4873/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== +object-visit@^1.0.0: + version "1.0.1" + resolved "http://localhost:4873/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + object.assign@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + resolved "http://localhost:4873/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== dependencies: define-properties "^1.1.2" @@ -3015,52 +4187,64 @@ object.assign@^4.1.0: object.getownpropertydescriptors@^2.0.3: version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + resolved "http://localhost:4873/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== dependencies: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= +object.pick@^1.3.0: + version "1.3.0" + resolved "http://localhost:4873/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: - ee-first "1.1.1" + isobject "^3.0.1" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "http://localhost:4873/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + resolved "http://localhost:4873/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== dependencies: mimic-fn "^2.1.0" open@7.0.3: version "7.0.3" - resolved "https://registry.yarnpkg.com/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48" + resolved "http://localhost:4873/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48" integrity sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA== dependencies: is-docker "^2.0.0" is-wsl "^2.1.1" -optimist@^0.6.1, optimist@~0.6.0: +optimist@~0.6.0: version "0.6.1" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + resolved "http://localhost:4873/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" +optionator@^0.8.1: + version "0.8.3" + resolved "http://localhost:4873/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + ora@4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" + resolved "http://localhost:4873/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" integrity sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg== dependencies: chalk "^3.0.0" @@ -3074,50 +4258,65 @@ ora@4.0.3: os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "http://localhost:4873/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= p-cancelable@^1.0.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + resolved "http://localhost:4873/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== +p-each-series@^2.1.0: + version "2.1.0" + resolved "http://localhost:4873/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" + integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== + +p-finally@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= + +p-finally@^2.0.0: + version "2.0.1" + resolved "http://localhost:4873/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== + p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + resolved "http://localhost:4873/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== dependencies: p-try "^2.0.0" p-locate@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + resolved "http://localhost:4873/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-locate@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "http://localhost:4873/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-map@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + resolved "http://localhost:4873/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== dependencies: aggregate-error "^3.0.0" p-try@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "http://localhost:4873/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== package-json@^6.3.0: version "6.5.0" - resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + resolved "http://localhost:4873/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== dependencies: got "^9.6.0" @@ -3127,7 +4326,7 @@ package-json@^6.3.0: pacote@11.1.4: version "11.1.4" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.1.4.tgz#5529a453c59881b7f059da8af6903b0f79c124b2" + resolved "http://localhost:4873/pacote/-/pacote-11.1.4.tgz#5529a453c59881b7f059da8af6903b0f79c124b2" integrity sha512-eUGJvSSpWFZKn3z8gig/HgnBmUl6gIWByIIaHzSyEr3tOWX0w8tFEADXtpu8HGv5E0ShCeTP6enRq8iHKCHSvw== dependencies: "@npmcli/git" "^2.0.1" @@ -3156,12 +4355,12 @@ pacote@11.1.4: pako@~1.0.2: version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + resolved "http://localhost:4873/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parse-json@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + resolved "http://localhost:4873/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== dependencies: "@babel/code-frame" "^7.0.0" @@ -3169,97 +4368,112 @@ parse-json@^5.0.0: json-parse-better-errors "^1.0.1" lines-and-columns "^1.1.6" -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= - dependencies: - better-assert "~1.0.0" +parse5@5.1.0: + version "5.1.0" + resolved "http://localhost:4873/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascalcase@^0.1.1: + version "0.1.1" + resolved "http://localhost:4873/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-exists@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + resolved "http://localhost:4873/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-exists@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "http://localhost:4873/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "http://localhost:4873/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + resolved "http://localhost:4873/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "http://localhost:4873/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= + path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "http://localhost:4873/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + resolved "http://localhost:4873/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== performance-now@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + resolved "http://localhost:4873/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.7: +picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7: version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + resolved "http://localhost:4873/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "http://localhost:4873/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= -pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - pinkie-promise@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + resolved "http://localhost:4873/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + resolved "http://localhost:4873/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pirates@^4.0.1: + version "4.0.1" + resolved "http://localhost:4873/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "http://localhost:4873/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + pkg-up@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + resolved "http://localhost:4873/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== dependencies: find-up "^3.0.0" +pn@^1.1.0: + version "1.1.0" + resolved "http://localhost:4873/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "http://localhost:4873/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= + postcss-url@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-8.0.0.tgz#7b10059bd12929cdbb1971c60f61a0e5af86b4ca" + resolved "http://localhost:4873/postcss-url/-/postcss-url-8.0.0.tgz#7b10059bd12929cdbb1971c60f61a0e5af86b4ca" integrity sha512-E2cbOQ5aii2zNHh8F6fk1cxls7QVFZjLPSrqvmiza8OuXLzIpErij8BDS5Y3STPfJgpIMNCPEr8JlKQWEoozUw== dependencies: mime "^2.3.1" @@ -3270,36 +4484,51 @@ postcss-url@^8.0.0: postcss-value-parser@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d" + resolved "http://localhost:4873/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d" integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg== postcss@^7.0.18, postcss@^7.0.2, postcss@^7.0.27: version "7.0.27" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" + resolved "http://localhost:4873/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== dependencies: chalk "^2.4.2" source-map "^0.6.1" supports-color "^6.1.0" +prelude-ls@~1.1.2: + version "1.1.2" + resolved "http://localhost:4873/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= + prepend-http@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + resolved "http://localhost:4873/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +pretty-format@^25.0.0, pretty-format@^25.1.0, pretty-format@^25.2.3: + version "25.2.3" + resolved "http://localhost:4873/pretty-format/-/pretty-format-25.2.3.tgz#ba6e9603a0d80fa2e470b1fed55de1f9bfd81421" + integrity sha512-IP4+5UOAVGoyqC/DiomOeHBUKN6q00gfyT2qpAsRH64tgOKB2yF7FHJXC18OCiU0/YFierACup/zdCOWw0F/0w== + dependencies: + "@jest/types" "^25.2.3" + ansi-regex "^5.0.0" + ansi-styles "^4.0.0" + react-is "^16.12.0" + process-nextick-args@~2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "http://localhost:4873/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== promise-inflight@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "http://localhost:4873/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise-retry@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + resolved "http://localhost:4873/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= dependencies: err-code "^1.0.0" @@ -3307,14 +4536,22 @@ promise-retry@^1.1.1: promise@^7.1.1: version "7.3.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + resolved "http://localhost:4873/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== dependencies: asap "~2.0.3" +prompts@^2.0.1: + version "2.3.2" + resolved "http://localhost:4873/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.4" + protractor@~5.4.3: version "5.4.3" - resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.3.tgz#35f050741e404a45868618ea648745d89af31683" + resolved "http://localhost:4873/protractor/-/protractor-5.4.3.tgz#35f050741e404a45868618ea648745d89af31683" integrity sha512-7pMAolv8Ah1yJIqaorDTzACtn3gk7BamVKPTeO5lqIGOrfosjPgXFx/z1dqSI+m5EeZc2GMJHPr5DYlodujDNA== dependencies: "@types/q" "^0.0.32" @@ -3335,22 +4572,17 @@ protractor@~5.4.3: prr@~1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + resolved "http://localhost:4873/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - psl@^1.1.28: version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + resolved "http://localhost:4873/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== pump@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "http://localhost:4873/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -3358,59 +4590,34 @@ pump@^3.0.0: punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "http://localhost:4873/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== pupa@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" + resolved "http://localhost:4873/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== dependencies: escape-goat "^2.0.0" q@1.4.1: version "1.4.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + resolved "http://localhost:4873/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= q@^1.4.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + resolved "http://localhost:4873/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= -qjobs@^1.1.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/qjobs/-/qjobs-1.2.0.tgz#c45e9c61800bd087ef88d7e256423bdd49e5d071" - integrity sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg== - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - qs@~6.5.2: version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + resolved "http://localhost:4873/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== -range-parser@^1.2.0: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - rc@^1.2.8: version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "http://localhost:4873/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -3418,9 +4625,14 @@ rc@^1.2.8: minimist "^1.2.0" strip-json-comments "~2.0.1" +react-is@^16.12.0: + version "16.13.1" + resolved "http://localhost:4873/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== + read-package-json-fast@^1.1.1, read-package-json-fast@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-1.1.3.tgz#3b78464ea8f3c4447f3358635390b6946dc0737e" + resolved "http://localhost:4873/read-package-json-fast/-/read-package-json-fast-1.1.3.tgz#3b78464ea8f3c4447f3358635390b6946dc0737e" integrity sha512-MmFqiyfCXV2Dmm4jH24DEGhxdkUDFivJQj4oPZQPOKywxR7HWBE6WnMWDAapfFHi3wm1b+mhR+XHlUH0CL8axg== dependencies: json-parse-even-better-errors "^2.0.1" @@ -3428,7 +4640,7 @@ read-package-json-fast@^1.1.1, read-package-json-fast@^1.1.3: read-package-json@^2.0.0: version "2.1.1" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + resolved "http://localhost:4873/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== dependencies: glob "^7.1.1" @@ -3440,7 +4652,7 @@ read-package-json@^2.0.0: read-package-tree@5.3.1: version "5.3.1" - resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + resolved "http://localhost:4873/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== dependencies: read-package-json "^2.0.0" @@ -3449,7 +4661,7 @@ read-package-tree@5.3.1: read-pkg-up@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-5.0.0.tgz#b6a6741cb144ed3610554f40162aa07a6db621b8" + resolved "http://localhost:4873/read-pkg-up/-/read-pkg-up-5.0.0.tgz#b6a6741cb144ed3610554f40162aa07a6db621b8" integrity sha512-XBQjqOBtTzyol2CpsQOw8LHV0XbDZVG7xMMjmXAJomlVY03WOBRmYgDJETlvcg0H63AJvPRwT7GFi5rvOzUOKg== dependencies: find-up "^3.0.0" @@ -3457,7 +4669,7 @@ read-pkg-up@^5.0.0: read-pkg@^5.0.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + resolved "http://localhost:4873/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -3467,7 +4679,7 @@ read-pkg@^5.0.0: "readable-stream@1 || 2", readable-stream@~2.3.6: version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + resolved "http://localhost:4873/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" @@ -3480,7 +4692,7 @@ read-pkg@^5.0.0: readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: version "1.1.0" - resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + resolved "http://localhost:4873/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== dependencies: debuglog "^1.0.1" @@ -3490,31 +4702,44 @@ readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: readdirp@~3.3.0: version "3.3.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + resolved "http://localhost:4873/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== dependencies: picomatch "^2.0.7" +realpath-native@^2.0.0: + version "2.0.0" + resolved "http://localhost:4873/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" + integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== + reflect-metadata@^0.1.2: version "0.1.13" - resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + resolved "http://localhost:4873/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== regenerate-unicode-properties@^8.2.0: version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + resolved "http://localhost:4873/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== dependencies: regenerate "^1.4.0" regenerate@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + resolved "http://localhost:4873/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "http://localhost:4873/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexpu-core@^4.6.0: version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + resolved "http://localhost:4873/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== dependencies: regenerate "^1.4.0" @@ -3526,33 +4751,64 @@ regexpu-core@^4.6.0: registry-auth-token@^4.0.0: version "4.1.1" - resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" + resolved "http://localhost:4873/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" integrity sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA== dependencies: rc "^1.2.8" registry-url@^5.0.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + resolved "http://localhost:4873/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== dependencies: rc "^1.2.8" regjsgen@^0.5.1: version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + resolved "http://localhost:4873/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== regjsparser@^0.6.4: version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + resolved "http://localhost:4873/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: jsesc "~0.5.0" +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "http://localhost:4873/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.3" + resolved "http://localhost:4873/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "http://localhost:4873/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + +request-promise-core@1.1.3: + version "1.1.3" + resolved "http://localhost:4873/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== + dependencies: + lodash "^4.17.15" + +request-promise-native@^1.0.7: + version "1.0.8" + resolved "http://localhost:4873/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== + dependencies: + request-promise-core "1.1.3" + stealthy-require "^1.1.1" + tough-cookie "^2.3.3" + request@^2.83.0, request@^2.87.0, request@^2.88.0: version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + resolved "http://localhost:4873/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" @@ -3578,73 +4834,85 @@ request@^2.83.0, request@^2.87.0, request@^2.88.0: require-directory@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "http://localhost:4873/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-main-filename@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + resolved "http://localhost:4873/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-url@^0.2.1: version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + resolved "http://localhost:4873/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= -resolve@^1.10.0, resolve@^1.11.0, resolve@^1.14.2, resolve@^1.3.2: +resolve@1.1.7: + version "1.1.7" + resolved "http://localhost:4873/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= + +resolve@1.x, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.3.2: version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + resolved "http://localhost:4873/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" responselike@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + resolved "http://localhost:4873/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= dependencies: lowercase-keys "^1.0.0" restore-cursor@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "http://localhost:4873/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "http://localhost:4873/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + retry@^0.10.0: version "0.10.1" - resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + resolved "http://localhost:4873/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= -rfdc@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" - integrity sha512-5C9HXdzK8EAqN7JDif30jqsBzavB7wLpaubisuQIGHWf2gUXSpzy6ArX/+Da8RjFpagWsCn+pIgxTMAmKw9Zug== - rimraf@3.0.2, rimraf@^3.0.0: version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "http://localhost:4873/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" -rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.7.1: version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "http://localhost:4873/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" rollup-plugin-sourcemaps@^0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.5.0.tgz#898e8411c9b5b7b524b4d96c3b41d5c43f9da77e" + resolved "http://localhost:4873/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.5.0.tgz#898e8411c9b5b7b524b4d96c3b41d5c43f9da77e" integrity sha512-xp2vvRvgnYiXydgf/JFFFgYxrqMaQaOrK/g6yZvgwT9R1TSYjD3HKku1pD7iQNjQHkl5yGpokvJLp7cP/lR+aQ== dependencies: "@rollup/pluginutils" "^3.0.1" @@ -3652,69 +4920,110 @@ rollup-plugin-sourcemaps@^0.5.0: rollup@2.2.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.2.0.tgz#d82cfd6eda6d9561593a7e8a2fc0b72811a89b49" + resolved "http://localhost:4873/rollup/-/rollup-2.2.0.tgz#d82cfd6eda6d9561593a7e8a2fc0b72811a89b49" integrity sha512-iAu/j9/WJ0i+zT0sAMuQnsEbmOKzdQ4Yxu5rbPs9aUCyqveI1Kw3H4Fi9NWfCOpb8luEySD2lDyFWL9CrLE8iw== optionalDependencies: fsevents "~2.1.2" +rsvp@^4.8.4: + version "4.8.5" + resolved "http://localhost:4873/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== + run-async@^2.4.0: version "2.4.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" + resolved "http://localhost:4873/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== dependencies: is-promise "^2.1.0" run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + resolved "http://localhost:4873/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: aproba "^1.1.1" +rxjs@6.5.3: + version "6.5.3" + resolved "http://localhost:4873/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== + dependencies: + tslib "^1.9.0" + rxjs@6.5.4, rxjs@^6.5.0, rxjs@^6.5.3: version "6.5.4" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + resolved "http://localhost:4873/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== dependencies: tslib "^1.9.0" safe-buffer@^5.0.1, safe-buffer@^5.1.2: version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + resolved "http://localhost:4873/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 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" + resolved "http://localhost:4873/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== +safe-regex@^1.1.0: + version "1.1.0" + resolved "http://localhost:4873/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "http://localhost:4873/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== +sane@^4.0.3: + version "4.1.0" + resolved "http://localhost:4873/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== + dependencies: + "@cnakazawa/watch" "^1.0.3" + anymatch "^2.0.0" + capture-exit "^2.0.0" + exec-sh "^0.3.2" + execa "^1.0.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + sass@^1.23.0: version "1.26.3" - resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.3.tgz#412df54486143b76b5a65cdf7569e86f44659f46" + resolved "http://localhost:4873/sass/-/sass-1.26.3.tgz#412df54486143b76b5a65cdf7569e86f44659f46" integrity sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw== dependencies: chokidar ">=2.0.0 <4.0.0" saucelabs@^1.5.0: version "1.5.0" - resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" + resolved "http://localhost:4873/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ== dependencies: https-proxy-agent "^2.2.1" sax@>=0.6.0, sax@~1.2.4: version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + resolved "http://localhost:4873/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +saxes@^3.1.9: + version "3.1.11" + resolved "http://localhost:4873/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" + integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== + dependencies: + xmlchars "^2.1.1" + selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: version "3.6.0" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" + resolved "http://localhost:4873/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q== dependencies: jszip "^3.1.3" @@ -3724,126 +5033,142 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: semver-diff@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + resolved "http://localhost:4873/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== dependencies: semver "^6.3.0" semver-dsl@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/semver-dsl/-/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" + resolved "http://localhost:4873/semver-dsl/-/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" integrity sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA= dependencies: semver "^5.3.0" semver-intersect@1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/semver-intersect/-/semver-intersect-1.4.0.tgz#bdd9c06bedcdd2fedb8cd352c3c43ee8c61321f3" + resolved "http://localhost:4873/semver-intersect/-/semver-intersect-1.4.0.tgz#bdd9c06bedcdd2fedb8cd352c3c43ee8c61321f3" integrity sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ== dependencies: semver "^5.0.0" -"semver@2 || 3 || 4 || 5", semver@^5.0.0, semver@^5.3.0, semver@^5.6.0: +"semver@2 || 3 || 4 || 5", semver@^5.0.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + resolved "http://localhost:4873/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== +semver@6.x, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: + version "6.3.0" + resolved "http://localhost:4873/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + semver@7.1.3, semver@^7.0.0, semver@^7.1.1, semver@^7.1.3: version "7.1.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" + resolved "http://localhost:4873/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== -semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - set-blocking@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "http://localhost:4873/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-immediate-shim@~1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + resolved "http://localhost:4873/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "http://localhost:4873/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "http://localhost:4873/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= + dependencies: + shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "http://localhost:4873/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= + shebang-regex@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "http://localhost:4873/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== -signal-exit@^3.0.2: +shellwords@^0.1.1: + version "0.1.1" + resolved "http://localhost:4873/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== + +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + resolved "http://localhost:4873/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +sisteransi@^1.0.4: + version "1.0.5" + resolved "http://localhost:4873/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + smart-buffer@^4.1.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + resolved "http://localhost:4873/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== -socket.io-adapter@~1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" - integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== - -socket.io-client@2.1.1: +snapdragon-node@^2.0.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.1.1.tgz#dcb38103436ab4578ddb026638ae2f21b623671f" - integrity sha512-jxnFyhAuFxYfjqIgduQlhzqTcOEQSn+OHKVfAxWaNWa7ecP7xSNk2Dx/3UEsDcY7NcFafxvNvKPmmO7HTwTxGQ== - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~3.1.0" - engine.io-client "~3.2.0" - has-binary2 "~1.0.2" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.2.0" - to-array "0.1.4" - -socket.io-parser@~3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.2.0.tgz#e7c6228b6aa1f814e6148aea325b51aa9499e077" - integrity sha512-FYiBx7rc/KORMJlgsXysflWx/RIvtqZbyGLlHZvjfmPTPeuD/I8MaW7cfFrj5tRltICJdgwflhfZ3NVVbVLFQA== + resolved "http://localhost:4873/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - isarray "2.0.1" + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" -socket.io@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.1.1.tgz#a069c5feabee3e6b214a75b40ce0652e1cfb9980" - integrity sha512-rORqq9c+7W0DAK3cleWNSyfv/qKXV99hV4tZe+gGLfBECw3XEhBy7x85F3wypA9688LKjtwO9pX9L33/xQI8yA== +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "http://localhost:4873/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: - debug "~3.1.0" - engine.io "~3.2.0" - has-binary2 "~1.0.2" - socket.io-adapter "~1.1.0" - socket.io-client "2.1.1" - socket.io-parser "~3.2.0" + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "http://localhost:4873/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" socks-proxy-agent@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + resolved "http://localhost:4873/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== dependencies: agent-base "6" @@ -3852,15 +5177,15 @@ socks-proxy-agent@^5.0.0: socks@^2.3.3: version "2.3.3" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + resolved "http://localhost:4873/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== dependencies: ip "1.1.5" smart-buffer "^4.1.0" -source-map-resolve@^0.5.2, source-map-resolve@^0.5.3: +source-map-resolve@^0.5.0, source-map-resolve@^0.5.2, source-map-resolve@^0.5.3: version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + resolved "http://localhost:4873/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: atob "^2.1.2" @@ -3871,7 +5196,7 @@ source-map-resolve@^0.5.2, source-map-resolve@^0.5.3: source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + resolved "http://localhost:4873/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== dependencies: buffer-from "^1.0.0" @@ -3879,39 +5204,39 @@ source-map-support@^0.5.6, source-map-support@~0.5.12: source-map-support@~0.4.0: version "0.4.18" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + resolved "http://localhost:4873/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== dependencies: source-map "^0.5.6" source-map-url@^0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + resolved "http://localhost:4873/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@0.7.3, source-map@^0.7.3: version "0.7.3" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + resolved "http://localhost:4873/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "http://localhost:4873/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "http://localhost:4873/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + resolved "http://localhost:4873/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spdx-correct@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + resolved "http://localhost:4873/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: spdx-expression-parse "^3.0.0" @@ -3919,12 +5244,12 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + resolved "http://localhost:4873/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== spdx-expression-parse@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + resolved "http://localhost:4873/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: spdx-exceptions "^2.1.0" @@ -3932,22 +5257,29 @@ spdx-expression-parse@^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" + resolved "http://localhost:4873/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "http://localhost:4873/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + sprintf-js@^1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + resolved "http://localhost:4873/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== sprintf-js@~1.0.2: version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "http://localhost:4873/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + resolved "http://localhost:4873/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" @@ -3962,30 +5294,40 @@ sshpk@^1.7.0: ssri@^8.0.0: version "8.0.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" + resolved "http://localhost:4873/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== dependencies: minipass "^3.1.1" -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +stack-utils@^1.0.1: + version "1.0.2" + resolved "http://localhost:4873/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== -streamroller@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/streamroller/-/streamroller-1.0.6.tgz#8167d8496ed9f19f05ee4b158d9611321b8cacd9" - integrity sha512-3QC47Mhv3/aZNFpDDVO44qQb9gwB9QggMEE0sQmkTAwBVYdBRWISdsywlkfm5II1Q5y/pmrHflti/IgmIzdDBg== +static-extend@^0.1.1: + version "0.1.2" + resolved "http://localhost:4873/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: - async "^2.6.2" - date-format "^2.0.0" - debug "^3.2.6" - fs-extra "^7.0.1" - lodash "^4.17.14" + define-property "^0.2.5" + object-copy "^0.1.0" + +stealthy-require@^1.1.1: + version "1.1.1" + resolved "http://localhost:4873/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= + +string-length@^3.1.0: + version "3.1.0" + resolved "http://localhost:4873/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" + integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== + dependencies: + astral-regex "^1.0.0" + strip-ansi "^5.2.0" string-width@^3.0.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + resolved "http://localhost:4873/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: emoji-regex "^7.0.1" @@ -3994,75 +5336,98 @@ string-width@^3.0.0: string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + resolved "http://localhost:4873/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.trimend@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz#ee497fd29768646d84be2c9b819e292439614373" + integrity sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" + string.prototype.trimleft@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" - integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== + version "2.1.2" + resolved "http://localhost:4873/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" + es-abstract "^1.17.5" + string.prototype.trimstart "^1.0.0" string.prototype.trimright@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" - integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== + version "2.1.2" + resolved "http://localhost:4873/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== dependencies: define-properties "^1.1.3" - function-bind "^1.1.1" + es-abstract "^1.17.5" + string.prototype.trimend "^1.0.0" + +string.prototype.trimstart@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz#afe596a7ce9de905496919406c9734845f01a2f2" + integrity sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w== + dependencies: + define-properties "^1.1.3" + es-abstract "^1.17.5" string_decoder@~1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "http://localhost:4873/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^3.0.0: version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "http://localhost:4873/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" -strip-ansi@^5.1.0: +strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + resolved "http://localhost:4873/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" strip-ansi@^6.0.0: version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + resolved "http://localhost:4873/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: ansi-regex "^5.0.0" -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= +strip-bom@^4.0.0: + version "4.0.0" + resolved "http://localhost:4873/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "http://localhost:4873/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-final-newline@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "http://localhost:4873/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "http://localhost:4873/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= stylus@^0.54.7: version "0.54.7" - resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2" + resolved "http://localhost:4873/stylus/-/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2" integrity sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug== dependencies: css-parse "~2.0.0" @@ -4076,38 +5441,51 @@ stylus@^0.54.7: supports-color@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + resolved "http://localhost:4873/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^5.3.0: version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "http://localhost:4873/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + resolved "http://localhost:4873/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" -supports-color@^7.1.0: +supports-color@^7.0.0, supports-color@^7.1.0: version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + resolved "http://localhost:4873/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== dependencies: has-flag "^4.0.0" +supports-hyperlinks@^2.0.0: + version "2.1.0" + resolved "http://localhost:4873/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== + dependencies: + has-flag "^4.0.0" + supports-color "^7.0.0" + symbol-observable@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + resolved "http://localhost:4873/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== +symbol-tree@^3.2.2: + version "3.2.4" + resolved "http://localhost:4873/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + tar@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.1.tgz#7b3bd6c313cb6e0153770108f8d70ac298607efa" + resolved "http://localhost:4873/tar/-/tar-6.0.1.tgz#7b3bd6c313cb6e0153770108f8d70ac298607efa" integrity sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q== dependencies: chownr "^1.1.3" @@ -4119,75 +5497,149 @@ tar@^6.0.1: term-size@^2.1.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" + resolved "http://localhost:4873/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== +terminal-link@^2.0.0: + version "2.1.1" + resolved "http://localhost:4873/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== + dependencies: + ansi-escapes "^4.2.1" + supports-hyperlinks "^2.0.0" + terser@^4.3.8: version "4.6.7" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" + resolved "http://localhost:4873/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== dependencies: commander "^2.20.0" source-map "~0.6.1" source-map-support "~0.5.12" +test-exclude@^6.0.0: + version "6.0.0" + resolved "http://localhost:4873/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +throat@^5.0.0: + version "5.0.0" + resolved "http://localhost:4873/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== + through@X.X.X, through@^2.3.6: version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "http://localhost:4873/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= tmp@0.0.30: version "0.0.30" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + resolved "http://localhost:4873/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= dependencies: os-tmpdir "~1.0.1" -tmp@0.0.33, tmp@0.0.x, tmp@^0.0.33: +tmp@^0.0.33: version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "http://localhost:4873/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= +tmpl@1.0.x: + version "1.0.4" + resolved "http://localhost:4873/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= to-fast-properties@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "http://localhost:4873/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= +to-object-path@^0.3.0: + version "0.3.0" + resolved "http://localhost:4873/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + to-readable-stream@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + resolved "http://localhost:4873/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== +to-regex-range@^2.1.0: + version "2.1.1" + resolved "http://localhost:4873/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "http://localhost:4873/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "http://localhost:4873/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" -tough-cookie@~2.5.0: +tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + resolved "http://localhost:4873/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: psl "^1.1.28" punycode "^2.1.1" +tough-cookie@^3.0.1: + version "3.0.1" + resolved "http://localhost:4873/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== + dependencies: + ip-regex "^2.1.0" + psl "^1.1.28" + punycode "^2.1.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "http://localhost:4873/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= + dependencies: + punycode "^2.1.0" + +ts-jest@^25.0.0: + version "25.3.0" + resolved "http://localhost:4873/ts-jest/-/ts-jest-25.3.0.tgz#c12d34573cbe34d49f10567940e44fd19d1c9178" + integrity sha512-qH/uhaC+AFDU9JfAueSr0epIFJkGMvUPog4FxSEVAtPOur1Oni5WBJMiQIkfHvc7PviVRsnlVLLY2I6221CQew== + dependencies: + bs-logger "0.x" + buffer-from "1.x" + fast-json-stable-stringify "2.x" + json5 "2.x" + lodash.memoize "4.x" + make-error "1.x" + mkdirp "1.x" + resolve "1.x" + semver "6.x" + yargs-parser "^18.1.1" + ts-node@~8.3.0: version "8.3.0" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" + resolved "http://localhost:4873/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== dependencies: arg "^4.1.0" @@ -4198,12 +5650,12 @@ ts-node@~8.3.0: tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: version "1.11.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + resolved "http://localhost:4873/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== tslint@~6.1.0: version "6.1.0" - resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.0.tgz#c6c611b8ba0eed1549bf5a59ba05a7732133d851" + resolved "http://localhost:4873/tslint/-/tslint-6.1.0.tgz#c6c611b8ba0eed1549bf5a59ba05a7732133d851" integrity sha512-fXjYd/61vU6da04E505OZQGb2VCN2Mq3doeWcOIryuG+eqdmFUXTYVwdhnbEu2k46LNLgUYt9bI5icQze/j0bQ== dependencies: "@babel/code-frame" "^7.0.0" @@ -4222,71 +5674,70 @@ tslint@~6.1.0: tsutils@^2.29.0: version "2.29.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + resolved "http://localhost:4873/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== dependencies: tslib "^1.8.1" tunnel-agent@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "http://localhost:4873/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "http://localhost:4873/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= +type-check@~0.3.2: + version "0.3.2" + resolved "http://localhost:4873/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= + dependencies: + prelude-ls "~1.1.2" + +type-detect@4.0.8: + version "4.0.8" + resolved "http://localhost:4873/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + type-fest@^0.11.0: version "0.11.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + resolved "http://localhost:4873/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== type-fest@^0.6.0: version "0.6.0" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + resolved "http://localhost:4873/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "http://localhost:4873/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== -type-is@~1.6.17: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - typedarray-to-buffer@^3.1.5: version "3.1.5" - resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + resolved "http://localhost:4873/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: is-typedarray "^1.0.0" -typescript@~3.8.3: - version "3.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" - integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== - -ultron@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" - integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== +typescript@~3.6.0: + version "3.6.5" + resolved "http://localhost:4873/typescript/-/typescript-3.6.5.tgz#dae20114a7b4ff4bd642db9c8c699f2953e8bbdb" + integrity sha512-BEjlc0Z06ORZKbtcxGrIvvwYs5hAnuo6TKdNFL55frVDlB+na3z5bsLhFaIxmT+dPWgBIjMo6aNnTOgHHmHgiQ== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + resolved "http://localhost:4873/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== unicode-match-property-ecmascript@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + resolved "http://localhost:4873/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== dependencies: unicode-canonical-property-names-ecmascript "^1.0.4" @@ -4294,38 +5745,48 @@ unicode-match-property-ecmascript@^1.0.4: unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + resolved "http://localhost:4873/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== unicode-property-aliases-ecmascript@^1.0.4: version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + resolved "http://localhost:4873/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== +union-value@^1.0.0: + version "1.0.1" + resolved "http://localhost:4873/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + unique-filename@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + resolved "http://localhost:4873/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.2" - resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + resolved "http://localhost:4873/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" unique-string@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + resolved "http://localhost:4873/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: crypto-random-string "^2.0.0" universal-analytics@0.4.20: version "0.4.20" - resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.20.tgz#d6b64e5312bf74f7c368e3024a922135dbf24b03" + resolved "http://localhost:4873/universal-analytics/-/universal-analytics-0.4.20.tgz#d6b64e5312bf74f7c368e3024a922135dbf24b03" integrity sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw== dependencies: debug "^3.0.0" @@ -4334,22 +5795,25 @@ universal-analytics@0.4.20: universalify@^0.1.0: version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "http://localhost:4873/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + resolved "http://localhost:4873/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== -unpipe@1.0.0, unpipe@~1.0.0: +unset-value@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= + resolved "http://localhost:4873/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" update-notifier@^4.0.0: version "4.1.0" - resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" + resolved "http://localhost:4873/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" integrity sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew== dependencies: boxen "^4.2.0" @@ -4368,61 +5832,62 @@ update-notifier@^4.0.0: uri-js@^4.2.2: version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + resolved "http://localhost:4873/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + resolved "http://localhost:4873/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse-lax@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + resolved "http://localhost:4873/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= dependencies: prepend-http "^2.0.0" -useragent@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/useragent/-/useragent-2.3.0.tgz#217f943ad540cb2128658ab23fc960f6a88c9972" - integrity sha512-4AoH4pxuSvHCjqLO04sU6U/uE65BYza8l/KKBS0b0hnUPWi+cQ2BpeTEwejCSx9SPV5/U03nniDTrWx5NrmKdw== - dependencies: - lru-cache "4.1.x" - tmp "0.0.x" +use@^3.1.0: + version "3.1.1" + resolved "http://localhost:4873/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== util-deprecate@~1.0.1: version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "http://localhost:4873/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util-promisify@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + resolved "http://localhost:4873/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= dependencies: object.getownpropertydescriptors "^2.0.3" -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - uuid@7.0.2: version "7.0.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.2.tgz#7ff5c203467e91f5e0d85cfcbaaf7d2ebbca9be6" + resolved "http://localhost:4873/uuid/-/uuid-7.0.2.tgz#7ff5c203467e91f5e0d85cfcbaaf7d2ebbca9be6" integrity sha512-vy9V/+pKG+5ZTYKf+VcphF5Oc6EFiu3W8Nv3P3zIh0EqVI80ZxOzuPfe9EHjkFNvf8+xuTHVeei4Drydlx4zjw== uuid@^3.0.0, uuid@^3.3.2: version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + resolved "http://localhost:4873/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +v8-to-istanbul@^4.0.1: + version "4.1.3" + resolved "http://localhost:4873/v8-to-istanbul/-/v8-to-istanbul-4.1.3.tgz#22fe35709a64955f49a08a7c7c959f6520ad6f20" + integrity sha512-sAjOC+Kki6aJVbUOXJbcR0MnbfjvBzwKZazEJymA2IX49uoOdEdk+4fBq5cXgYgiyKtAyrrJNtBZdOeDIF+Fng== + dependencies: + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^1.6.0" + source-map "^0.7.3" + validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "http://localhost:4873/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -4430,35 +5895,53 @@ validate-npm-package-license@^3.0.1: validate-npm-package-name@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + resolved "http://localhost:4873/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= dependencies: builtins "^1.0.3" verror@1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "http://localhost:4873/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" extsprintf "^1.2.0" -void-elements@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec" - integrity sha1-wGavtYK7HLQSjWDqkjkulNXp2+w= +w3c-hr-time@^1.0.1: + version "1.0.2" + resolved "http://localhost:4873/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== + dependencies: + browser-process-hrtime "^1.0.0" + +w3c-xmlserializer@^1.1.2: + version "1.1.2" + resolved "http://localhost:4873/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" + integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== + dependencies: + domexception "^1.0.1" + webidl-conversions "^4.0.2" + xml-name-validator "^3.0.0" + +walker@^1.0.7, walker@~1.0.5: + version "1.0.7" + resolved "http://localhost:4873/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= + dependencies: + makeerror "1.0.x" wcwidth@^1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "http://localhost:4873/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: defaults "^1.0.3" webdriver-js-extender@2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" + resolved "http://localhost:4873/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" integrity sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ== dependencies: "@types/selenium-webdriver" "^3.0.0" @@ -4466,7 +5949,7 @@ webdriver-js-extender@2.1.0: webdriver-manager@^12.0.6: version "12.1.7" - resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.7.tgz#ed4eaee8f906b33c146e869b55e850553a1b1162" + resolved "http://localhost:4873/webdriver-manager/-/webdriver-manager-12.1.7.tgz#ed4eaee8f906b33c146e869b55e850553a1b1162" integrity sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA== dependencies: adm-zip "^0.4.9" @@ -4481,40 +5964,71 @@ webdriver-manager@^12.0.6: semver "^5.3.0" xml2js "^0.4.17" +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "http://localhost:4873/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "http://localhost:4873/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + +whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: + version "2.3.0" + resolved "http://localhost:4873/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== + +whatwg-url@^7.0.0: + version "7.1.0" + resolved "http://localhost:4873/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + which-module@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + resolved "http://localhost:4873/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@^1.2.1: +which@^1.2.9, which@^1.3.1: version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "http://localhost:4873/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "http://localhost:4873/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" widest-line@^3.1.0: version "3.1.0" - resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + resolved "http://localhost:4873/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== dependencies: string-width "^4.0.0" +word-wrap@~1.2.3: + version "1.2.3" + resolved "http://localhost:4873/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + wordwrap@~0.0.2: version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + resolved "http://localhost:4873/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wrap-ansi@^6.2.0: version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "http://localhost:4873/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -4523,12 +6037,12 @@ wrap-ansi@^6.2.0: wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "http://localhost:4873/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^3.0.0: version "3.0.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + resolved "http://localhost:4873/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: imurmurhash "^0.1.4" @@ -4536,23 +6050,24 @@ write-file-atomic@^3.0.0: signal-exit "^3.0.2" typedarray-to-buffer "^3.1.5" -ws@~3.3.1: - version "3.3.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.3.tgz#f1cf84fe2d5e901ebce94efaece785f187a228f2" - integrity sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA== - dependencies: - async-limiter "~1.0.0" - safe-buffer "~5.1.0" - ultron "~1.1.0" +ws@^7.0.0: + version "7.2.3" + resolved "http://localhost:4873/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" + integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== xdg-basedir@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + resolved "http://localhost:4873/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "http://localhost:4873/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== + xml2js@^0.4.17: version "0.4.23" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + resolved "http://localhost:4873/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== dependencies: sax ">=0.6.0" @@ -4560,44 +6075,39 @@ xml2js@^0.4.17: xmlbuilder@~11.0.0: version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + resolved "http://localhost:4873/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= +xmlchars@^2.1.1: + version "2.2.0" + resolved "http://localhost:4873/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xxhashjs@^0.2.1: version "0.2.2" - resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" + resolved "http://localhost:4873/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== dependencies: cuint "^0.2.2" y18n@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + resolved "http://localhost:4873/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - yallist@^3.0.2: version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "http://localhost:4873/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "http://localhost:4873/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yargs-parser@^18.1.0: +yargs-parser@^18.1.0, yargs-parser@^18.1.1: version "18.1.2" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" + resolved "http://localhost:4873/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== dependencies: camelcase "^5.0.0" @@ -4605,7 +6115,7 @@ yargs-parser@^18.1.0: yargs@15.3.0: version "15.3.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976" + resolved "http://localhost:4873/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976" integrity sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA== dependencies: cliui "^6.0.0" @@ -4620,12 +6130,29 @@ yargs@15.3.0: y18n "^4.0.0" yargs-parser "^18.1.0" -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= +yargs@^15.3.1: + version "15.3.1" + resolved "http://localhost:4873/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" + integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.1" yn@^3.0.0: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "http://localhost:4873/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +zone.js@~0.10.2: + version "0.10.3" + resolved "http://localhost:4873/zone.js/-/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" + integrity sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg== From b39bf767f140a74f4af72cf45979020a3b6f0bb8 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 30 Mar 2020 13:52:34 +0300 Subject: [PATCH 045/182] chore(utils): update npm version --- npm/packs/utils/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index f28c647e97..f666982f47 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "0.0.6", + "version": "2.3.0", "scripts": { "prepublish": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", From fd781706e35dcb93b97c71d53b71471cd1a5d0ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=B0smail=20=C3=87A=C4=9EDA=C5=9E?= Date: Mon, 30 Mar 2020 14:57:13 +0300 Subject: [PATCH 046/182] changed local registry address in yarn.lock file --- npm/packs/utils/yarn.lock | 1654 ++++++++++++++++++------------------- 1 file changed, 827 insertions(+), 827 deletions(-) diff --git a/npm/packs/utils/yarn.lock b/npm/packs/utils/yarn.lock index e562be19f4..e5bb5466ba 100644 --- a/npm/packs/utils/yarn.lock +++ b/npm/packs/utils/yarn.lock @@ -4,7 +4,7 @@ "@angular-builders/jest@^9.0.0": version "9.0.0" - resolved "http://localhost:4873/@angular-builders%2fjest/-/jest-9.0.0.tgz#84c88d3e177823cd5c47e3c3ed7f550d40c64bf5" + resolved "https://registry.yarnpkg.com/@angular-builders/jest/-/jest-9.0.0.tgz#84c88d3e177823cd5c47e3c3ed7f550d40c64bf5" integrity sha512-7kEoX6qXHwI5b/DpPvAZzJs29vSm20Pe7IBJAsGU6Csns69FtqS+IxB0J2oxIhKMjbnclXvSYnIb6QLvjUKUEQ== dependencies: "@angular-devkit/architect" "^0.900.0" @@ -14,7 +14,7 @@ "@angular-devkit/architect@0.901.0": version "0.901.0" - resolved "http://localhost:4873/@angular-devkit%2farchitect/-/architect-0.901.0.tgz#c660cb76e3bd35fc294d8e8578782b83157924aa" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.901.0.tgz#c660cb76e3bd35fc294d8e8578782b83157924aa" integrity sha512-SlqEBkPrT40zMCy5344AsUqC76pEPCaGPaAkCIvadaz2dC9vNMzQrvubCPJHViD/TumkSX1kYmLS3iYASVM9GQ== dependencies: "@angular-devkit/core" "9.1.0" @@ -22,7 +22,7 @@ "@angular-devkit/architect@^0.900.0": version "0.900.7" - resolved "http://localhost:4873/@angular-devkit%2farchitect/-/architect-0.900.7.tgz#11884bc3c3be8618a62c8e80d61c3410ab954719" + resolved "https://registry.yarnpkg.com/@angular-devkit/architect/-/architect-0.900.7.tgz#11884bc3c3be8618a62c8e80d61c3410ab954719" integrity sha512-hfiTVYc72kzbXrzK4tea6jnTDnSKpE1D+vEptBXN2tdXEVNEAQI5Qm5L1zVDtt16UdqoUTUypIgUc9jcNH1mUQ== dependencies: "@angular-devkit/core" "9.0.7" @@ -30,7 +30,7 @@ "@angular-devkit/build-ng-packagr@~0.901.0": version "0.901.0" - resolved "http://localhost:4873/@angular-devkit%2fbuild-ng-packagr/-/build-ng-packagr-0.901.0.tgz#48d191f49f5f1b9d5b3bc10d63b85e2c47f0de1d" + resolved "https://registry.yarnpkg.com/@angular-devkit/build-ng-packagr/-/build-ng-packagr-0.901.0.tgz#48d191f49f5f1b9d5b3bc10d63b85e2c47f0de1d" integrity sha512-cUQKK7+bYi3fOmq41cfr1ZFQwqAUUm0Yz7DgH34Ek7D98XudNOxJ63Xv4manId528WhqyGDP5/2tut7QNV3VJA== dependencies: "@angular-devkit/architect" "0.901.0" @@ -38,7 +38,7 @@ "@angular-devkit/core@9.0.7": version "9.0.7" - resolved "http://localhost:4873/@angular-devkit%2fcore/-/core-9.0.7.tgz#97e452ad88d36391d621748487c5bab655edfe84" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-9.0.7.tgz#97e452ad88d36391d621748487c5bab655edfe84" integrity sha512-tMrz36sM1xrwvFf9Qm59GwALscVlMP7rQBjtd0fIR/QbsiOAIX4AQbV+vN6Vtwnzo5NIRZY1IXJUhesWms+h5w== dependencies: ajv "6.10.2" @@ -49,7 +49,7 @@ "@angular-devkit/core@9.1.0", "@angular-devkit/core@^9.0.0": version "9.1.0" - resolved "http://localhost:4873/@angular-devkit%2fcore/-/core-9.1.0.tgz#5cc89bb5d44c6fd12a3527bae0253adb60d64b07" + resolved "https://registry.yarnpkg.com/@angular-devkit/core/-/core-9.1.0.tgz#5cc89bb5d44c6fd12a3527bae0253adb60d64b07" integrity sha512-vHTsrB4JaVUQ95FRnKrgo79Y3F6FokImrZdrmwkQmwAThpjXeXmpUEKZS+ZSTFRgesjiIysVGOFijARP4BQ7Bg== dependencies: ajv "6.12.0" @@ -60,7 +60,7 @@ "@angular-devkit/schematics@9.1.0": version "9.1.0" - resolved "http://localhost:4873/@angular-devkit%2fschematics/-/schematics-9.1.0.tgz#f453a9ff78c34a5468cc21830ac4a46089ee1a31" + resolved "https://registry.yarnpkg.com/@angular-devkit/schematics/-/schematics-9.1.0.tgz#f453a9ff78c34a5468cc21830ac4a46089ee1a31" integrity sha512-cb9PSvskMwWlL54fPfCcpJoyNDWAX6Wo7CzL5qpIB2cJCPLAuyfRUYYrkO77YUST+n2HvypHz0cZ5SNGMfaaBQ== dependencies: "@angular-devkit/core" "9.1.0" @@ -69,7 +69,7 @@ "@angular/cli@~9.1.0": version "9.1.0" - resolved "http://localhost:4873/@angular%2fcli/-/cli-9.1.0.tgz#07ec165d507208bb8d8d8ab73c3e14102643edff" + resolved "https://registry.yarnpkg.com/@angular/cli/-/cli-9.1.0.tgz#07ec165d507208bb8d8d8ab73c3e14102643edff" integrity sha512-ofum4gPE/W3fKyzuJrpdHeOS0ZL8x0eYCgsrMyUoFodSpb5LWPqeW+56NgDTpIeny+Trx3pM9dr9QTUVTJ0vYg== dependencies: "@angular-devkit/architect" "0.901.0" @@ -95,12 +95,12 @@ "@angular/common@^9.1.0": version "9.1.0" - resolved "http://localhost:4873/@angular%2fcommon/-/common-9.1.0.tgz#f9b5353a28f9da6c06266bc7244bbabf9e005176" + resolved "https://registry.yarnpkg.com/@angular/common/-/common-9.1.0.tgz#f9b5353a28f9da6c06266bc7244bbabf9e005176" integrity sha512-6JPLNtMhI03bGTVQJeSwc+dTjV6DtP7M/BAyzIV0InZP1D6XsOh2QahLFIaaN2sSxYA2ClKuwfX1v+rx9AbXQA== "@angular/compiler-cli@~9.1.0": version "9.1.0" - resolved "http://localhost:4873/@angular%2fcompiler-cli/-/compiler-cli-9.1.0.tgz#5887c278a2fe1f3165018b1cbceef71d9023b9ae" + resolved "https://registry.yarnpkg.com/@angular/compiler-cli/-/compiler-cli-9.1.0.tgz#5887c278a2fe1f3165018b1cbceef71d9023b9ae" integrity sha512-xZ8mVPmPporSTtvNA+cbFJQymLzuWfMX6HDDgztZ2eZ5WcQJYloRN4CcYMEzDhCxfV1Zw9Tfc2l14jZD8osi6g== dependencies: canonical-path "1.0.0" @@ -118,34 +118,34 @@ "@angular/compiler@~9.1.0": version "9.1.0" - resolved "http://localhost:4873/@angular%2fcompiler/-/compiler-9.1.0.tgz#e55b4f2f24df75283002d5e8e85e1acfc46928f6" + resolved "https://registry.yarnpkg.com/@angular/compiler/-/compiler-9.1.0.tgz#e55b4f2f24df75283002d5e8e85e1acfc46928f6" integrity sha512-QHw/JSeTXHiJQ2Ih0EtU7FGsYcOr+0hwZhqwSW3EEn8TtUgA3DS5lXeiDV66f+3DdvNZFPmgiZIvun3ypxn1HA== "@angular/core@~9.1.0": version "9.1.0" - resolved "http://localhost:4873/@angular%2fcore/-/core-9.1.0.tgz#9dfc386bd1461e0fd4786031fd245da04371421c" + resolved "https://registry.yarnpkg.com/@angular/core/-/core-9.1.0.tgz#9dfc386bd1461e0fd4786031fd245da04371421c" integrity sha512-RVlyegdIAij0P1wLY5ObIdsBAzvmHkHfElnmfiNKhaDftP6U/3zRtaKDu0bq0jvn1WCQ8zXxFQ8AWyKZwyFS+w== "@angular/platform-browser-dynamic@^9.1.0": version "9.1.0" - resolved "http://localhost:4873/@angular%2fplatform-browser-dynamic/-/platform-browser-dynamic-9.1.0.tgz#830bd5038d1875736e87e68c3aef44f0f835e418" + resolved "https://registry.yarnpkg.com/@angular/platform-browser-dynamic/-/platform-browser-dynamic-9.1.0.tgz#830bd5038d1875736e87e68c3aef44f0f835e418" integrity sha512-sMtz/poQ3TYaWZzWjrn9apKUZ/WKql2MYCWbpax7pql3GgC9OoTslc7ZEe7/d3ynfFE/CQqWBBOuWGD71Z0LMQ== "@angular/platform-browser@^9.1.0": version "9.1.0" - resolved "http://localhost:4873/@angular%2fplatform-browser/-/platform-browser-9.1.0.tgz#0bd40db37c9e314944c149de935b0f6cdd1f7350" + resolved "https://registry.yarnpkg.com/@angular/platform-browser/-/platform-browser-9.1.0.tgz#0bd40db37c9e314944c149de935b0f6cdd1f7350" integrity sha512-OsS/blUjl8ranmDaRADjFAmvnlmwbT6WNU7dVov7FhV0rqesbwaOJ5bR0LSYHYpej7Jaa6oYk0v0XWkaH9LTFg== "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fcode-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== dependencies: "@babel/highlight" "^7.8.3" "@babel/core@^7.1.0", "@babel/core@^7.7.5": version "7.9.0" - resolved "http://localhost:4873/@babel%2fcore/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== dependencies: "@babel/code-frame" "^7.8.3" @@ -167,7 +167,7 @@ "@babel/generator@^7.9.0": version "7.9.4" - resolved "http://localhost:4873/@babel%2fgenerator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce" integrity sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA== dependencies: "@babel/types" "^7.9.0" @@ -177,7 +177,7 @@ "@babel/helper-function-name@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fhelper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== dependencies: "@babel/helper-get-function-arity" "^7.8.3" @@ -186,28 +186,28 @@ "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fhelper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== dependencies: "@babel/types" "^7.8.3" "@babel/helper-member-expression-to-functions@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fhelper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== dependencies: "@babel/types" "^7.8.3" "@babel/helper-module-imports@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fhelper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== dependencies: "@babel/types" "^7.8.3" "@babel/helper-module-transforms@^7.9.0": version "7.9.0" - resolved "http://localhost:4873/@babel%2fhelper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== dependencies: "@babel/helper-module-imports" "^7.8.3" @@ -220,19 +220,19 @@ "@babel/helper-optimise-call-expression@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fhelper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== dependencies: "@babel/types" "^7.8.3" "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0": version "7.8.3" - resolved "http://localhost:4873/@babel%2fhelper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== "@babel/helper-replace-supers@^7.8.6": version "7.8.6" - resolved "http://localhost:4873/@babel%2fhelper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== dependencies: "@babel/helper-member-expression-to-functions" "^7.8.3" @@ -242,7 +242,7 @@ "@babel/helper-simple-access@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fhelper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== dependencies: "@babel/template" "^7.8.3" @@ -250,19 +250,19 @@ "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" - resolved "http://localhost:4873/@babel%2fhelper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== dependencies: "@babel/types" "^7.8.3" "@babel/helper-validator-identifier@^7.9.0": version "7.9.0" - resolved "http://localhost:4873/@babel%2fhelper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== "@babel/helpers@^7.9.0": version "7.9.2" - resolved "http://localhost:4873/@babel%2fhelpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== dependencies: "@babel/template" "^7.8.3" @@ -271,7 +271,7 @@ "@babel/highlight@^7.8.3": version "7.9.0" - resolved "http://localhost:4873/@babel%2fhighlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== dependencies: "@babel/helper-validator-identifier" "^7.9.0" @@ -280,26 +280,26 @@ "@babel/parser@^7.1.0", "@babel/parser@^7.7.5", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": version "7.9.4" - resolved "http://localhost:4873/@babel%2fparser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== "@babel/plugin-syntax-bigint@^7.0.0": version "7.8.3" - resolved "http://localhost:4873/@babel%2fplugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/plugin-syntax-object-rest-spread@^7.0.0": version "7.8.3" - resolved "http://localhost:4873/@babel%2fplugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== dependencies: "@babel/helper-plugin-utils" "^7.8.0" "@babel/template@^7.7.4", "@babel/template@^7.8.3", "@babel/template@^7.8.6": version "7.8.6" - resolved "http://localhost:4873/@babel%2ftemplate/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" + 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" @@ -308,7 +308,7 @@ "@babel/traverse@^7.1.0", "@babel/traverse@^7.7.4", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": version "7.9.0" - resolved "http://localhost:4873/@babel%2ftraverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w== dependencies: "@babel/code-frame" "^7.8.3" @@ -323,7 +323,7 @@ "@babel/types@^7.0.0", "@babel/types@^7.3.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": version "7.9.0" - resolved "http://localhost:4873/@babel%2ftypes/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng== dependencies: "@babel/helper-validator-identifier" "^7.9.0" @@ -332,12 +332,12 @@ "@bcoe/v8-coverage@^0.2.3": version "0.2.3" - resolved "http://localhost:4873/@bcoe%2fv8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== "@cnakazawa/watch@^1.0.3": version "1.0.4" - resolved "http://localhost:4873/@cnakazawa%2fwatch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" + resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.4.tgz#f864ae85004d0fcab6f50be9141c4da368d1656a" integrity sha512-v9kIhKwjeZThiWrLmj0y17CWoyddASLj9O2yvbZkbvw/N3rWOYy9zkV66ursAoVr0mV15bL8g0c4QZUE6cdDoQ== dependencies: exec-sh "^0.3.2" @@ -345,7 +345,7 @@ "@istanbuljs/load-nyc-config@^1.0.0": version "1.0.0" - resolved "http://localhost:4873/@istanbuljs%2fload-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.0.0.tgz#10602de5570baea82f8afbfa2630b24e7a8cfe5b" integrity sha512-ZR0rq/f/E4f4XcgnDvtMWXCUJpi8eO0rssVhmztsZqLIEFA9UUP9zmpE0VxlM+kv/E1ul2I876Fwil2ayptDVg== dependencies: camelcase "^5.3.1" @@ -355,12 +355,12 @@ "@istanbuljs/schema@^0.1.2": version "0.1.2" - resolved "http://localhost:4873/@istanbuljs%2fschema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.2.tgz#26520bf09abe4a5644cd5414e37125a8954241dd" integrity sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw== "@jest/console@^25.2.3": version "25.2.3" - resolved "http://localhost:4873/@jest%2fconsole/-/console-25.2.3.tgz#38ac19b916ff61457173799239472659e1a67c39" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-25.2.3.tgz#38ac19b916ff61457173799239472659e1a67c39" integrity sha512-k+37B1aSvOt9tKHWbZZSOy1jdgzesB0bj96igCVUG1nAH1W5EoUfgc5EXbBVU08KSLvkVdWopLXaO3xfVGlxtQ== dependencies: "@jest/source-map" "^25.2.1" @@ -370,7 +370,7 @@ "@jest/core@^25.2.4": version "25.2.4" - resolved "http://localhost:4873/@jest%2fcore/-/core-25.2.4.tgz#382ef80369d3311f1df79db1ee19e958ae95cdad" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-25.2.4.tgz#382ef80369d3311f1df79db1ee19e958ae95cdad" integrity sha512-WcWYShl0Bqfcb32oXtjwbiR78D/djhMdJW+ulp4/bmHgeODcsieqUJfUH+kEv8M7VNV77E6jds5aA+WuGh1nmg== dependencies: "@jest/console" "^25.2.3" @@ -404,7 +404,7 @@ "@jest/environment@^25.2.4": version "25.2.4" - resolved "http://localhost:4873/@jest%2fenvironment/-/environment-25.2.4.tgz#74f4d8dd87b427434d0b822cde37bc0e78f3e28b" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-25.2.4.tgz#74f4d8dd87b427434d0b822cde37bc0e78f3e28b" integrity sha512-wA4xlhD19/gukkDpJ5HQsTle0pgnzI5qMFEjw267lpTDC8d9N7Ihqr5pI+l0p8Qn1SQhai+glSqxrGdzKy4jxw== dependencies: "@jest/fake-timers" "^25.2.4" @@ -413,7 +413,7 @@ "@jest/fake-timers@^25.2.4": version "25.2.4" - resolved "http://localhost:4873/@jest%2ffake-timers/-/fake-timers-25.2.4.tgz#6821b6edde74fda2a42467ae92cc93095d4c9527" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-25.2.4.tgz#6821b6edde74fda2a42467ae92cc93095d4c9527" integrity sha512-oC1TJiwfMcBttVN7Wz+VZnqEAgYTiEMu0QLOXpypR89nab0uCB31zm/QeBZddhSstn20qe3yqOXygp6OwvKT/Q== dependencies: "@jest/types" "^25.2.3" @@ -424,7 +424,7 @@ "@jest/reporters@^25.2.4": version "25.2.4" - resolved "http://localhost:4873/@jest%2freporters/-/reporters-25.2.4.tgz#aa01c20aab217150d3a6080d5c98ce0bf34b17ed" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-25.2.4.tgz#aa01c20aab217150d3a6080d5c98ce0bf34b17ed" integrity sha512-VHbLxM03jCc+bTLOluW/IqHR2G0Cl0iATwIQbuZtIUast8IXO4fD0oy4jpVGpG5b20S6REA8U3BaQoCW/CeVNQ== dependencies: "@bcoe/v8-coverage" "^0.2.3" @@ -455,7 +455,7 @@ "@jest/source-map@^25.2.1": version "25.2.1" - resolved "http://localhost:4873/@jest%2fsource-map/-/source-map-25.2.1.tgz#b62ecf8ae76170b08eff8859b56eb7576df34ab8" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-25.2.1.tgz#b62ecf8ae76170b08eff8859b56eb7576df34ab8" integrity sha512-PgScGJm1U27+9Te/cxP4oUFqJ2PX6NhBL2a6unQ7yafCgs8k02c0LSyjSIx/ao0AwcAdCczfAPDf5lJ7zoB/7A== dependencies: callsites "^3.0.0" @@ -464,7 +464,7 @@ "@jest/test-result@^25.2.4": version "25.2.4" - resolved "http://localhost:4873/@jest%2ftest-result/-/test-result-25.2.4.tgz#8fc9eac58e82eb2a82e4058e68c3814f98f59cf5" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-25.2.4.tgz#8fc9eac58e82eb2a82e4058e68c3814f98f59cf5" integrity sha512-AI7eUy+q2lVhFnaibDFg68NGkrxVWZdD6KBr9Hm6EvN0oAe7GxpEwEavgPfNHQjU2mi6g+NsFn/6QPgTUwM1qg== dependencies: "@jest/console" "^25.2.3" @@ -475,7 +475,7 @@ "@jest/test-sequencer@^25.2.4": version "25.2.4" - resolved "http://localhost:4873/@jest%2ftest-sequencer/-/test-sequencer-25.2.4.tgz#28364aeddec140c696324114f63570f3de536c87" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-25.2.4.tgz#28364aeddec140c696324114f63570f3de536c87" integrity sha512-TEZm/Rkd6YgskdpTJdYLBtu6Gc11tfWPuSpatq0duH77ekjU8dpqX2zkPdY/ayuHxztV5LTJoV5BLtI9mZfXew== dependencies: "@jest/test-result" "^25.2.4" @@ -485,7 +485,7 @@ "@jest/transform@^25.2.4": version "25.2.4" - resolved "http://localhost:4873/@jest%2ftransform/-/transform-25.2.4.tgz#34336f37f13f62f7d1f5b93d5d150ba9eb3e11b9" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-25.2.4.tgz#34336f37f13f62f7d1f5b93d5d150ba9eb3e11b9" integrity sha512-6eRigvb+G6bs4kW5j1/y8wu4nCrmVuIe0epPBbiWaYlwawJ8yi1EIyK3d/btDqmBpN5GpN4YhR6iPPnDmkYdTA== dependencies: "@babel/core" "^7.1.0" @@ -507,7 +507,7 @@ "@jest/types@^25.2.3": version "25.2.3" - resolved "http://localhost:4873/@jest%2ftypes/-/types-25.2.3.tgz#035c4fb94e2da472f359ff9a211915d59987f6b6" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-25.2.3.tgz#035c4fb94e2da472f359ff9a211915d59987f6b6" integrity sha512-6oLQwO9mKif3Uph3RX5J1i3S7X7xtDHWBaaaoeKw8hOzV6YUd0qDcYcHZ6QXMHDIzSr7zzrEa51o2Ovlj6AtKQ== dependencies: "@types/istanbul-lib-coverage" "^2.0.0" @@ -517,12 +517,12 @@ "@npmcli/ci-detect@^1.0.0": version "1.2.0" - resolved "http://localhost:4873/@npmcli%2fci-detect/-/ci-detect-1.2.0.tgz#0df142a1ac3bba6cbf2e9da1a6994cd898e32c95" + resolved "https://registry.yarnpkg.com/@npmcli/ci-detect/-/ci-detect-1.2.0.tgz#0df142a1ac3bba6cbf2e9da1a6994cd898e32c95" integrity sha512-JtktVH7ASBVIWsQTFlFpeOzhBJskvoBCTfeeRhhZy7ybATcUvwiwotZ8j5rkqUUyB69lIy/AvboiiiGBjYBKBA== "@npmcli/git@^2.0.1": version "2.0.1" - resolved "http://localhost:4873/@npmcli%2fgit/-/git-2.0.1.tgz#d7ecaa9c945de6bb1af5a7e6ea634771193c168b" + resolved "https://registry.yarnpkg.com/@npmcli/git/-/git-2.0.1.tgz#d7ecaa9c945de6bb1af5a7e6ea634771193c168b" integrity sha512-hVatexiBtx71F01Ars38Hr5AFUGmJgHAfQtRlO5fJlnAawRGSXwEFgjB5i3XdUUmElZU/RXy7fefN02dZKxgPw== dependencies: "@npmcli/promise-spawn" "^1.1.0" @@ -535,7 +535,7 @@ "@npmcli/installed-package-contents@^1.0.5": version "1.0.5" - resolved "http://localhost:4873/@npmcli%2finstalled-package-contents/-/installed-package-contents-1.0.5.tgz#cc78565e55d9f14d46acf46a96f70934e516fa3d" + resolved "https://registry.yarnpkg.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.5.tgz#cc78565e55d9f14d46acf46a96f70934e516fa3d" integrity sha512-aKIwguaaqb6ViwSOFytniGvLPb9SMCUm39TgM3SfUo7n0TxUMbwoXfpwyvQ4blm10lzbAwTsvjr7QZ85LvTi4A== dependencies: npm-bundled "^1.1.1" @@ -545,14 +545,14 @@ "@npmcli/promise-spawn@^1.1.0": version "1.1.0" - resolved "http://localhost:4873/@npmcli%2fpromise-spawn/-/promise-spawn-1.1.0.tgz#660009a5c54209142ec7c469c190d212834b6087" + resolved "https://registry.yarnpkg.com/@npmcli/promise-spawn/-/promise-spawn-1.1.0.tgz#660009a5c54209142ec7c469c190d212834b6087" integrity sha512-FwbuYN9KXBkloLeIR3xRgI8dyOdfK/KzaJlChszNuwmUXD1lHXfLlSeo4n4KrKt2udIK9K9/TzlnyCA3ubM2fA== dependencies: infer-owner "^1.0.4" "@rollup/plugin-commonjs@^11.0.2": version "11.0.2" - resolved "http://localhost:4873/@rollup%2fplugin-commonjs/-/plugin-commonjs-11.0.2.tgz#837cc6950752327cb90177b608f0928a4e60b582" + resolved "https://registry.yarnpkg.com/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.2.tgz#837cc6950752327cb90177b608f0928a4e60b582" integrity sha512-MPYGZr0qdbV5zZj8/2AuomVpnRVXRU5XKXb3HVniwRoRCreGlf5kOE081isNWeiLIi6IYkwTX9zE0/c7V8g81g== dependencies: "@rollup/pluginutils" "^3.0.0" @@ -563,14 +563,14 @@ "@rollup/plugin-json@^4.0.0": version "4.0.2" - resolved "http://localhost:4873/@rollup%2fplugin-json/-/plugin-json-4.0.2.tgz#482185ee36ac7dd21c346e2dbcc22ffed0c6f2d6" + resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.0.2.tgz#482185ee36ac7dd21c346e2dbcc22ffed0c6f2d6" integrity sha512-t4zJMc98BdH42mBuzjhQA7dKh0t4vMJlUka6Fz0c+iO5IVnWaEMiYBy1uBj9ruHZzXBW23IPDGL9oCzBkQ9Udg== dependencies: "@rollup/pluginutils" "^3.0.4" "@rollup/plugin-node-resolve@^7.1.0": version "7.1.1" - resolved "http://localhost:4873/@rollup%2fplugin-node-resolve/-/plugin-node-resolve-7.1.1.tgz#8c6e59c4b28baf9d223028d0e450e06a485bb2b7" + resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.1.tgz#8c6e59c4b28baf9d223028d0e450e06a485bb2b7" integrity sha512-14ddhD7TnemeHE97a4rLOhobfYvUVcaYuqTnL8Ti7Jxi9V9Jr5LY7Gko4HZ5k4h4vqQM0gBQt6tsp9xXW94WPA== dependencies: "@rollup/pluginutils" "^3.0.6" @@ -581,14 +581,14 @@ "@rollup/pluginutils@^3.0.0", "@rollup/pluginutils@^3.0.1", "@rollup/pluginutils@^3.0.4", "@rollup/pluginutils@^3.0.6": version "3.0.8" - resolved "http://localhost:4873/@rollup%2fpluginutils/-/pluginutils-3.0.8.tgz#4e94d128d94b90699e517ef045422960d18c8fde" + resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.0.8.tgz#4e94d128d94b90699e517ef045422960d18c8fde" integrity sha512-rYGeAc4sxcZ+kPG/Tw4/fwJODC3IXHYDH4qusdN/b6aLw5LPUbzpecYbEJh4sVQGPFJxd2dBU4kc1H3oy9/bnw== dependencies: estree-walker "^1.0.1" "@schematics/angular@9.1.0": version "9.1.0" - resolved "http://localhost:4873/@schematics%2fangular/-/angular-9.1.0.tgz#fc0ad9099d3c3be3044d6b3f260cac6eb9f3e564" + resolved "https://registry.yarnpkg.com/@schematics/angular/-/angular-9.1.0.tgz#fc0ad9099d3c3be3044d6b3f260cac6eb9f3e564" integrity sha512-qkehaITQ1S1udfnnBY5CXGWnk1iVFI8cZayjLUlRfD5w+6v9if3VIuqPssX96MqvkbjyRu1N214+ieaawzLmuA== dependencies: "@angular-devkit/core" "9.1.0" @@ -596,7 +596,7 @@ "@schematics/update@0.901.0": version "0.901.0" - resolved "http://localhost:4873/@schematics%2fupdate/-/update-0.901.0.tgz#3e08231354f2c414c7d5b3bde1d9f7c08c664a74" + resolved "https://registry.yarnpkg.com/@schematics/update/-/update-0.901.0.tgz#3e08231354f2c414c7d5b3bde1d9f7c08c664a74" integrity sha512-u2VESL1dgOSGZK/wcWEz0WcCU/yv764zhzCQerCwUtbV1CISSSDZ6x+prVYDXOdxWBGtDos2MbCF3GEJJI1T+w== dependencies: "@angular-devkit/core" "9.1.0" @@ -611,31 +611,31 @@ "@sindresorhus/is@^0.14.0": version "0.14.0" - resolved "http://localhost:4873/@sindresorhus%2fis/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== "@sinonjs/commons@^1.7.0": version "1.7.1" - resolved "http://localhost:4873/@sinonjs%2fcommons/-/commons-1.7.1.tgz#da5fd19a5f71177a53778073978873964f49acf1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.1.tgz#da5fd19a5f71177a53778073978873964f49acf1" integrity sha512-Debi3Baff1Qu1Unc3mjJ96MgpbwTn43S1+9yJ0llWygPwDNu2aaWBD6yc9y/Z8XDRNhx7U+u2UDg2OGQXkclUQ== dependencies: type-detect "4.0.8" "@szmarczak/http-timer@^1.1.2": version "1.1.2" - resolved "http://localhost:4873/@szmarczak%2fhttp-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== dependencies: defer-to-connect "^1.0.1" "@tootallnate/once@1": version "1.0.0" - resolved "http://localhost:4873/@tootallnate%2fonce/-/once-1.0.0.tgz#9c13c2574c92d4503b005feca8f2e16cc1611506" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.0.0.tgz#9c13c2574c92d4503b005feca8f2e16cc1611506" integrity sha512-KYyTT/T6ALPkIRd2Ge080X/BsXvy9O0hcWTtMWkPvwAwF99+vn6Dv4GzrFT/Nn1LePr+FFDbRXXlqmsy9lw2zA== "@types/babel__core@^7.1.0": version "7.1.6" - resolved "http://localhost:4873/@types%2fbabel__core/-/babel__core-7.1.6.tgz#16ff42a5ae203c9af1c6e190ed1f30f83207b610" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.6.tgz#16ff42a5ae203c9af1c6e190ed1f30f83207b610" integrity sha512-tTnhWszAqvXnhW7m5jQU9PomXSiKXk2sFxpahXvI20SZKu9ylPi8WtIxueZ6ehDWikPT0jeFujMj3X4ZHuf3Tg== dependencies: "@babel/parser" "^7.1.0" @@ -646,14 +646,14 @@ "@types/babel__generator@*": version "7.6.1" - resolved "http://localhost:4873/@types%2fbabel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.1.tgz#4901767b397e8711aeb99df8d396d7ba7b7f0e04" integrity sha512-bBKm+2VPJcMRVwNhxKu8W+5/zT7pwNEqeokFOmbvVSqGzFneNxYcEBro9Ac7/N9tlsaPYnZLK8J1LWKkMsLAew== dependencies: "@babel/types" "^7.0.0" "@types/babel__template@*": version "7.0.2" - resolved "http://localhost:4873/@types%2fbabel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.0.2.tgz#4ff63d6b52eddac1de7b975a5223ed32ecea9307" integrity sha512-/K6zCpeW7Imzgab2bLkLEbz0+1JlFSrUMdw7KoIIu+IUdu51GWaBZpd3y1VXGVXzynvGa4DaIaxNZHiON3GXUg== dependencies: "@babel/parser" "^7.1.0" @@ -661,50 +661,50 @@ "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": version "7.0.9" - resolved "http://localhost:4873/@types%2fbabel__traverse/-/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.0.9.tgz#be82fab304b141c3eee81a4ce3b034d0eba1590a" integrity sha512-jEFQ8L1tuvPjOI8lnpaf73oCJe+aoxL6ygqSy6c8LcW98zaC+4mzWuQIRCEvKeCOu+lbqdXcg4Uqmm1S8AP1tw== dependencies: "@babel/types" "^7.3.0" "@types/color-name@^1.1.1": version "1.1.1" - resolved "http://localhost:4873/@types%2fcolor-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== "@types/estree@0.0.39": version "0.0.39" - resolved "http://localhost:4873/@types%2festree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/execa@^2.0.0": version "2.0.0" - resolved "http://localhost:4873/@types%2fexeca/-/execa-2.0.0.tgz#4dd5523520c51834bf8d0c280f460814e5238281" + resolved "https://registry.yarnpkg.com/@types/execa/-/execa-2.0.0.tgz#4dd5523520c51834bf8d0c280f460814e5238281" integrity sha512-aBnkJ0r3khaZkHzu9pDZeWXrDg1N/ZtDGRQkK+KIqNVvvTvW+URXMUHQQCQMYdb2GPrcwu9Fq6l9iiT+pirIbg== dependencies: execa "*" "@types/fs-extra@^8.1.0": version "8.1.0" - resolved "http://localhost:4873/@types%2ffs-extra/-/fs-extra-8.1.0.tgz#1114834b53c3914806cd03b3304b37b3bd221a4d" + resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.0.tgz#1114834b53c3914806cd03b3304b37b3bd221a4d" integrity sha512-UoOfVEzAUpeSPmjm7h1uk5MH6KZma2z2O7a75onTGjnNvAvMVrPzPL/vBbT65iIGHWj6rokwfmYcmxmlSf2uwg== dependencies: "@types/node" "*" "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.1" - resolved "http://localhost:4873/@types%2fistanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== "@types/istanbul-lib-report@*": version "3.0.0" - resolved "http://localhost:4873/@types%2fistanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#c14c24f18ea8190c118ee7562b7ff99a36552686" integrity sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg== dependencies: "@types/istanbul-lib-coverage" "*" "@types/istanbul-reports@^1.1.1": version "1.1.1" - resolved "http://localhost:4873/@types%2fistanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a" integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA== dependencies: "@types/istanbul-lib-coverage" "*" @@ -712,7 +712,7 @@ "@types/jest@^25.1.4": version "25.1.4" - resolved "http://localhost:4873/@types%2fjest/-/jest-25.1.4.tgz#9e9f1e59dda86d3fd56afce71d1ea1b331f6f760" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-25.1.4.tgz#9e9f1e59dda86d3fd56afce71d1ea1b331f6f760" integrity sha512-QDDY2uNAhCV7TMCITrxz+MRk1EizcsevzfeS6LykIlq2V1E5oO4wXG8V2ZEd9w7Snxeeagk46YbMgZ8ESHx3sw== dependencies: jest-diff "^25.1.0" @@ -720,71 +720,71 @@ "@types/node@*": version "13.9.5" - resolved "http://localhost:4873/@types%2fnode/-/node-13.9.5.tgz#59738bf30b31aea1faa2df7f4a5f55613750cf00" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.5.tgz#59738bf30b31aea1faa2df7f4a5f55613750cf00" integrity sha512-hkzMMD3xu6BrJpGVLeQ3htQQNAcOrJjX7WFmtK8zWQpz2UJf13LCFF2ALA7c9OVdvc2vQJeDdjfR35M0sBCxvw== "@types/node@^12.11.1": version "12.12.32" - resolved "http://localhost:4873/@types%2fnode/-/node-12.12.32.tgz#0ccc836d273e8a3cddf568daf22729cfa57c1925" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.32.tgz#0ccc836d273e8a3cddf568daf22729cfa57c1925" integrity sha512-44/reuCrwiQEsXud3I5X3sqI5jIXAmHB5xoiyKUw965olNHF3IWKjBLKK3F9LOSUZmK+oDt8jmyO637iX+hMgA== "@types/normalize-package-data@^2.4.0": version "2.4.0" - resolved "http://localhost:4873/@types%2fnormalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== "@types/prettier@^1.19.0": version "1.19.1" - resolved "http://localhost:4873/@types%2fprettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-1.19.1.tgz#33509849f8e679e4add158959fdb086440e9553f" integrity sha512-5qOlnZscTn4xxM5MeGXAMOsIOIKIbh9e85zJWfBRVPlRMEVawzoPhINYbRGkBZCI8LxvBe7tJCdWiarA99OZfQ== "@types/q@^0.0.32": version "0.0.32" - resolved "http://localhost:4873/@types%2fq/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" + resolved "https://registry.yarnpkg.com/@types/q/-/q-0.0.32.tgz#bd284e57c84f1325da702babfc82a5328190c0c5" integrity sha1-vShOV8hPEyXacCur/IKlMoGQwMU= "@types/resolve@0.0.8": version "0.0.8" - resolved "http://localhost:4873/@types%2fresolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" + resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== dependencies: "@types/node" "*" "@types/selenium-webdriver@^3.0.0": version "3.0.17" - resolved "http://localhost:4873/@types%2fselenium-webdriver/-/selenium-webdriver-3.0.17.tgz#50bea0c3c2acc31c959c5b1e747798b3b3d06d4b" + resolved "https://registry.yarnpkg.com/@types/selenium-webdriver/-/selenium-webdriver-3.0.17.tgz#50bea0c3c2acc31c959c5b1e747798b3b3d06d4b" integrity sha512-tGomyEuzSC1H28y2zlW6XPCaDaXFaD6soTdb4GNdmte2qfHtrKqhy0ZFs4r/1hpazCfEZqeTSRLvSasmEx89uw== "@types/stack-utils@^1.0.1": version "1.0.1" - resolved "http://localhost:4873/@types%2fstack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw== "@types/yargs-parser@*": version "15.0.0" - resolved "http://localhost:4873/@types%2fyargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d" integrity sha512-FA/BWv8t8ZWJ+gEOnLLd8ygxH/2UFbAvgEonyfN6yWGLKc7zVjbpl2Y4CTjid9h2RfgPP6SEt6uHwEOply00yw== "@types/yargs@^15.0.0": version "15.0.4" - resolved "http://localhost:4873/@types%2fyargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.4.tgz#7e5d0f8ca25e9d5849f2ea443cf7c402decd8299" integrity sha512-9T1auFmbPZoxHz0enUFlUuKRy3it01R+hlggyVUMtnCTQRunsQYifnSGb8hET4Xo8yiC0o0r1paW3ud5+rbURg== dependencies: "@types/yargs-parser" "*" "@yarnpkg/lockfile@1.1.0": version "1.1.0" - resolved "http://localhost:4873/@yarnpkg%2flockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== abab@^2.0.0: version "2.0.3" - resolved "http://localhost:4873/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== acorn-globals@^4.3.2: version "4.3.4" - resolved "http://localhost:4873/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== dependencies: acorn "^6.0.1" @@ -792,41 +792,41 @@ acorn-globals@^4.3.2: acorn-walk@^6.0.1: version "6.2.0" - resolved "http://localhost:4873/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== acorn@^6.0.1: version "6.4.1" - resolved "http://localhost:4873/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== acorn@^7.1.0: version "7.1.1" - resolved "http://localhost:4873/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== adm-zip@^0.4.9: version "0.4.14" - resolved "http://localhost:4873/adm-zip/-/adm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.14.tgz#2cf312bcc9f8875df835b0f6040bd89be0a727a9" integrity sha512-/9aQCnQHF+0IiCl0qhXoK7qs//SwYE7zX8lsr/DNk1BRAHYxeLZPL4pguwK29gUEqasYQjqPtEpDRSWEkdHn9g== agent-base@6: version "6.0.0" - resolved "http://localhost:4873/agent-base/-/agent-base-6.0.0.tgz#5d0101f19bbfaed39980b22ae866de153b93f09a" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.0.tgz#5d0101f19bbfaed39980b22ae866de153b93f09a" integrity sha512-j1Q7cSCqN+AwrmDd+pzgqc0/NpC655x2bUf5ZjRIO77DcNBFmh+OgRNzF6OKdCC9RSCb19fGd99+bhXFdkRNqw== dependencies: debug "4" agent-base@^4.3.0: version "4.3.0" - resolved "http://localhost:4873/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== dependencies: es6-promisify "^5.0.0" agentkeepalive@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/agentkeepalive/-/agentkeepalive-4.1.0.tgz#a48e040ed16745dd29ce923675f60c9c90f39ee0" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.1.0.tgz#a48e040ed16745dd29ce923675f60c9c90f39ee0" integrity sha512-CW/n1wxF8RpEuuiq6Vbn9S8m0VSYDMnZESqaJ6F2cWN9fY8rei2qaxweIaRgq+ek8TqfoFIsUjaGNKGGEHElSg== dependencies: debug "^4.1.0" @@ -835,7 +835,7 @@ agentkeepalive@^4.1.0: aggregate-error@^3.0.0: version "3.0.1" - resolved "http://localhost:4873/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.0.1.tgz#db2fe7246e536f40d9b5442a39e117d7dd6a24e0" integrity sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA== dependencies: clean-stack "^2.0.0" @@ -843,7 +843,7 @@ aggregate-error@^3.0.0: ajv@6.10.2: version "6.10.2" - resolved "http://localhost:4873/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== dependencies: fast-deep-equal "^2.0.1" @@ -853,7 +853,7 @@ ajv@6.10.2: ajv@6.12.0, ajv@^6.10.2, ajv@^6.5.5: version "6.12.0" - resolved "http://localhost:4873/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== dependencies: fast-deep-equal "^3.1.1" @@ -863,53 +863,53 @@ ajv@6.12.0, ajv@^6.10.2, ajv@^6.5.5: ansi-align@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== dependencies: string-width "^3.0.0" ansi-colors@4.1.1: version "4.1.1" - resolved "http://localhost:4873/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== ansi-escapes@^4.2.1: version "4.3.1" - resolved "http://localhost:4873/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61" integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA== dependencies: type-fest "^0.11.0" ansi-regex@^2.0.0: version "2.1.1" - resolved "http://localhost:4873/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== ansi-regex@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== ansi-styles@^2.2.1: version "2.2.1" - resolved "http://localhost:4873/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= ansi-styles@^3.2.1: version "3.2.1" - resolved "http://localhost:4873/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" ansi-styles@^4.0.0, ansi-styles@^4.1.0: version "4.2.1" - resolved "http://localhost:4873/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== dependencies: "@types/color-name" "^1.1.1" @@ -917,7 +917,7 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: anymatch@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" @@ -925,7 +925,7 @@ anymatch@^2.0.0: anymatch@^3.0.3, anymatch@~3.1.1: version "3.1.1" - resolved "http://localhost:4873/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== dependencies: normalize-path "^3.0.0" @@ -933,29 +933,29 @@ anymatch@^3.0.3, anymatch@~3.1.1: app-root-path@^2.2.1: version "2.2.1" - resolved "http://localhost:4873/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" + resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.2.1.tgz#d0df4a682ee408273583d43f6f79e9892624bc9a" integrity sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA== aproba@^1.1.1: version "1.2.0" - resolved "http://localhost:4873/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== arg@^4.1.0: version "4.1.3" - resolved "http://localhost:4873/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== argparse@^1.0.7: version "1.0.10" - resolved "http://localhost:4873/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" aria-query@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-3.0.0.tgz#65b3fcc1ca1155a8c9ae64d6eee297f15d5133cc" integrity sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w= dependencies: ast-types-flow "0.0.7" @@ -963,96 +963,96 @@ aria-query@^3.0.0: arr-diff@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.1.0: version "1.1.0" - resolved "http://localhost:4873/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-equal@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= array-union@^1.0.1: version "1.0.2" - resolved "http://localhost:4873/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" - resolved "http://localhost:4873/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= array-unique@^0.3.2: version "0.3.2" - resolved "http://localhost:4873/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= arrify@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= asap@^2.0.0, asap@~2.0.3: version "2.0.6" - resolved "http://localhost:4873/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= asn1@~0.2.3: version "0.2.4" - resolved "http://localhost:4873/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== dependencies: safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assign-symbols@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= ast-types-flow@0.0.7: version "0.0.7" - resolved "http://localhost:4873/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= astral-regex@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== asynckit@^0.4.0: version "0.4.0" - resolved "http://localhost:4873/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= at-least-node@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== atob@^2.1.2: version "2.1.2" - resolved "http://localhost:4873/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== autoprefixer@^9.6.5: version "9.7.5" - resolved "http://localhost:4873/autoprefixer/-/autoprefixer-9.7.5.tgz#8df10b9ff9b5814a8d411a5cfbab9c793c392376" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.5.tgz#8df10b9ff9b5814a8d411a5cfbab9c793c392376" integrity sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg== dependencies: browserslist "^4.11.0" @@ -1065,24 +1065,24 @@ autoprefixer@^9.6.5: aws-sign2@~0.7.0: version "0.7.0" - resolved "http://localhost:4873/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: version "1.9.1" - resolved "http://localhost:4873/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== axobject-query@2.0.2: version "2.0.2" - resolved "http://localhost:4873/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.0.2.tgz#ea187abe5b9002b377f925d8bf7d1c561adf38f9" integrity sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww== dependencies: ast-types-flow "0.0.7" babel-jest@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/babel-jest/-/babel-jest-25.2.4.tgz#b21b68d3af8f161c3e6e501e91f0dea8e652e344" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-25.2.4.tgz#b21b68d3af8f161c3e6e501e91f0dea8e652e344" integrity sha512-+yDzlyJVWrqih9i2Cvjpt7COaN8vUwCsKGtxJLzg6I0xhxD54K8mvDUCliPKLufyzHh/c5C4MRj4Vk7VMjOjIg== dependencies: "@jest/transform" "^25.2.4" @@ -1095,7 +1095,7 @@ babel-jest@^25.2.4: babel-plugin-istanbul@^6.0.0: version "6.0.0" - resolved "http://localhost:4873/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.0.0.tgz#e159ccdc9af95e0b570c75b4573b7c34d671d765" integrity sha512-AF55rZXpe7trmEylbaE1Gv54wn6rwU03aptvRoVIGP8YykoSxqdVLV1TfwflBCE/QtHmqtP8SWlTENqbK8GCSQ== dependencies: "@babel/helper-plugin-utils" "^7.0.0" @@ -1106,14 +1106,14 @@ babel-plugin-istanbul@^6.0.0: babel-plugin-jest-hoist@^25.2.1: version "25.2.1" - resolved "http://localhost:4873/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.2.1.tgz#d0003a1f3d5caa281e1107fe03bbf16b799f9955" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-25.2.1.tgz#d0003a1f3d5caa281e1107fe03bbf16b799f9955" integrity sha512-HysbCQfJhxLlyxDbKcB2ucGYV0LjqK4h6dBoI3RtFuOxTiTWK6XGZMsHb0tGh8iJdV4hC6Z2GCHzVvDeh9i0lQ== dependencies: "@types/babel__traverse" "^7.0.6" babel-preset-jest@^25.2.1: version "25.2.1" - resolved "http://localhost:4873/babel-preset-jest/-/babel-preset-jest-25.2.1.tgz#4ccd0e577f69aa11b71806edfe8b25a5c3ac93a2" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-25.2.1.tgz#4ccd0e577f69aa11b71806edfe8b25a5c3ac93a2" integrity sha512-zXHJBM5iR8oEO4cvdF83AQqqJf3tJrXy3x8nfu2Nlqvn4cneg4Ca8M7cQvC5S9BzDDy1O0tZ9iXru9J6E3ym+A== dependencies: "@babel/plugin-syntax-bigint" "^7.0.0" @@ -1122,12 +1122,12 @@ babel-preset-jest@^25.2.1: balanced-match@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base@^0.11.1: version "0.11.2" - resolved "http://localhost:4873/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" @@ -1140,26 +1140,26 @@ base@^0.11.1: bcrypt-pbkdf@^1.0.0: version "1.0.2" - resolved "http://localhost:4873/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= dependencies: tweetnacl "^0.14.3" binary-extensions@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== blocking-proxy@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" + resolved "https://registry.yarnpkg.com/blocking-proxy/-/blocking-proxy-1.0.1.tgz#81d6fd1fe13a4c0d6957df7f91b75e98dac40cb2" integrity sha512-KE8NFMZr3mN2E0HcvCgRtX7DjhiIQrwle+nSVJVC/yqFb9+xznHl2ZcoBp2L9qzkI4t4cBFJ1efXF8Dwi132RA== dependencies: minimist "^1.2.0" boxen@^4.2.0: version "4.2.0" - resolved "http://localhost:4873/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== dependencies: ansi-align "^3.0.0" @@ -1173,7 +1173,7 @@ boxen@^4.2.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "http://localhost:4873/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -1181,7 +1181,7 @@ brace-expansion@^1.1.7: braces@^2.3.1: version "2.3.2" - resolved "http://localhost:4873/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== dependencies: arr-flatten "^1.1.0" @@ -1197,26 +1197,26 @@ braces@^2.3.1: braces@^3.0.1, braces@~3.0.2: version "3.0.2" - resolved "http://localhost:4873/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" browser-process-hrtime@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== browser-resolve@^1.11.3: version "1.11.3" - resolved "http://localhost:4873/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== dependencies: resolve "1.1.7" browserslist@^4.11.0, browserslist@^4.7.0: version "4.11.0" - resolved "http://localhost:4873/browserslist/-/browserslist-4.11.0.tgz#aef4357b10a8abda00f97aac7cd587b2082ba1ad" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.0.tgz#aef4357b10a8abda00f97aac7cd587b2082ba1ad" integrity sha512-WqEC7Yr5wUH5sg6ruR++v2SGOQYpyUdYYd4tZoAq1F7y+QXoLoYGXVbxhtaIqWmAJjtNTRjVD3HuJc1OXTel2A== dependencies: caniuse-lite "^1.0.30001035" @@ -1226,48 +1226,48 @@ browserslist@^4.11.0, browserslist@^4.7.0: browserstack@^1.5.1: version "1.5.3" - resolved "http://localhost:4873/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" + resolved "https://registry.yarnpkg.com/browserstack/-/browserstack-1.5.3.tgz#93ab48799a12ef99dbd074dd595410ddb196a7ac" integrity sha512-AO+mECXsW4QcqC9bxwM29O7qWa7bJT94uBFzeb5brylIQwawuEziwq20dPYbins95GlWzOawgyDNdjYAo32EKg== dependencies: https-proxy-agent "^2.2.1" bs-logger@0.x: version "0.2.6" - resolved "http://localhost:4873/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== dependencies: fast-json-stable-stringify "2.x" bser@2.1.1: version "2.1.1" - resolved "http://localhost:4873/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== dependencies: node-int64 "^0.4.0" buffer-from@1.x, buffer-from@^1.0.0: version "1.1.1" - resolved "http://localhost:4873/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== builtin-modules@^1.1.1: version "1.1.1" - resolved "http://localhost:4873/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= builtin-modules@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== builtins@^1.0.3: version "1.0.3" - resolved "http://localhost:4873/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" + resolved "https://registry.yarnpkg.com/builtins/-/builtins-1.0.3.tgz#cb94faeb61c8696451db36534e1422f94f0aee88" integrity sha1-y5T662HIaWRR2zZTThQi+U8K7og= cacache@^15.0.0: version "15.0.0" - resolved "http://localhost:4873/cacache/-/cacache-15.0.0.tgz#133b59edbd2a37ea8ef2d54964c6f247e47e5059" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.0.tgz#133b59edbd2a37ea8ef2d54964c6f247e47e5059" integrity sha512-L0JpXHhplbJSiDGzyJJnJCTL7er7NzbBgxzVqLswEb4bO91Zbv17OUMuUeu/q0ZwKn3V+1HM4wb9tO4eVE/K8g== dependencies: chownr "^1.1.2" @@ -1290,7 +1290,7 @@ cacache@^15.0.0: cache-base@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" @@ -1305,7 +1305,7 @@ cache-base@^1.0.1: cacheable-request@^6.0.0: version "6.1.0" - resolved "http://localhost:4873/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== dependencies: clone-response "^1.0.2" @@ -1318,39 +1318,39 @@ cacheable-request@^6.0.0: callsites@^3.0.0: version "3.1.0" - resolved "http://localhost:4873/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" - resolved "http://localhost:4873/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001036: version "1.0.30001038" - resolved "http://localhost:4873/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz#44da3cbca2ab6cb6aa83d1be5d324e17f141caff" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001038.tgz#44da3cbca2ab6cb6aa83d1be5d324e17f141caff" integrity sha512-zii9quPo96XfOiRD4TrfYGs+QsGZpb2cGiMAzPjtf/hpFgB6zCPZgJb7I1+EATeMw/o+lG8FyRAnI+CWStHcaQ== canonical-path@1.0.0: version "1.0.0" - resolved "http://localhost:4873/canonical-path/-/canonical-path-1.0.0.tgz#fcb470c23958def85081856be7a86e904f180d1d" + resolved "https://registry.yarnpkg.com/canonical-path/-/canonical-path-1.0.0.tgz#fcb470c23958def85081856be7a86e904f180d1d" integrity sha512-feylzsbDxi1gPZ1IjystzIQZagYYLvfKrSuygUCgf7z6x790VEzze5QEkdSV1U58RA7Hi0+v6fv4K54atOzATg== capture-exit@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" integrity sha512-PiT/hQmTonHhl/HFGN+Lx3JJUznrVYJ3+AQsnthneZbvW7x+f08Tk7yLJTLEOUvBTbduLeeBkxEaYXUOUrRq6g== dependencies: rsvp "^4.8.4" caseless@~0.12.0: version "0.12.0" - resolved "http://localhost:4873/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" - resolved "http://localhost:4873/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" @@ -1361,7 +1361,7 @@ chalk@^1.1.1, chalk@^1.1.3: chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" - resolved "http://localhost:4873/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== dependencies: ansi-styles "^3.2.1" @@ -1370,7 +1370,7 @@ chalk@^2.0.0, chalk@^2.3.0, chalk@^2.4.2: chalk@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== dependencies: ansi-styles "^4.1.0" @@ -1378,12 +1378,12 @@ chalk@^3.0.0: chardet@^0.7.0: version "0.7.0" - resolved "http://localhost:4873/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== "chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.0, chokidar@^3.2.1: version "3.3.1" - resolved "http://localhost:4873/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== dependencies: anymatch "~3.1.1" @@ -1398,17 +1398,17 @@ chardet@^0.7.0: chownr@^1.1.2, chownr@^1.1.3, chownr@^1.1.4: version "1.1.4" - resolved "http://localhost:4873/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== ci-info@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== class-utils@^0.3.5: version "0.3.6" - resolved "http://localhost:4873/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" @@ -1418,41 +1418,41 @@ class-utils@^0.3.5: clean-css@^4.1.11: version "4.2.3" - resolved "http://localhost:4873/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== dependencies: source-map "~0.6.0" clean-stack@^2.0.0: version "2.2.0" - resolved "http://localhost:4873/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== cli-boxes@^2.2.0: version "2.2.0" - resolved "http://localhost:4873/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.0.tgz#538ecae8f9c6ca508e3c3c95b453fe93cb4c168d" integrity sha512-gpaBrMAizVEANOpfZp/EEUixTXDyGt7DFzdK5hU+UbWt/J0lB0w20ncZj59Z9a93xHb9u12zF5BS6i9RKbtg4w== cli-cursor@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== dependencies: restore-cursor "^3.1.0" cli-spinners@^2.2.0: version "2.2.0" - resolved "http://localhost:4873/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.2.0.tgz#e8b988d9206c692302d8ee834e7a85c0144d8f77" integrity sha512-tgU3fKwzYjiLEQgPMD9Jt+JjHVL9kW93FiIMX/l7rivvOD4/LL0Mf7gda3+4U2KJBloybwgj5KEoQgGRioMiKQ== cli-width@^2.0.0: version "2.2.0" - resolved "http://localhost:4873/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= cliui@^6.0.0: version "6.0.0" - resolved "http://localhost:4873/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== dependencies: string-width "^4.2.0" @@ -1461,29 +1461,29 @@ cliui@^6.0.0: clone-response@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= dependencies: mimic-response "^1.0.0" clone@^1.0.2: version "1.0.4" - resolved "http://localhost:4873/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" integrity sha1-2jCcwmPfFZlMaIypAheco8fNfH4= clone@^2.1.2: version "2.1.2" - resolved "http://localhost:4873/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= co@^4.6.0: version "4.6.0" - resolved "http://localhost:4873/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= codelyzer@^5.1.2: version "5.2.2" - resolved "http://localhost:4873/codelyzer/-/codelyzer-5.2.2.tgz#d0530a455784e6bea0b6d7e97166c73c30a5347f" + resolved "https://registry.yarnpkg.com/codelyzer/-/codelyzer-5.2.2.tgz#d0530a455784e6bea0b6d7e97166c73c30a5347f" integrity sha512-jB4FZ1Sx7kZhvZVdf+N2BaKTdrrNZOL0Bj10RRfrhHrb3zEvXjJvvq298JPMJAiyiCS/v4zs1QlGU0ip7xGqeA== dependencies: app-root-path "^2.2.1" @@ -1498,12 +1498,12 @@ codelyzer@^5.1.2: collect-v8-coverage@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz#150ee634ac3650b71d9c985eb7f608942334feb1" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.0.tgz#150ee634ac3650b71d9c985eb7f608942334feb1" integrity sha512-VKIhJgvk8E1W28m5avZ2Gv2Ruv5YiF56ug2oclvaG9md69BuZImMG2sk9g7QNKLUbtYAKQjXjYxbYZVUlMMKmQ== collection-visit@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" @@ -1511,58 +1511,58 @@ collection-visit@^1.0.0: color-convert@^1.9.0: version "1.9.3" - resolved "http://localhost:4873/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" color-convert@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== dependencies: color-name "~1.1.4" color-name@1.1.3: version "1.1.3" - resolved "http://localhost:4873/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-name@~1.1.4: version "1.1.4" - resolved "http://localhost:4873/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== combined-stream@^1.0.6, combined-stream@~1.0.6: version "1.0.8" - resolved "http://localhost:4873/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== dependencies: delayed-stream "~1.0.0" commander@^2.11.0, commander@^2.12.1, commander@^2.20.0: version "2.20.3" - resolved "http://localhost:4873/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== commander@^4.0.0: version "4.1.1" - resolved "http://localhost:4873/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== component-emitter@^1.2.1: version "1.3.0" - resolved "http://localhost:4873/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== concat-map@0.0.1: version "0.0.1" - resolved "http://localhost:4873/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= configstore@^5.0.1: version "5.0.1" - resolved "http://localhost:4873/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== dependencies: dot-prop "^5.2.0" @@ -1574,14 +1574,14 @@ configstore@^5.0.1: convert-source-map@^1.4.0, convert-source-map@^1.5.1, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.7.0" - resolved "http://localhost:4873/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== dependencies: safe-buffer "~5.1.1" copy-concurrently@^1.0.0: version "1.0.5" - resolved "http://localhost:4873/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" @@ -1593,17 +1593,17 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" - resolved "http://localhost:4873/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" - resolved "http://localhost:4873/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cross-spawn@^6.0.0: version "6.0.5" - resolved "http://localhost:4873/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== dependencies: nice-try "^1.0.4" @@ -1614,7 +1614,7 @@ cross-spawn@^6.0.0: cross-spawn@^7.0.0: version "7.0.1" - resolved "http://localhost:4873/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== dependencies: path-key "^3.1.0" @@ -1623,19 +1623,19 @@ cross-spawn@^7.0.0: crypto-random-string@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== css-parse@~2.0.0: version "2.0.0" - resolved "http://localhost:4873/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" + resolved "https://registry.yarnpkg.com/css-parse/-/css-parse-2.0.0.tgz#a468ee667c16d81ccf05c58c38d2a97c780dbfd4" integrity sha1-pGjuZnwW2BzPBcWMONKpfHgNv9Q= dependencies: css "^2.0.0" css-selector-tokenizer@^0.7.1: version "0.7.2" - resolved "http://localhost:4873/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz#11e5e27c9a48d90284f22d45061c303d7a25ad87" integrity sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw== dependencies: cssesc "^3.0.0" @@ -1644,7 +1644,7 @@ css-selector-tokenizer@^0.7.1: css@^2.0.0: version "2.2.4" - resolved "http://localhost:4873/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" + resolved "https://registry.yarnpkg.com/css/-/css-2.2.4.tgz#c646755c73971f2bba6a601e2cf2fd71b1298929" integrity sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw== dependencies: inherits "^2.0.3" @@ -1654,53 +1654,53 @@ css@^2.0.0: cssauron@^1.4.0: version "1.4.0" - resolved "http://localhost:4873/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" + resolved "https://registry.yarnpkg.com/cssauron/-/cssauron-1.4.0.tgz#a6602dff7e04a8306dc0db9a551e92e8b5662ad8" integrity sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg= dependencies: through X.X.X cssesc@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== cssom@^0.4.1: version "0.4.4" - resolved "http://localhost:4873/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.4.4.tgz#5a66cf93d2d0b661d80bf6a44fb65f5c2e4e0a10" integrity sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw== cssom@~0.3.6: version "0.3.8" - resolved "http://localhost:4873/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== cssstyle@^2.0.0: version "2.2.0" - resolved "http://localhost:4873/cssstyle/-/cssstyle-2.2.0.tgz#e4c44debccd6b7911ed617a4395e5754bba59992" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.2.0.tgz#e4c44debccd6b7911ed617a4395e5754bba59992" integrity sha512-sEb3XFPx3jNnCAMtqrXPDeSgQr+jojtCeNf8cvMNMh1cG970+lljssvQDzPq6lmmJu2Vhqood/gtEomBiHOGnA== dependencies: cssom "~0.3.6" cuint@^0.2.2: version "0.2.2" - resolved "http://localhost:4873/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= damerau-levenshtein@^1.0.4: version "1.0.6" - resolved "http://localhost:4873/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" integrity sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug== dashdash@^1.12.0: version "1.14.1" - resolved "http://localhost:4873/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" data-urls@^1.1.0: version "1.1.0" - resolved "http://localhost:4873/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== dependencies: abab "^2.0.0" @@ -1709,105 +1709,105 @@ data-urls@^1.1.0: debug@4, debug@4.1.1, debug@^4.1.0, debug@^4.1.1: version "4.1.1" - resolved "http://localhost:4873/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== dependencies: ms "^2.1.1" debug@^2.2.0, debug@^2.3.3: version "2.6.9" - resolved "http://localhost:4873/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@^3.0.0, debug@^3.1.0: version "3.2.6" - resolved "http://localhost:4873/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== dependencies: ms "^2.1.1" debug@~3.1.0: version "3.1.0" - resolved "http://localhost:4873/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" debuglog@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" + resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= decamelize@^1.2.0: version "1.2.0" - resolved "http://localhost:4873/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decode-uri-component@^0.2.0: version "0.2.0" - resolved "http://localhost:4873/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= decompress-response@^3.3.0: version "3.3.0" - resolved "http://localhost:4873/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= dependencies: mimic-response "^1.0.0" deep-extend@^0.6.0: version "0.6.0" - resolved "http://localhost:4873/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-is@~0.1.3: version "0.1.3" - resolved "http://localhost:4873/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= deepmerge@^4.2.2: version "4.2.2" - resolved "http://localhost:4873/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== defaults@^1.0.3: version "1.0.3" - resolved "http://localhost:4873/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" integrity sha1-xlYFHpgX2f8I7YgUd/P+QBnz730= dependencies: clone "^1.0.2" defer-to-connect@^1.0.1: version "1.1.3" - resolved "http://localhost:4873/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== define-properties@^1.1.2, define-properties@^1.1.3: version "1.1.3" - resolved "http://localhost:4873/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== dependencies: object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" - resolved "http://localhost:4873/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" - resolved "http://localhost:4873/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" @@ -1815,7 +1815,7 @@ define-property@^2.0.2: del@^2.2.0: version "2.2.2" - resolved "http://localhost:4873/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= dependencies: globby "^5.0.0" @@ -1828,27 +1828,27 @@ del@^2.2.0: delayed-stream@~1.0.0: version "1.0.0" - resolved "http://localhost:4873/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= depd@^1.1.2: version "1.1.2" - resolved "http://localhost:4873/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= dependency-graph@^0.7.2: version "0.7.2" - resolved "http://localhost:4873/dependency-graph/-/dependency-graph-0.7.2.tgz#91db9de6eb72699209d88aea4c1fd5221cac1c49" + resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.7.2.tgz#91db9de6eb72699209d88aea4c1fd5221cac1c49" integrity sha512-KqtH4/EZdtdfWX0p6MGP9jljvxSY6msy/pRUD4jgNwVpv3v1QmNLlsB3LDSSUg79BRVSn7jI1QPRtArGABovAQ== detect-newline@^3.0.0: version "3.1.0" - resolved "http://localhost:4873/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== dezalgo@^1.0.0: version "1.0.3" - resolved "http://localhost:4873/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.3.tgz#7f742de066fc748bc8db820569dddce49bf0d456" integrity sha1-f3Qt4Gb8dIvI24IFad3c5Jvw1FY= dependencies: asap "^2.0.0" @@ -1856,36 +1856,36 @@ dezalgo@^1.0.0: diff-sequences@^25.2.1: version "25.2.1" - resolved "http://localhost:4873/diff-sequences/-/diff-sequences-25.2.1.tgz#fcfe8aa07dd9b0c648396a478dabca8e76c6ab27" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-25.2.1.tgz#fcfe8aa07dd9b0c648396a478dabca8e76c6ab27" integrity sha512-foe7dXnGlSh3jR1ovJmdv+77VQj98eKCHHwJPbZ2eEf0fHwKbkZicpPxEch9smZ+n2dnF6QFwkOQdLq9hpeJUg== diff@^4.0.1: version "4.0.2" - resolved "http://localhost:4873/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== domexception@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== dependencies: webidl-conversions "^4.0.2" dot-prop@^5.2.0: version "5.2.0" - resolved "http://localhost:4873/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== dependencies: is-obj "^2.0.0" duplexer3@^0.1.4: version "0.1.4" - resolved "http://localhost:4873/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= ecc-jsbn@~0.1.1: version "0.1.2" - resolved "http://localhost:4873/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= dependencies: jsbn "~0.1.0" @@ -1893,55 +1893,55 @@ ecc-jsbn@~0.1.1: electron-to-chromium@^1.3.380: version "1.3.390" - resolved "http://localhost:4873/electron-to-chromium/-/electron-to-chromium-1.3.390.tgz#a49e67dea22e52ea8027c475dd5447b1c00b1d4e" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.390.tgz#a49e67dea22e52ea8027c475dd5447b1c00b1d4e" integrity sha512-4RvbM5x+002gKI8sltkqWEk5pptn0UnzekUx8RTThAMPDSb8jjpm6SwGiSnEve7f85biyZl8DMXaipaCxDjXag== emoji-regex@^7.0.1: version "7.0.3" - resolved "http://localhost:4873/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== emoji-regex@^8.0.0: version "8.0.0" - resolved "http://localhost:4873/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== encoding@^0.1.12: version "0.1.12" - resolved "http://localhost:4873/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= dependencies: iconv-lite "~0.4.13" end-of-stream@^1.1.0: version "1.4.4" - resolved "http://localhost:4873/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" err-code@^1.0.0: version "1.1.2" - resolved "http://localhost:4873/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" + resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960" integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA= errno@^0.1.1: version "0.1.7" - resolved "http://localhost:4873/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== dependencies: prr "~1.0.1" error-ex@^1.3.1: version "1.3.2" - resolved "http://localhost:4873/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: version "1.17.5" - resolved "http://localhost:4873/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== dependencies: es-to-primitive "^1.2.1" @@ -1958,7 +1958,7 @@ es-abstract@^1.17.0-next.1, es-abstract@^1.17.5: es-to-primitive@^1.2.1: version "1.2.1" - resolved "http://localhost:4873/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== dependencies: is-callable "^1.1.4" @@ -1967,29 +1967,29 @@ es-to-primitive@^1.2.1: es6-promise@^4.0.3: version "4.2.8" - resolved "http://localhost:4873/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== es6-promisify@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= dependencies: es6-promise "^4.0.3" escape-goat@^2.0.0: version "2.1.1" - resolved "http://localhost:4873/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" + resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "http://localhost:4873/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= escodegen@^1.11.1: version "1.14.1" - resolved "http://localhost:4873/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== dependencies: esprima "^4.0.1" @@ -2001,32 +2001,32 @@ escodegen@^1.11.1: esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" - resolved "http://localhost:4873/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== estraverse@^4.2.0: version "4.3.0" - resolved "http://localhost:4873/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estree-walker@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" + resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== esutils@^2.0.2: version "2.0.3" - resolved "http://localhost:4873/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== exec-sh@^0.3.2: version "0.3.4" - resolved "http://localhost:4873/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.4.tgz#3a018ceb526cc6f6df2bb504b2bfe8e3a4934ec5" integrity sha512-sEFIkc61v75sWeOe72qyrqg2Qg0OuLESziUDk/O/z2qgS15y2gWVFrI6f2Qn/qw/0/NCfCEsmNA4zOjkwEZT1A== execa@*, execa@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/execa/-/execa-4.0.0.tgz#7f37d6ec17f09e6b8fc53288611695b6d12b9daf" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.0.tgz#7f37d6ec17f09e6b8fc53288611695b6d12b9daf" integrity sha512-JbDUxwV3BoT5ZVXQrSVbAiaXhXUkIwvbhPIwZ0N13kX+5yCzOhUNdocxB/UQRuYOHRYYwAxKYwJYc0T4D12pDA== dependencies: cross-spawn "^7.0.0" @@ -2041,7 +2041,7 @@ execa@*, execa@^4.0.0: execa@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" + resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== dependencies: cross-spawn "^6.0.0" @@ -2054,7 +2054,7 @@ execa@^1.0.0: execa@^3.2.0: version "3.4.0" - resolved "http://localhost:4873/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" + resolved "https://registry.yarnpkg.com/execa/-/execa-3.4.0.tgz#c08ed4550ef65d858fac269ffc8572446f37eb89" integrity sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g== dependencies: cross-spawn "^7.0.0" @@ -2070,12 +2070,12 @@ execa@^3.2.0: exit@^0.1.2: version "0.1.2" - resolved "http://localhost:4873/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw= expand-brackets@^2.1.4: version "2.1.4" - resolved "http://localhost:4873/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" @@ -2088,7 +2088,7 @@ expand-brackets@^2.1.4: expect@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/expect/-/expect-25.2.4.tgz#b66e0777c861034ebc21730bb34e1839d5d46806" + resolved "https://registry.yarnpkg.com/expect/-/expect-25.2.4.tgz#b66e0777c861034ebc21730bb34e1839d5d46806" integrity sha512-hfuPhPds4yOsZtIw4kwAg70r0hqGmpqekgA+VX7pf/3wZ6FY+xIOXZhNsPMMMsspYG/YIsbAiwqsdnD4Ht+bCA== dependencies: "@jest/types" "^25.2.3" @@ -2100,14 +2100,14 @@ expect@^25.2.4: extend-shallow@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" - resolved "http://localhost:4873/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" @@ -2115,12 +2115,12 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: extend@~3.0.2: version "3.0.2" - resolved "http://localhost:4873/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== external-editor@^3.0.3: version "3.1.0" - resolved "http://localhost:4873/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== dependencies: chardet "^0.7.0" @@ -2129,7 +2129,7 @@ external-editor@^3.0.3: extglob@^2.0.4: version "2.0.4" - resolved "http://localhost:4873/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" @@ -2143,61 +2143,61 @@ extglob@^2.0.4: extsprintf@1.3.0: version "1.3.0" - resolved "http://localhost:4873/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: version "1.4.0" - resolved "http://localhost:4873/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= fast-deep-equal@^3.1.1: version "3.1.1" - resolved "http://localhost:4873/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== fast-json-stable-stringify@2.0.0: version "2.0.0" - resolved "http://localhost:4873/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= fast-json-stable-stringify@2.1.0, fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" - resolved "http://localhost:4873/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== fast-levenshtein@~2.0.6: version "2.0.6" - resolved "http://localhost:4873/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastparse@^1.1.2: version "1.1.2" - resolved "http://localhost:4873/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== fb-watchman@^2.0.0: version "2.0.1" - resolved "http://localhost:4873/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.1.tgz#fc84fb39d2709cf3ff6d743706157bb5708a8a85" integrity sha512-DkPJKQeY6kKwmuMretBhr7G6Vodr7bFwDYTXIkfG1gjvNpaxBTQV3PbXg6bR1c1UP4jPOX0jHUbbHANL9vRjVg== dependencies: bser "2.1.1" figures@^3.0.0: version "3.2.0" - resolved "http://localhost:4873/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== dependencies: escape-string-regexp "^1.0.5" fill-range@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" @@ -2207,26 +2207,26 @@ fill-range@^4.0.0: fill-range@^7.0.1: version "7.0.1" - resolved "http://localhost:4873/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" find-parent-dir@^0.3.0: version "0.3.0" - resolved "http://localhost:4873/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" + resolved "https://registry.yarnpkg.com/find-parent-dir/-/find-parent-dir-0.3.0.tgz#33c44b429ab2b2f0646299c5f9f718f376ff8d54" integrity sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ= find-up@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== dependencies: locate-path "^5.0.0" @@ -2234,17 +2234,17 @@ find-up@^4.0.0, find-up@^4.1.0: for-in@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= forever-agent@~0.6.1: version "0.6.1" - resolved "http://localhost:4873/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@~2.3.2: version "2.3.3" - resolved "http://localhost:4873/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== dependencies: asynckit "^0.4.0" @@ -2253,14 +2253,14 @@ form-data@~2.3.2: fragment-cache@^0.2.1: version "0.2.1" - resolved "http://localhost:4873/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fs-extra@4.0.2: version "4.0.2" - resolved "http://localhost:4873/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.2.tgz#f91704c53d1b461f893452b0c307d9997647ab6b" integrity sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s= dependencies: graceful-fs "^4.1.2" @@ -2269,7 +2269,7 @@ fs-extra@4.0.2: fs-extra@^9.0.0: version "9.0.0" - resolved "http://localhost:4873/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.0.tgz#b6afc31036e247b2466dc99c29ae797d5d4580a3" integrity sha512-pmEYSk3vYsG/bF651KPUXZ+hvjpgWYw/Gc7W9NFUe3ZVLczKKWIij3IKpOrQcdw4TILtibFslZ0UmR8Vvzig4g== dependencies: at-least-node "^1.0.0" @@ -2279,14 +2279,14 @@ fs-extra@^9.0.0: fs-minipass@^2.0.0, fs-minipass@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-2.1.0.tgz#7f5036fdbf12c63c169190cbe4199c852271f9fb" integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg== dependencies: minipass "^3.0.0" fs-write-stream-atomic@^1.0.8: version "1.0.10" - resolved "http://localhost:4873/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: graceful-fs "^4.1.2" @@ -2296,65 +2296,65 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^2.1.2, fsevents@~2.1.2: version "2.1.2" - resolved "http://localhost:4873/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== function-bind@^1.1.1: version "1.1.1" - resolved "http://localhost:4873/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== gensync@^1.0.0-beta.1: version "1.0.0-beta.1" - resolved "http://localhost:4873/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== get-caller-file@^2.0.1: version "2.0.5" - resolved "http://localhost:4873/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== get-stream@^4.0.0, get-stream@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== dependencies: pump "^3.0.0" get-stream@^5.0.0, get-stream@^5.1.0: version "5.1.0" - resolved "http://localhost:4873/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== dependencies: pump "^3.0.0" get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" - resolved "http://localhost:4873/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= getpass@^0.1.1: version "0.1.7" - resolved "http://localhost:4873/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" glob-parent@~5.1.0: version "5.1.1" - resolved "http://localhost:4873/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== dependencies: is-glob "^4.0.1" glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" - resolved "http://localhost:4873/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" @@ -2366,19 +2366,19 @@ glob@^7.0.3, glob@^7.0.6, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, gl global-dirs@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== dependencies: ini "^1.3.5" globals@^11.1.0: version "11.12.0" - resolved "http://localhost:4873/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== globby@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= dependencies: array-union "^1.0.1" @@ -2390,7 +2390,7 @@ globby@^5.0.0: got@^9.6.0: version "9.6.0" - resolved "http://localhost:4873/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== dependencies: "@sindresorhus/is" "^0.14.0" @@ -2407,22 +2407,22 @@ got@^9.6.0: graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: version "4.2.3" - resolved "http://localhost:4873/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== growly@^1.3.0: version "1.3.0" - resolved "http://localhost:4873/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= har-schema@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~5.1.3: version "5.1.3" - resolved "http://localhost:4873/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== dependencies: ajv "^6.5.5" @@ -2430,29 +2430,29 @@ har-validator@~5.1.3: has-ansi@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" has-flag@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-flag@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== has-symbols@^1.0.0, has-symbols@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== has-value@^0.3.1: version "0.3.1" - resolved "http://localhost:4873/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" @@ -2461,7 +2461,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" @@ -2470,12 +2470,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" - resolved "http://localhost:4873/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" @@ -2483,48 +2483,48 @@ has-values@^1.0.0: has-yarn@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" + resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== has@^1.0.3: version "1.0.3" - resolved "http://localhost:4873/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" hosted-git-info@^2.1.4: version "2.8.8" - resolved "http://localhost:4873/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== hosted-git-info@^3.0.2: version "3.0.4" - resolved "http://localhost:4873/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-3.0.4.tgz#be4973eb1fd2737b11c9c7c19380739bb249f60d" integrity sha512-4oT62d2jwSDBbLLFLZE+1vPuQ1h8p9wjrJ8Mqx5TjsyWmBMV5B13eJqn8pvluqubLf3cJPTfiYCIwNwDNmzScQ== dependencies: lru-cache "^5.1.1" html-encoding-sniffer@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== dependencies: whatwg-encoding "^1.0.1" html-escaper@^2.0.0: version "2.0.2" - resolved "http://localhost:4873/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== http-cache-semantics@^4.0.0, http-cache-semantics@^4.0.4: version "4.1.0" - resolved "http://localhost:4873/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== http-proxy-agent@^4.0.1: version "4.0.1" - resolved "http://localhost:4873/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg== dependencies: "@tootallnate/once" "1" @@ -2533,7 +2533,7 @@ http-proxy-agent@^4.0.1: http-signature@~1.2.0: version "1.2.0" - resolved "http://localhost:4873/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" @@ -2542,7 +2542,7 @@ http-signature@~1.2.0: https-proxy-agent@^2.2.1: version "2.2.4" - resolved "http://localhost:4873/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== dependencies: agent-base "^4.3.0" @@ -2550,7 +2550,7 @@ https-proxy-agent@^2.2.1: https-proxy-agent@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" integrity sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA== dependencies: agent-base "6" @@ -2558,53 +2558,53 @@ https-proxy-agent@^5.0.0: human-signals@^1.1.1: version "1.1.1" - resolved "http://localhost:4873/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== humanize-ms@^1.2.1: version "1.2.1" - resolved "http://localhost:4873/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" integrity sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0= dependencies: ms "^2.0.0" iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13: version "0.4.24" - resolved "http://localhost:4873/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" iferr@^0.1.5: version "0.1.5" - resolved "http://localhost:4873/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-walk@^3.0.3: version "3.0.3" - resolved "http://localhost:4873/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" image-size@~0.5.0: version "0.5.5" - resolved "http://localhost:4873/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" + resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c" integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w= immediate@~3.0.5: version "3.0.6" - resolved "http://localhost:4873/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= import-lazy@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= import-local@^3.0.2: version "3.0.2" - resolved "http://localhost:4873/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.0.2.tgz#a8cfd0431d1de4a2199703d003e3e62364fa6db6" integrity sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA== dependencies: pkg-dir "^4.2.0" @@ -2612,22 +2612,22 @@ import-local@^3.0.2: imurmurhash@^0.1.4: version "0.1.4" - resolved "http://localhost:4873/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indent-string@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== infer-owner@^1.0.4: version "1.0.4" - resolved "http://localhost:4873/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" + resolved "https://registry.yarnpkg.com/infer-owner/-/infer-owner-1.0.4.tgz#c4cefcaa8e51051c2a40ba2ce8a3d27295af9467" integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A== inflight@^1.0.4: version "1.0.6" - resolved "http://localhost:4873/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" @@ -2635,22 +2635,22 @@ inflight@^1.0.4: inherits@2, inherits@^2.0.3, inherits@~2.0.3: version "2.0.4" - resolved "http://localhost:4873/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ini@1.3.5, ini@^1.3.4, ini@^1.3.5, ini@~1.3.0: version "1.3.5" - resolved "http://localhost:4873/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== injection-js@^2.2.1: version "2.3.0" - resolved "http://localhost:4873/injection-js/-/injection-js-2.3.0.tgz#56d807282dfaf2f9663f45373c4206d7793c5dd6" + resolved "https://registry.yarnpkg.com/injection-js/-/injection-js-2.3.0.tgz#56d807282dfaf2f9663f45373c4206d7793c5dd6" integrity sha512-rhS6E5jv603kbaO72ylOt0hGF1LT03oqQ4GU5KOO0qSaRbIWmdUCHjXq+VT79jL6/NmXtw9ccfK6dh/CzjoYjA== inquirer@7.1.0: version "7.1.0" - resolved "http://localhost:4873/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== dependencies: ansi-escapes "^4.2.1" @@ -2669,79 +2669,79 @@ inquirer@7.1.0: ip-regex@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= ip@1.1.5: version "1.1.5" - resolved "http://localhost:4873/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= is-accessor-descriptor@^0.1.6: version "0.1.6" - resolved "http://localhost:4873/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-arrayish@^0.2.1: version "0.2.1" - resolved "http://localhost:4873/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-binary-path@~2.1.0: version "2.1.0" - resolved "http://localhost:4873/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-buffer@^1.1.5: version "1.1.6" - resolved "http://localhost:4873/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-callable@^1.1.4, is-callable@^1.1.5: version "1.1.5" - resolved "http://localhost:4873/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== is-ci@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== dependencies: ci-info "^2.0.0" is-data-descriptor@^0.1.4: version "0.1.4" - resolved "http://localhost:4873/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.2" - resolved "http://localhost:4873/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== is-descriptor@^0.1.0: version "0.1.6" - resolved "http://localhost:4873/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" @@ -2750,7 +2750,7 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" @@ -2759,51 +2759,51 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-docker@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b" integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ== is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" - resolved "http://localhost:4873/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^2.1.1: version "2.1.1" - resolved "http://localhost:4873/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-fullwidth-code-point@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-fullwidth-code-point@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== is-generator-fn@^2.0.0: version "2.1.0" - resolved "http://localhost:4873/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" - resolved "http://localhost:4873/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" is-installed-globally@^0.3.1: version "0.3.1" - resolved "http://localhost:4873/is-installed-globally/-/is-installed-globally-0.3.1.tgz#679afef819347a72584617fd19497f010b8ed35f" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.1.tgz#679afef819347a72584617fd19497f010b8ed35f" integrity sha512-oiEcGoQbGc+3/iijAijrK2qFpkNoNjsHOm/5V5iaeydyrS/hnwaRCEgH5cpW0P3T1lSjV5piB7S5b5lEugNLhg== dependencies: global-dirs "^2.0.1" @@ -2811,163 +2811,163 @@ is-installed-globally@^0.3.1: is-interactive@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== is-lambda@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" + resolved "https://registry.yarnpkg.com/is-lambda/-/is-lambda-1.0.1.tgz#3d9877899e6a53efc0160504cde15f82e6f061d5" integrity sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU= is-module@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= is-npm@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== is-number@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^7.0.0: version "7.0.0" - resolved "http://localhost:4873/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== is-obj@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== is-path-cwd@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= is-path-in-cwd@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" integrity sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ== dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= dependencies: path-is-inside "^1.0.1" is-path-inside@^3.0.1: version "3.0.2" - resolved "http://localhost:4873/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" - resolved "http://localhost:4873/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-promise@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-reference@^1.1.2: version "1.1.4" - resolved "http://localhost:4873/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" + resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw== dependencies: "@types/estree" "0.0.39" is-regex@^1.0.5: version "1.0.5" - resolved "http://localhost:4873/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== dependencies: has "^1.0.3" is-stream@^1.1.0: version "1.1.0" - resolved "http://localhost:4873/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-stream@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== is-symbol@^1.0.2: version "1.0.3" - resolved "http://localhost:4873/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: has-symbols "^1.0.1" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" - resolved "http://localhost:4873/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= is-windows@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-wsl@^2.1.1: version "2.1.1" - resolved "http://localhost:4873/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d" integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog== is-yarn-global@^0.3.0: version "0.3.0" - resolved "http://localhost:4873/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" + resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== isarray@1.0.0, isarray@~1.0.0: version "1.0.0" - resolved "http://localhost:4873/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" - resolved "http://localhost:4873/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" - resolved "http://localhost:4873/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isstream@~0.1.2: version "0.1.2" - resolved "http://localhost:4873/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= istanbul-lib-coverage@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec" + 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: version "4.0.1" - resolved "http://localhost:4873/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.1.tgz#61f13ac2c96cfefb076fe7131156cc05907874e6" integrity sha512-imIchxnodll7pvQBYOqUu88EufLCU56LMeFPZZM/fJZ1irYcYdqroaV+ACK1Ila8ls09iEYArp+nqyC6lW1Vfg== dependencies: "@babel/core" "^7.7.5" @@ -2980,7 +2980,7 @@ istanbul-lib-instrument@^4.0.0: istanbul-lib-report@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz#7518fe52ea44de372f460a76b5ecda9ffb73d8a6" integrity sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw== dependencies: istanbul-lib-coverage "^3.0.0" @@ -2989,7 +2989,7 @@ istanbul-lib-report@^3.0.0: istanbul-lib-source-maps@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz#75743ce6d96bb86dc7ee4352cf6366a23f0b1ad9" integrity sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg== dependencies: debug "^4.1.1" @@ -2998,7 +2998,7 @@ istanbul-lib-source-maps@^4.0.0: istanbul-reports@^3.0.0: version "3.0.1" - resolved "http://localhost:4873/istanbul-reports/-/istanbul-reports-3.0.1.tgz#1343217244ad637e0c3b18e7f6b746941a9b5e9a" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.0.1.tgz#1343217244ad637e0c3b18e7f6b746941a9b5e9a" integrity sha512-Vm9xwCiQ8t2cNNnckyeAV0UdxKpcQUz4nMxsBvIu8n2kmPSiyb5uaF/8LpmKr+yqL/MdOXaX2Nmdo4Qyxium9Q== dependencies: html-escaper "^2.0.0" @@ -3006,12 +3006,12 @@ istanbul-reports@^3.0.0: jasmine-core@~2.8.0: version "2.8.0" - resolved "http://localhost:4873/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" + resolved "https://registry.yarnpkg.com/jasmine-core/-/jasmine-core-2.8.0.tgz#bcc979ae1f9fd05701e45e52e65d3a5d63f1a24e" integrity sha1-vMl5rh+f0FcB5F5S5l06XWPxok4= jasmine@2.8.0: version "2.8.0" - resolved "http://localhost:4873/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" + resolved "https://registry.yarnpkg.com/jasmine/-/jasmine-2.8.0.tgz#6b089c0a11576b1f16df11b80146d91d4e8b8a3e" integrity sha1-awicChFXax8W3xG4AUbZHU6Lij4= dependencies: exit "^0.1.2" @@ -3020,12 +3020,12 @@ jasmine@2.8.0: jasminewd2@^2.1.0: version "2.2.0" - resolved "http://localhost:4873/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" + resolved "https://registry.yarnpkg.com/jasminewd2/-/jasminewd2-2.2.0.tgz#e37cf0b17f199cce23bea71b2039395246b4ec4e" integrity sha1-43zwsX8ZnM4jvqcbIDk5Uka07E4= jest-changed-files@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/jest-changed-files/-/jest-changed-files-25.2.3.tgz#ad19deef9e47ba37efb432d2c9a67dfd97cc78af" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-25.2.3.tgz#ad19deef9e47ba37efb432d2c9a67dfd97cc78af" integrity sha512-EFxy94dvvbqRB36ezIPLKJ4fDIC+jAdNs8i8uTwFpaXd6H3LVc3ova1lNS4ZPWk09OCR2vq5kSdSQgar7zMORg== dependencies: "@jest/types" "^25.2.3" @@ -3034,7 +3034,7 @@ jest-changed-files@^25.2.3: jest-cli@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest-cli/-/jest-cli-25.2.4.tgz#021c2383904696597abc060dcb133c82ebd8bfcc" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-25.2.4.tgz#021c2383904696597abc060dcb133c82ebd8bfcc" integrity sha512-zeY2pRDWKj2LZudIncvvguwLMEdcnJqc2jJbwza1beqi80qqLvkPF/BjbFkK2sIV3r+mfTJS+7ITrvK6pCdRjg== dependencies: "@jest/core" "^25.2.4" @@ -3053,7 +3053,7 @@ jest-cli@^25.2.4: jest-config@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest-config/-/jest-config-25.2.4.tgz#f4f33238979f225683179c89d1e402893008975d" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-25.2.4.tgz#f4f33238979f225683179c89d1e402893008975d" integrity sha512-fxy3nIpwJqOUQJRVF/q+pNQb6dv5b9YufOeCbpPZJ/md1zXpiupbhfehpfODhnKOfqbzSiigtSLzlWWmbRxnqQ== dependencies: "@babel/core" "^7.1.0" @@ -3077,7 +3077,7 @@ jest-config@^25.2.4: jest-diff@^25.1.0, jest-diff@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/jest-diff/-/jest-diff-25.2.3.tgz#54d601a0a754ef26e808a8c8dbadd278c215aa3f" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-25.2.3.tgz#54d601a0a754ef26e808a8c8dbadd278c215aa3f" integrity sha512-VtZ6LAQtaQpFsmEzps15dQc5ELbJxy4L2DOSo2Ev411TUEtnJPkAMD7JneVypeMJQ1y3hgxN9Ao13n15FAnavg== dependencies: chalk "^3.0.0" @@ -3087,14 +3087,14 @@ jest-diff@^25.1.0, jest-diff@^25.2.3: jest-docblock@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/jest-docblock/-/jest-docblock-25.2.3.tgz#ac45280c43d59e7139f9fbe5896c6e0320c01ebb" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-25.2.3.tgz#ac45280c43d59e7139f9fbe5896c6e0320c01ebb" integrity sha512-d3/tmjLLrH5fpRGmIm3oFa3vOaD/IjPxtXVOrfujpfJ9y1tCDB1x/tvunmdOVAyF03/xeMwburl6ITbiQT1mVA== dependencies: detect-newline "^3.0.0" jest-each@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/jest-each/-/jest-each-25.2.3.tgz#64067ba1508ebbd07e9b126c173ab371e8e6309d" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-25.2.3.tgz#64067ba1508ebbd07e9b126c173ab371e8e6309d" integrity sha512-RTlmCjsBDK2c9T5oO4MqccA3/5Y8BUtiEy7OOQik1iyCgdnNdHbI0pNEpyapZPBG0nlvZ4mIu7aY6zNUvLraAQ== dependencies: "@jest/types" "^25.2.3" @@ -3105,7 +3105,7 @@ jest-each@^25.2.3: jest-environment-jsdom@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest-environment-jsdom/-/jest-environment-jsdom-25.2.4.tgz#f2783541d0538b1bc43641703372cea6a2e83611" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-25.2.4.tgz#f2783541d0538b1bc43641703372cea6a2e83611" integrity sha512-5dm+tNwrLmhELdjAwiQnVGf/U9iFMWdTL4/wyrMg2HU6RQnCiuxpWbIigLHUhuP1P2Ak0F4k3xhjrikboKyShA== dependencies: "@jest/environment" "^25.2.4" @@ -3117,7 +3117,7 @@ jest-environment-jsdom@^25.2.4: jest-environment-node@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest-environment-node/-/jest-environment-node-25.2.4.tgz#dc211dfb0d8b66dfc1965a8f846e72e54ff0c430" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-25.2.4.tgz#dc211dfb0d8b66dfc1965a8f846e72e54ff0c430" integrity sha512-Jkc5Y8goyXPrLRHnrUlqC7P4o5zn2m4zw6qWoRJ59kxV1f2a5wK+TTGhrhCwnhW/Ckpdl/pm+LufdvhJkvJbiw== dependencies: "@jest/environment" "^25.2.4" @@ -3129,12 +3129,12 @@ jest-environment-node@^25.2.4: jest-get-type@^25.2.1: version "25.2.1" - resolved "http://localhost:4873/jest-get-type/-/jest-get-type-25.2.1.tgz#6c83de603c41b1627e6964da2f5454e6aa3c13a6" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-25.2.1.tgz#6c83de603c41b1627e6964da2f5454e6aa3c13a6" integrity sha512-EYjTiqcDTCRJDcSNKbLTwn/LcDPEE7ITk8yRMNAOjEsN6yp+Uu+V1gx4djwnuj/DvWg0YGmqaBqPVGsPxlvE7w== jest-haste-map@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/jest-haste-map/-/jest-haste-map-25.2.3.tgz#2649392b5af191f0167a27bfb62e5d96d7eaaade" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-25.2.3.tgz#2649392b5af191f0167a27bfb62e5d96d7eaaade" integrity sha512-pAP22OHtPr4qgZlJJFks2LLgoQUr4XtM1a+F5UaPIZNiCRnePA0hM3L7aiJ0gzwiNIYwMTfKRwG/S1L28J3A3A== dependencies: "@jest/types" "^25.2.3" @@ -3153,7 +3153,7 @@ jest-haste-map@^25.2.3: jest-jasmine2@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest-jasmine2/-/jest-jasmine2-25.2.4.tgz#5f77de83e1027f0c7588137055a80da773872374" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-25.2.4.tgz#5f77de83e1027f0c7588137055a80da773872374" integrity sha512-juoKrmNmLwaheNbAg71SuUF9ovwUZCFNTpKVhvCXWk+SSeORcIUMptKdPCoLXV3D16htzhTSKmNxnxSk4SrTjA== dependencies: "@babel/traverse" "^7.1.0" @@ -3176,7 +3176,7 @@ jest-jasmine2@^25.2.4: jest-leak-detector@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/jest-leak-detector/-/jest-leak-detector-25.2.3.tgz#4cf39f137925e0061c04c24ca65cae36465f0238" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-25.2.3.tgz#4cf39f137925e0061c04c24ca65cae36465f0238" integrity sha512-yblCMPE7NJKl7778Cf/73yyFWAas5St0iiEBwq7RDyaz6Xd4WPFnPz2j7yDb/Qce71A1IbDoLADlcwD8zT74Aw== dependencies: jest-get-type "^25.2.1" @@ -3184,7 +3184,7 @@ jest-leak-detector@^25.2.3: jest-matcher-utils@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/jest-matcher-utils/-/jest-matcher-utils-25.2.3.tgz#59285bd6d6c810debc9caa585ed985e46a3f28fd" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-25.2.3.tgz#59285bd6d6c810debc9caa585ed985e46a3f28fd" integrity sha512-ZmiXiwQRVM9MoKjGMP5YsGGk2Th5ncyRxfXKz5AKsmU8m43kgNZirckVzaP61MlSa9LKmXbevdYqVp1ZKAw2Rw== dependencies: chalk "^3.0.0" @@ -3194,7 +3194,7 @@ jest-matcher-utils@^25.2.3: jest-message-util@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest-message-util/-/jest-message-util-25.2.4.tgz#b1441b9c82f5c11fc661303cbf200a2f136a7762" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-25.2.4.tgz#b1441b9c82f5c11fc661303cbf200a2f136a7762" integrity sha512-9wWMH3Bf+GVTv0GcQLmH/FRr0x0toptKw9TA8U5YFLVXx7Tq9pvcNzTyJrcTJ+wLqNbMPPJlJNft4MnlcrtF5Q== dependencies: "@babel/code-frame" "^7.0.0" @@ -3208,19 +3208,19 @@ jest-message-util@^25.2.4: jest-mock@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/jest-mock/-/jest-mock-25.2.3.tgz#b37a581f59d61bd91db27a99bf7eb8b3e5e993d5" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-25.2.3.tgz#b37a581f59d61bd91db27a99bf7eb8b3e5e993d5" integrity sha512-xlf+pyY0j47zoCs8zGGOGfWyxxLximE8YFOfEK8s4FruR8DtM/UjNj61um+iDuMAFEBDe1bhCXkqiKoCmWjJzg== dependencies: "@jest/types" "^25.2.3" jest-pnp-resolver@^1.2.1: version "1.2.1" - resolved "http://localhost:4873/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a" integrity sha512-pgFw2tm54fzgYvc/OHrnysABEObZCUNFnhjoRjaVOCN8NYc032/gVjPaHD4Aq6ApkSieWtfKAFQtmDKAmhupnQ== jest-preset-angular@^8.0.0, jest-preset-angular@^8.1.2: version "8.1.2" - resolved "http://localhost:4873/jest-preset-angular/-/jest-preset-angular-8.1.2.tgz#2dc49e852351aa1d58ffdb94fce4bd9d4b5a59e2" + resolved "https://registry.yarnpkg.com/jest-preset-angular/-/jest-preset-angular-8.1.2.tgz#2dc49e852351aa1d58ffdb94fce4bd9d4b5a59e2" integrity sha512-a6RPuWIUAnEBq3nsgwh6B+ZaJ1wYF7ChvNNBp4vS9lM9OG8r2waa4+OpIQDZJ9ptERDsPC2vjr6QY3R0ai9vcw== dependencies: pretty-format "^25.0.0" @@ -3228,12 +3228,12 @@ jest-preset-angular@^8.0.0, jest-preset-angular@^8.1.2: jest-regex-util@^25.2.1: version "25.2.1" - resolved "http://localhost:4873/jest-regex-util/-/jest-regex-util-25.2.1.tgz#db64b0d15cd3642c93b7b9627801d7c518600584" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-25.2.1.tgz#db64b0d15cd3642c93b7b9627801d7c518600584" integrity sha512-wroFVJw62LdqTdkL508ZLV82FrJJWVJMIuYG7q4Uunl1WAPTf4ftPKrqqfec4SvOIlvRZUdEX2TFpWR356YG/w== jest-resolve-dependencies@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest-resolve-dependencies/-/jest-resolve-dependencies-25.2.4.tgz#2d904400387d74a366dff54badb40a2b3210e733" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-25.2.4.tgz#2d904400387d74a366dff54badb40a2b3210e733" integrity sha512-qhUnK4PfNHzNdca7Ub1mbAqE0j5WNyMTwxBZZJjQlUrdqsiYho/QGK65FuBkZuSoYtKIIqriR9TpGrPEc3P5Gg== dependencies: "@jest/types" "^25.2.3" @@ -3242,7 +3242,7 @@ jest-resolve-dependencies@^25.2.4: jest-resolve@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/jest-resolve/-/jest-resolve-25.2.3.tgz#ababeaf2bb948cb6d2dea8453759116da0fb7842" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-25.2.3.tgz#ababeaf2bb948cb6d2dea8453759116da0fb7842" integrity sha512-1vZMsvM/DBH258PnpUNSXIgtzpYz+vCVCj9+fcy4akZl4oKbD+9hZSlfe9RIDpU0Fc28ozHQrmwX3EqFRRIHGg== dependencies: "@jest/types" "^25.2.3" @@ -3254,7 +3254,7 @@ jest-resolve@^25.2.3: jest-runner@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest-runner/-/jest-runner-25.2.4.tgz#d0daf7c56b4a83b6b675863d5cdcd502c960f9a1" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-25.2.4.tgz#d0daf7c56b4a83b6b675863d5cdcd502c960f9a1" integrity sha512-5xaIfqqxck9Wg2CV4b9KmJtf/sWO7zWQx7O+34GCLGPzoPcVmB3mZtdrQI1/jS3Reqjru9ycLjgLHSf6XoxRqA== dependencies: "@jest/console" "^25.2.3" @@ -3279,7 +3279,7 @@ jest-runner@^25.2.4: jest-runtime@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest-runtime/-/jest-runtime-25.2.4.tgz#c66a421e115944426b377a7fd331f6c0902cfa56" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-25.2.4.tgz#c66a421e115944426b377a7fd331f6c0902cfa56" integrity sha512-6ehOUizgIghN+aV5YSrDzTZ+zJ9omgEjJbTHj3Jqes5D52XHfhzT7cSfdREwkNjRytrR7mNwZ7pRauoyNLyJ8Q== dependencies: "@jest/console" "^25.2.3" @@ -3310,12 +3310,12 @@ jest-runtime@^25.2.4: jest-serializer@^25.2.1: version "25.2.1" - resolved "http://localhost:4873/jest-serializer/-/jest-serializer-25.2.1.tgz#51727a5fc04256f461abe0fa024a022ba165877a" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-25.2.1.tgz#51727a5fc04256f461abe0fa024a022ba165877a" integrity sha512-fibDi7M5ffx6c/P66IkvR4FKkjG5ldePAK1WlbNoaU4GZmIAkS9Le/frAwRUFEX0KdnisSPWf+b1RC5jU7EYJQ== jest-snapshot@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest-snapshot/-/jest-snapshot-25.2.4.tgz#08d4517579c864df4280bcc948ceea34327a4ded" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-25.2.4.tgz#08d4517579c864df4280bcc948ceea34327a4ded" integrity sha512-nIwpW7FZCq5p0AE3Oyqyb6jL0ENJixXzJ5/CD/XRuOqp3gS5OM3O/k+NnTrniCXxPFV4ry6s9HNfiPQBi0wcoA== dependencies: "@babel/types" "^7.0.0" @@ -3335,7 +3335,7 @@ jest-snapshot@^25.2.4: jest-util@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/jest-util/-/jest-util-25.2.3.tgz#0abf95a1d6b96f2de5a3ecd61b36c40a182dc256" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-25.2.3.tgz#0abf95a1d6b96f2de5a3ecd61b36c40a182dc256" integrity sha512-7tWiMICVSo9lNoObFtqLt9Ezt5exdFlWs5fLe1G4XLY2lEbZc814cw9t4YHScqBkWMfzth8ASHKlYBxiX2rdCw== dependencies: "@jest/types" "^25.2.3" @@ -3345,7 +3345,7 @@ jest-util@^25.2.3: jest-validate@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/jest-validate/-/jest-validate-25.2.3.tgz#ecb0f093cf8ae71d15075fb48439b6f78f1fcb5a" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-25.2.3.tgz#ecb0f093cf8ae71d15075fb48439b6f78f1fcb5a" integrity sha512-GObn91jzU0B0Bv4cusAwjP6vnWy78hJUM8MOSz7keRfnac/ZhQWIsUjvk01IfeXNTemCwgR57EtdjQMzFZGREg== dependencies: "@jest/types" "^25.2.3" @@ -3357,7 +3357,7 @@ jest-validate@^25.2.3: jest-watcher@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest-watcher/-/jest-watcher-25.2.4.tgz#dda85b914d470fa4145164a8f70bda4f208bafb6" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-25.2.4.tgz#dda85b914d470fa4145164a8f70bda4f208bafb6" integrity sha512-p7g7s3zqcy69slVzQYcphyzkB2FBmJwMbv6k6KjI5mqd6KnUnQPfQVKuVj2l+34EeuxnbXqnrjtUFmxhcL87rg== dependencies: "@jest/test-result" "^25.2.4" @@ -3369,7 +3369,7 @@ jest-watcher@^25.2.4: jest-worker@^25.2.1: version "25.2.1" - resolved "http://localhost:4873/jest-worker/-/jest-worker-25.2.1.tgz#209617015c768652646aa33a7828cc2ab472a18a" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.2.1.tgz#209617015c768652646aa33a7828cc2ab472a18a" integrity sha512-IHnpekk8H/hCUbBlfeaPZzU6v75bqwJp3n4dUrQuQOAgOneI4tx3jV2o8pvlXnDfcRsfkFIUD//HWXpCmR+evQ== dependencies: merge-stream "^2.0.0" @@ -3377,7 +3377,7 @@ jest-worker@^25.2.1: jest@^25.2.4: version "25.2.4" - resolved "http://localhost:4873/jest/-/jest-25.2.4.tgz#d10941948a2b57eb7accc2e7ae78af4a0e11b40a" + resolved "https://registry.yarnpkg.com/jest/-/jest-25.2.4.tgz#d10941948a2b57eb7accc2e7ae78af4a0e11b40a" integrity sha512-Lu4LXxf4+durzN/IFilcAoQSisOwgHIXgl9vffopePpSSwFqfj1Pj4y+k3nL8oTbnvjxgDIsEcepy6he4bWqnQ== dependencies: "@jest/core" "^25.2.4" @@ -3386,12 +3386,12 @@ jest@^25.2.4: js-tokens@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== js-yaml@^3.13.1: version "3.13.1" - resolved "http://localhost:4873/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" @@ -3399,12 +3399,12 @@ js-yaml@^3.13.1: jsbn@~0.1.0: version "0.1.1" - resolved "http://localhost:4873/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsdom@^15.2.1: version "15.2.1" - resolved "http://localhost:4873/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-15.2.1.tgz#d2feb1aef7183f86be521b8c6833ff5296d07ec5" integrity sha512-fAl1W0/7T2G5vURSyxBzrJ1LSdQn6Tr5UX/xD4PXDx/PDgwygedfW6El/KIj3xJ7FU61TTYnc/l/B7P49Eqt6g== dependencies: abab "^2.0.0" @@ -3436,61 +3436,61 @@ jsdom@^15.2.1: jsesc@^2.5.1: version "2.5.2" - resolved "http://localhost:4873/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== jsesc@~0.5.0: version "0.5.0" - resolved "http://localhost:4873/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= json-buffer@3.0.0: version "3.0.0" - resolved "http://localhost:4873/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= json-parse-better-errors@^1.0.1: version "1.0.2" - resolved "http://localhost:4873/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== json-parse-even-better-errors@^2.0.1: version "2.2.0" - resolved "http://localhost:4873/json-parse-even-better-errors/-/json-parse-even-better-errors-2.2.0.tgz#304d29aa54bb01156a1328c454034ff0ac8a7bf4" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.2.0.tgz#304d29aa54bb01156a1328c454034ff0ac8a7bf4" integrity sha512-2tLgY7LRNZ9Hd6gmCuBG5/OjRHQpSgJQqJoYyLLOhUgn8LdOYrjaZLcxkWnDads+AD/haWWioPNziXQcgvQJ/g== json-schema-traverse@^0.4.1: version "0.4.1" - resolved "http://localhost:4873/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== json-schema@0.2.3: version "0.2.3" - resolved "http://localhost:4873/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= json-stringify-safe@~5.0.1: version "5.0.1" - resolved "http://localhost:4873/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json5@2.x, json5@^2.1.2: version "2.1.2" - resolved "http://localhost:4873/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ== dependencies: minimist "^1.2.5" jsonfile@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" jsonfile@^6.0.1: version "6.0.1" - resolved "http://localhost:4873/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== dependencies: universalify "^1.0.0" @@ -3499,12 +3499,12 @@ jsonfile@^6.0.1: jsonparse@^1.3.1: version "1.3.1" - resolved "http://localhost:4873/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= jsprim@^1.2.2: version "1.4.1" - resolved "http://localhost:4873/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" @@ -3514,7 +3514,7 @@ jsprim@^1.2.2: jszip@^3.1.3: version "3.2.2" - resolved "http://localhost:4873/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA== dependencies: lie "~3.3.0" @@ -3524,55 +3524,55 @@ jszip@^3.1.3: just-compare@^1.3.0: version "1.3.0" - resolved "http://localhost:4873/just-compare/-/just-compare-1.3.0.tgz#a53c31373f150a5b238555c243af4d8a38d7a0e5" + resolved "https://registry.yarnpkg.com/just-compare/-/just-compare-1.3.0.tgz#a53c31373f150a5b238555c243af4d8a38d7a0e5" integrity sha512-i4QNo3mPYubDmAwPbCKQl5C2b5s0yudP5V5GDp6lGR1PM22Em4Idf7mcaIzXYcL6/RLdZtuGrAqkBe9RYM/t4w== keyv@^3.0.0: version "3.1.0" - resolved "http://localhost:4873/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== dependencies: json-buffer "3.0.0" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" - resolved "http://localhost:4873/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0: version "5.1.0" - resolved "http://localhost:4873/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" - resolved "http://localhost:4873/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== kleur@^3.0.3: version "3.0.3" - resolved "http://localhost:4873/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== latest-version@^5.0.0: version "5.1.0" - resolved "http://localhost:4873/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== dependencies: package-json "^6.3.0" less@^3.10.3: version "3.11.1" - resolved "http://localhost:4873/less/-/less-3.11.1.tgz#c6bf08e39e02404fe6b307a3dfffafdc55bd36e2" + resolved "https://registry.yarnpkg.com/less/-/less-3.11.1.tgz#c6bf08e39e02404fe6b307a3dfffafdc55bd36e2" integrity sha512-tlWX341RECuTOvoDIvtFqXsKj072hm3+9ymRBe76/mD6O5ZZecnlAOVDlWAleF2+aohFrxNidXhv2773f6kY7g== dependencies: clone "^2.1.2" @@ -3589,12 +3589,12 @@ less@^3.10.3: leven@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== levn@~0.3.0: version "0.3.0" - resolved "http://localhost:4873/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" @@ -3602,19 +3602,19 @@ levn@~0.3.0: lie@~3.3.0: version "3.3.0" - resolved "http://localhost:4873/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== dependencies: immediate "~3.0.5" lines-and-columns@^1.1.6: version "1.1.6" - resolved "http://localhost:4873/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= locate-path@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" @@ -3622,86 +3622,86 @@ locate-path@^3.0.0: locate-path@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== dependencies: p-locate "^4.1.0" lodash.memoize@4.x: version "4.1.2" - resolved "http://localhost:4873/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= lodash.sortby@^4.7.0: version "4.7.0" - resolved "http://localhost:4873/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= lodash@^4.17.10, lodash@^4.17.13, lodash@^4.17.15: version "4.17.15" - resolved "http://localhost:4873/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== log-symbols@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" integrity sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ== dependencies: chalk "^2.4.2" lolex@^5.0.0: version "5.1.2" - resolved "http://localhost:4873/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== dependencies: "@sinonjs/commons" "^1.7.0" lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== lowercase-keys@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== lru-cache@^5.1.1: version "5.1.1" - resolved "http://localhost:4873/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== dependencies: yallist "^3.0.2" magic-string@0.25.4: version "0.25.4" - resolved "http://localhost:4873/magic-string/-/magic-string-0.25.4.tgz#325b8a0a79fc423db109b77fd5a19183b7ba5143" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.4.tgz#325b8a0a79fc423db109b77fd5a19183b7ba5143" integrity sha512-oycWO9nEVAP2RVPbIoDoA4Y7LFIJ3xRYov93gAyJhZkET1tNuB0u7uWkZS2LpBWTJUWnmau/To8ECWRC+jKNfw== dependencies: sourcemap-codec "^1.4.4" magic-string@0.25.7, magic-string@^0.25.0, magic-string@^0.25.2: version "0.25.7" - resolved "http://localhost:4873/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== dependencies: sourcemap-codec "^1.4.4" make-dir@^3.0.0: version "3.0.2" - resolved "http://localhost:4873/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392" integrity sha512-rYKABKutXa6vXTXhoV18cBE7PaewPXHe/Bdq4v+ZLMhxbWApkFFplT0LcbMW+6BbjnQXzZ/sAvSE/JdguApG5w== dependencies: semver "^6.0.0" make-error@1.x, make-error@^1.1.1: version "1.3.6" - resolved "http://localhost:4873/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== make-fetch-happen@^8.0.2: version "8.0.4" - resolved "http://localhost:4873/make-fetch-happen/-/make-fetch-happen-8.0.4.tgz#d3451baf5b43d6230c4eea7009c5aa6b6bccf9d4" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-8.0.4.tgz#d3451baf5b43d6230c4eea7009c5aa6b6bccf9d4" integrity sha512-hIFoqGq1db0QMiy/Atr/pI1Rs4rDV+ZdGSey2SQyF3KK3u1z4aj9mS5UdNnZkdQpA+H3pGn0J3KlEwsi2x4EqA== dependencies: agentkeepalive "^4.1.0" @@ -3722,31 +3722,31 @@ make-fetch-happen@^8.0.2: makeerror@1.0.x: version "1.0.11" - resolved "http://localhost:4873/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c" integrity sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw= dependencies: tmpl "1.0.x" map-cache@^0.2.2: version "0.2.2" - resolved "http://localhost:4873/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-visit@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" merge-stream@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== micromatch@^3.1.4: version "3.1.10" - resolved "http://localhost:4873/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" @@ -3765,7 +3765,7 @@ micromatch@^3.1.4: micromatch@^4.0.2: version "4.0.2" - resolved "http://localhost:4873/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== dependencies: braces "^3.0.1" @@ -3773,63 +3773,63 @@ micromatch@^4.0.2: mime-db@1.43.0: version "1.43.0" - resolved "http://localhost:4873/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== mime-types@^2.1.12, mime-types@~2.1.19: version "2.1.26" - resolved "http://localhost:4873/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== dependencies: mime-db "1.43.0" mime@^1.4.1: version "1.6.0" - resolved "http://localhost:4873/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.3.1: version "2.4.4" - resolved "http://localhost:4873/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== mimic-fn@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== minimatch@^3.0.4: version "3.0.4" - resolved "http://localhost:4873/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" - resolved "http://localhost:4873/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== minimist@~0.0.1: version "0.0.10" - resolved "http://localhost:4873/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass-collect@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" + resolved "https://registry.yarnpkg.com/minipass-collect/-/minipass-collect-1.0.2.tgz#22b813bf745dc6edba2576b940022ad6edc8c617" integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA== dependencies: minipass "^3.0.0" minipass-fetch@^1.1.2, minipass-fetch@^1.2.1: version "1.2.1" - resolved "http://localhost:4873/minipass-fetch/-/minipass-fetch-1.2.1.tgz#1b97ecb559be56b09812d45b2e9509f1f59ece2f" + resolved "https://registry.yarnpkg.com/minipass-fetch/-/minipass-fetch-1.2.1.tgz#1b97ecb559be56b09812d45b2e9509f1f59ece2f" integrity sha512-ssHt0dkljEDaKmTgQ04DQgx2ag6G2gMPxA5hpcsoeTbfDgRf2fC2gNSRc6kISjD7ckCpHwwQvXxuTBK8402fXg== dependencies: minipass "^3.1.0" @@ -3841,14 +3841,14 @@ minipass-fetch@^1.1.2, minipass-fetch@^1.2.1: minipass-flush@^1.0.5: version "1.0.5" - resolved "http://localhost:4873/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" + resolved "https://registry.yarnpkg.com/minipass-flush/-/minipass-flush-1.0.5.tgz#82e7135d7e89a50ffe64610a787953c4c4cbb373" integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw== dependencies: minipass "^3.0.0" minipass-json-stream@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" + resolved "https://registry.yarnpkg.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz#7edbb92588fbfc2ff1db2fc10397acb7b6b44aa7" integrity sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg== dependencies: jsonparse "^1.3.1" @@ -3856,28 +3856,28 @@ minipass-json-stream@^1.0.1: minipass-pipeline@^1.2.2: version "1.2.2" - resolved "http://localhost:4873/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" + resolved "https://registry.yarnpkg.com/minipass-pipeline/-/minipass-pipeline-1.2.2.tgz#3dcb6bb4a546e32969c7ad710f2c79a86abba93a" integrity sha512-3JS5A2DKhD2g0Gg8x3yamO0pj7YeKGwVlDS90pF++kxptwx/F+B//roxf9SqYil5tQo65bijy+dAuAFZmYOouA== dependencies: minipass "^3.0.0" minipass-sized@^1.0.3: version "1.0.3" - resolved "http://localhost:4873/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" + resolved "https://registry.yarnpkg.com/minipass-sized/-/minipass-sized-1.0.3.tgz#70ee5a7c5052070afacfbc22977ea79def353b70" integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g== dependencies: minipass "^3.0.0" minipass@^3.0.0, minipass@^3.0.1, minipass@^3.1.0, minipass@^3.1.1: version "3.1.1" - resolved "http://localhost:4873/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== dependencies: yallist "^4.0.0" minizlib@^2.0.0, minizlib@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-2.1.0.tgz#fd52c645301ef09a63a2c209697c294c6ce02cf3" integrity sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA== dependencies: minipass "^3.0.0" @@ -3885,7 +3885,7 @@ minizlib@^2.0.0, minizlib@^2.1.0: mixin-deep@^1.2.0: version "1.3.2" - resolved "http://localhost:4873/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== dependencies: for-in "^1.0.2" @@ -3893,19 +3893,19 @@ mixin-deep@^1.2.0: mkdirp@1.x, mkdirp@^1.0.3: version "1.0.3" - resolved "http://localhost:4873/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.3.tgz#4cf2e30ad45959dddea53ad97d518b6c8205e1ea" integrity sha512-6uCP4Qc0sWsgMLy1EOqqS/3rjDHOEnsStVr/4vtAIK2Y5i2kA7lFFejYrpIyiN9w0pYf4ckeCYT9f1r1P9KX5g== mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.x: version "0.5.4" - resolved "http://localhost:4873/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== dependencies: minimist "^1.2.5" move-concurrently@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= dependencies: aproba "^1.1.1" @@ -3917,22 +3917,22 @@ move-concurrently@^1.0.1: ms@2.0.0: version "2.0.0" - resolved "http://localhost:4873/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@^2.0.0, ms@^2.1.1: version "2.1.2" - resolved "http://localhost:4873/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== mute-stream@0.0.8: version "0.0.8" - resolved "http://localhost:4873/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== nanomatch@^1.2.9: version "1.2.13" - resolved "http://localhost:4873/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== dependencies: arr-diff "^4.0.0" @@ -3949,12 +3949,12 @@ nanomatch@^1.2.9: natural-compare@^1.4.0: version "1.4.0" - resolved "http://localhost:4873/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= ng-packagr@^9.0.0: version "9.1.0" - resolved "http://localhost:4873/ng-packagr/-/ng-packagr-9.1.0.tgz#65380bd8f05c62ee3c5f42069404fe1ca492498c" + resolved "https://registry.yarnpkg.com/ng-packagr/-/ng-packagr-9.1.0.tgz#65380bd8f05c62ee3c5f42069404fe1ca492498c" integrity sha512-783WCTa+qQl8QQefQ3n8cDzYF3PpsQUnY87SwuXIxaJ1p8NjBq/3vCZmTiI3AXzDZFhRacbCqghtaJGU1qcFrQ== dependencies: "@rollup/plugin-commonjs" "^11.0.2" @@ -3986,22 +3986,22 @@ ng-packagr@^9.0.0: nice-try@^1.0.4: version "1.0.5" - resolved "http://localhost:4873/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-int64@^0.4.0: version "0.4.0" - resolved "http://localhost:4873/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs= node-modules-regexp@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-notifier@^6.0.0: version "6.0.0" - resolved "http://localhost:4873/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-6.0.0.tgz#cea319e06baa16deec8ce5cd7f133c4a46b68e12" integrity sha512-SVfQ/wMw+DesunOm5cKqr6yDcvUTDl/yc97ybGHMrteNEY6oekXpNpS3lZwgLlwz0FLgHoiW28ZpmBHUDg37cw== dependencies: growly "^1.3.0" @@ -4012,19 +4012,19 @@ node-notifier@^6.0.0: node-releases@^1.1.52: version "1.1.53" - resolved "http://localhost:4873/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== node-sass-tilde-importer@^1.0.0: version "1.0.2" - resolved "http://localhost:4873/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz#1a15105c153f648323b4347693fdb0f331bad1ce" + resolved "https://registry.yarnpkg.com/node-sass-tilde-importer/-/node-sass-tilde-importer-1.0.2.tgz#1a15105c153f648323b4347693fdb0f331bad1ce" integrity sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg== dependencies: find-parent-dir "^0.3.0" normalize-package-data@^2.0.0, normalize-package-data@^2.5.0: version "2.5.0" - resolved "http://localhost:4873/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== dependencies: hosted-git-info "^2.1.4" @@ -4034,48 +4034,48 @@ normalize-package-data@^2.0.0, normalize-package-data@^2.5.0: normalize-path@^2.1.1: version "2.1.1" - resolved "http://localhost:4873/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "http://localhost:4873/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-range@^0.1.2: version "0.1.2" - resolved "http://localhost:4873/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= normalize-url@^4.1.0: version "4.5.0" - resolved "http://localhost:4873/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== npm-bundled@^1.1.1: version "1.1.1" - resolved "http://localhost:4873/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== dependencies: npm-normalize-package-bin "^1.0.1" npm-install-checks@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz#a37facc763a2fde0497ef2c6d0ac7c3fbe00d7b4" integrity sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w== dependencies: semver "^7.1.1" npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== npm-package-arg@8.0.1, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1: version "8.0.1" - resolved "http://localhost:4873/npm-package-arg/-/npm-package-arg-8.0.1.tgz#9d76f8d7667b2373ffda60bb801a27ef71e3e270" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-8.0.1.tgz#9d76f8d7667b2373ffda60bb801a27ef71e3e270" integrity sha512-/h5Fm6a/exByzFSTm7jAyHbgOqErl9qSNJDQF32Si/ZzgwT2TERVxRxn3Jurw1wflgyVVAxnFR4fRHPM7y1ClQ== dependencies: hosted-git-info "^3.0.2" @@ -4084,7 +4084,7 @@ npm-package-arg@8.0.1, npm-package-arg@^8.0.0, npm-package-arg@^8.0.1: npm-packlist@^2.1.0: version "2.1.1" - resolved "http://localhost:4873/npm-packlist/-/npm-packlist-2.1.1.tgz#08806a1df79acdc43d02d20c83a3d5472d96c90c" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.1.1.tgz#08806a1df79acdc43d02d20c83a3d5472d96c90c" integrity sha512-95TSDvGwujIhqfSpIiRRLodEF+y6mJMopuZdahoGzqtRDFZXGav46S0p6ngeWaiAkb5R72w6eVARhzej0HvZeQ== dependencies: glob "^7.1.6" @@ -4094,7 +4094,7 @@ npm-packlist@^2.1.0: npm-pick-manifest@6.0.0, npm-pick-manifest@^6.0.0: version "6.0.0" - resolved "http://localhost:4873/npm-pick-manifest/-/npm-pick-manifest-6.0.0.tgz#bfde7abe95f2670aed1629a3c18245ccb3cc2eb8" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-6.0.0.tgz#bfde7abe95f2670aed1629a3c18245ccb3cc2eb8" integrity sha512-PdJpXMvjqt4nftNEDpCgjBUF8yI3Q3MyuAmVB9nemnnCg32F4BPL/JFBfdj8DubgHCYUFQhtLWmBPvdsFtjWMg== dependencies: npm-install-checks "^4.0.0" @@ -4103,7 +4103,7 @@ npm-pick-manifest@6.0.0, npm-pick-manifest@^6.0.0: npm-registry-fetch@^8.0.0: version "8.0.0" - resolved "http://localhost:4873/npm-registry-fetch/-/npm-registry-fetch-8.0.0.tgz#65bb51dd2b9634b8363019aac9c76c003e5c5eaf" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-8.0.0.tgz#65bb51dd2b9634b8363019aac9c76c003e5c5eaf" integrity sha512-975WwLvZjX97y9UWWQ8nAyr7bw02s9xKPHqvEm5T900LQsB1HXb8Gb9ebYtCBLSX+K8gSOrO5KS/9yV/naLZmQ== dependencies: "@npmcli/ci-detect" "^1.0.0" @@ -4117,41 +4117,41 @@ npm-registry-fetch@^8.0.0: npm-run-path@^2.0.0: version "2.0.2" - resolved "http://localhost:4873/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" npm-run-path@^4.0.0: version "4.0.1" - resolved "http://localhost:4873/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== dependencies: path-key "^3.0.0" num2fraction@^1.2.2: version "1.2.2" - resolved "http://localhost:4873/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= nwsapi@^2.2.0: version "2.2.0" - resolved "http://localhost:4873/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== oauth-sign@~0.9.0: version "0.9.0" - resolved "http://localhost:4873/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== object-assign@^4.0.1: version "4.1.1" - resolved "http://localhost:4873/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-copy@^0.1.0: version "0.1.0" - resolved "http://localhost:4873/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" @@ -4160,24 +4160,24 @@ object-copy@^0.1.0: object-inspect@^1.7.0: version "1.7.0" - resolved "http://localhost:4873/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" - resolved "http://localhost:4873/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== object-visit@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" object.assign@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== dependencies: define-properties "^1.1.2" @@ -4187,7 +4187,7 @@ object.assign@^4.1.0: object.getownpropertydescriptors@^2.0.3: version "2.1.0" - resolved "http://localhost:4873/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== dependencies: define-properties "^1.1.3" @@ -4195,28 +4195,28 @@ object.getownpropertydescriptors@^2.0.3: object.pick@^1.3.0: version "1.3.0" - resolved "http://localhost:4873/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" - resolved "http://localhost:4873/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^5.1.0: version "5.1.0" - resolved "http://localhost:4873/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.0.tgz#fff0f3c91617fe62bb50189636e99ac8a6df7be5" integrity sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q== dependencies: mimic-fn "^2.1.0" open@7.0.3: version "7.0.3" - resolved "http://localhost:4873/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48" + resolved "https://registry.yarnpkg.com/open/-/open-7.0.3.tgz#db551a1af9c7ab4c7af664139930826138531c48" integrity sha512-sP2ru2v0P290WFfv49Ap8MF6PkzGNnGlAwHweB4WR4mr5d2d0woiCluUeJ218w7/+PmoBy9JmYgD5A4mLcWOFA== dependencies: is-docker "^2.0.0" @@ -4224,7 +4224,7 @@ open@7.0.3: optimist@~0.6.0: version "0.6.1" - resolved "http://localhost:4873/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" @@ -4232,7 +4232,7 @@ optimist@~0.6.0: optionator@^0.8.1: version "0.8.3" - resolved "http://localhost:4873/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== dependencies: deep-is "~0.1.3" @@ -4244,7 +4244,7 @@ optionator@^0.8.1: ora@4.0.3: version "4.0.3" - resolved "http://localhost:4873/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" + resolved "https://registry.yarnpkg.com/ora/-/ora-4.0.3.tgz#752a1b7b4be4825546a7a3d59256fa523b6b6d05" integrity sha512-fnDebVFyz309A73cqCipVL1fBZewq4vwgSHfxh43vVy31mbyoQ8sCH3Oeaog/owYOs/lLlGVPCISQonTneg6Pg== dependencies: chalk "^3.0.0" @@ -4258,65 +4258,65 @@ ora@4.0.3: os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" - resolved "http://localhost:4873/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= p-cancelable@^1.0.0: version "1.1.0" - resolved "http://localhost:4873/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== p-each-series@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-2.1.0.tgz#961c8dd3f195ea96c747e636b262b800a6b1af48" integrity sha512-ZuRs1miPT4HrjFa+9fRfOFXxGJfORgelKV9f9nNOWw2gl6gVsRaVDOQP0+MI0G0wGKns1Yacsu0GjOFbTK0JFQ== p-finally@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-finally@^2.0.0: version "2.0.1" - resolved "http://localhost:4873/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-2.0.1.tgz#bd6fcaa9c559a096b680806f4d657b3f0f240561" integrity sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw== p-limit@^2.0.0, p-limit@^2.2.0: version "2.2.2" - resolved "http://localhost:4873/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== dependencies: p-try "^2.0.0" p-locate@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-locate@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== dependencies: p-limit "^2.2.0" p-map@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== dependencies: aggregate-error "^3.0.0" p-try@^2.0.0: version "2.2.0" - resolved "http://localhost:4873/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== package-json@^6.3.0: version "6.5.0" - resolved "http://localhost:4873/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== dependencies: got "^9.6.0" @@ -4326,7 +4326,7 @@ package-json@^6.3.0: pacote@11.1.4: version "11.1.4" - resolved "http://localhost:4873/pacote/-/pacote-11.1.4.tgz#5529a453c59881b7f059da8af6903b0f79c124b2" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-11.1.4.tgz#5529a453c59881b7f059da8af6903b0f79c124b2" integrity sha512-eUGJvSSpWFZKn3z8gig/HgnBmUl6gIWByIIaHzSyEr3tOWX0w8tFEADXtpu8HGv5E0ShCeTP6enRq8iHKCHSvw== dependencies: "@npmcli/git" "^2.0.1" @@ -4355,12 +4355,12 @@ pacote@11.1.4: pako@~1.0.2: version "1.0.11" - resolved "http://localhost:4873/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== parse-json@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.0.0.tgz#73e5114c986d143efa3712d4ea24db9a4266f60f" integrity sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw== dependencies: "@babel/code-frame" "^7.0.0" @@ -4370,110 +4370,110 @@ parse-json@^5.0.0: parse5@5.1.0: version "5.1.0" - resolved "http://localhost:4873/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== pascalcase@^0.1.1: version "0.1.1" - resolved "http://localhost:4873/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-exists@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-exists@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== path-is-absolute@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.1: version "1.0.2" - resolved "http://localhost:4873/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-key@^3.0.0, path-key@^3.1.0: version "3.1.1" - resolved "http://localhost:4873/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: version "1.0.6" - resolved "http://localhost:4873/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== performance-now@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.0.7: version "2.2.2" - resolved "http://localhost:4873/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== pify@^2.0.0: version "2.3.0" - resolved "http://localhost:4873/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pinkie-promise@^2.0.0: version "2.0.1" - resolved "http://localhost:4873/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" - resolved "http://localhost:4873/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pirates@^4.0.1: version "4.0.1" - resolved "http://localhost:4873/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== dependencies: node-modules-regexp "^1.0.0" pkg-dir@^4.2.0: version "4.2.0" - resolved "http://localhost:4873/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== dependencies: find-up "^4.0.0" pkg-up@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" + resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== dependencies: find-up "^3.0.0" pn@^1.1.0: version "1.1.0" - resolved "http://localhost:4873/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== posix-character-classes@^0.1.0: version "0.1.1" - resolved "http://localhost:4873/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-url@^8.0.0: version "8.0.0" - resolved "http://localhost:4873/postcss-url/-/postcss-url-8.0.0.tgz#7b10059bd12929cdbb1971c60f61a0e5af86b4ca" + resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-8.0.0.tgz#7b10059bd12929cdbb1971c60f61a0e5af86b4ca" integrity sha512-E2cbOQ5aii2zNHh8F6fk1cxls7QVFZjLPSrqvmiza8OuXLzIpErij8BDS5Y3STPfJgpIMNCPEr8JlKQWEoozUw== dependencies: mime "^2.3.1" @@ -4484,12 +4484,12 @@ postcss-url@^8.0.0: postcss-value-parser@^4.0.3: version "4.0.3" - resolved "http://localhost:4873/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d" integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg== postcss@^7.0.18, postcss@^7.0.2, postcss@^7.0.27: version "7.0.27" - resolved "http://localhost:4873/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== dependencies: chalk "^2.4.2" @@ -4498,17 +4498,17 @@ postcss@^7.0.18, postcss@^7.0.2, postcss@^7.0.27: prelude-ls@~1.1.2: version "1.1.2" - resolved "http://localhost:4873/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= prepend-http@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= pretty-format@^25.0.0, pretty-format@^25.1.0, pretty-format@^25.2.3: version "25.2.3" - resolved "http://localhost:4873/pretty-format/-/pretty-format-25.2.3.tgz#ba6e9603a0d80fa2e470b1fed55de1f9bfd81421" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-25.2.3.tgz#ba6e9603a0d80fa2e470b1fed55de1f9bfd81421" integrity sha512-IP4+5UOAVGoyqC/DiomOeHBUKN6q00gfyT2qpAsRH64tgOKB2yF7FHJXC18OCiU0/YFierACup/zdCOWw0F/0w== dependencies: "@jest/types" "^25.2.3" @@ -4518,17 +4518,17 @@ pretty-format@^25.0.0, pretty-format@^25.1.0, pretty-format@^25.2.3: process-nextick-args@~2.0.0: version "2.0.1" - resolved "http://localhost:4873/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== promise-inflight@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise-retry@^1.1.1: version "1.1.1" - resolved "http://localhost:4873/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" + resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d" integrity sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0= dependencies: err-code "^1.0.0" @@ -4536,14 +4536,14 @@ promise-retry@^1.1.1: promise@^7.1.1: version "7.3.1" - resolved "http://localhost:4873/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== dependencies: asap "~2.0.3" prompts@^2.0.1: version "2.3.2" - resolved "http://localhost:4873/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.2.tgz#480572d89ecf39566d2bd3fe2c9fccb7c4c0b068" integrity sha512-Q06uKs2CkNYVID0VqwfAl9mipo99zkBv/n2JtWY89Yxa3ZabWSrs0e2KTudKVa3peLUvYXMefDqIleLPVUBZMA== dependencies: kleur "^3.0.3" @@ -4551,7 +4551,7 @@ prompts@^2.0.1: protractor@~5.4.3: version "5.4.3" - resolved "http://localhost:4873/protractor/-/protractor-5.4.3.tgz#35f050741e404a45868618ea648745d89af31683" + resolved "https://registry.yarnpkg.com/protractor/-/protractor-5.4.3.tgz#35f050741e404a45868618ea648745d89af31683" integrity sha512-7pMAolv8Ah1yJIqaorDTzACtn3gk7BamVKPTeO5lqIGOrfosjPgXFx/z1dqSI+m5EeZc2GMJHPr5DYlodujDNA== dependencies: "@types/q" "^0.0.32" @@ -4572,17 +4572,17 @@ protractor@~5.4.3: prr@~1.0.1: version "1.0.1" - resolved "http://localhost:4873/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= psl@^1.1.28: version "1.8.0" - resolved "http://localhost:4873/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== pump@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== dependencies: end-of-stream "^1.1.0" @@ -4590,34 +4590,34 @@ pump@^3.0.0: punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" - resolved "http://localhost:4873/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== pupa@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" + resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.0.1.tgz#dbdc9ff48ffbea4a26a069b6f9f7abb051008726" integrity sha512-hEJH0s8PXLY/cdXh66tNEQGndDrIKNqNC5xmrysZy3i5C3oEoLna7YAOad+7u125+zH1HNXUmGEkrhb3c2VriA== dependencies: escape-goat "^2.0.0" q@1.4.1: version "1.4.1" - resolved "http://localhost:4873/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" + resolved "https://registry.yarnpkg.com/q/-/q-1.4.1.tgz#55705bcd93c5f3673530c2c2cbc0c2b3addc286e" integrity sha1-VXBbzZPF82c1MMLCy8DCs63cKG4= q@^1.4.1: version "1.5.1" - resolved "http://localhost:4873/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= qs@~6.5.2: version "6.5.2" - resolved "http://localhost:4873/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== rc@^1.2.8: version "1.2.8" - resolved "http://localhost:4873/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" @@ -4627,12 +4627,12 @@ rc@^1.2.8: react-is@^16.12.0: version "16.13.1" - resolved "http://localhost:4873/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== read-package-json-fast@^1.1.1, read-package-json-fast@^1.1.3: version "1.1.3" - resolved "http://localhost:4873/read-package-json-fast/-/read-package-json-fast-1.1.3.tgz#3b78464ea8f3c4447f3358635390b6946dc0737e" + resolved "https://registry.yarnpkg.com/read-package-json-fast/-/read-package-json-fast-1.1.3.tgz#3b78464ea8f3c4447f3358635390b6946dc0737e" integrity sha512-MmFqiyfCXV2Dmm4jH24DEGhxdkUDFivJQj4oPZQPOKywxR7HWBE6WnMWDAapfFHi3wm1b+mhR+XHlUH0CL8axg== dependencies: json-parse-even-better-errors "^2.0.1" @@ -4640,7 +4640,7 @@ read-package-json-fast@^1.1.1, read-package-json-fast@^1.1.3: read-package-json@^2.0.0: version "2.1.1" - resolved "http://localhost:4873/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== dependencies: glob "^7.1.1" @@ -4652,7 +4652,7 @@ read-package-json@^2.0.0: read-package-tree@5.3.1: version "5.3.1" - resolved "http://localhost:4873/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" + resolved "https://registry.yarnpkg.com/read-package-tree/-/read-package-tree-5.3.1.tgz#a32cb64c7f31eb8a6f31ef06f9cedf74068fe636" integrity sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw== dependencies: read-package-json "^2.0.0" @@ -4661,7 +4661,7 @@ read-package-tree@5.3.1: read-pkg-up@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/read-pkg-up/-/read-pkg-up-5.0.0.tgz#b6a6741cb144ed3610554f40162aa07a6db621b8" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-5.0.0.tgz#b6a6741cb144ed3610554f40162aa07a6db621b8" integrity sha512-XBQjqOBtTzyol2CpsQOw8LHV0XbDZVG7xMMjmXAJomlVY03WOBRmYgDJETlvcg0H63AJvPRwT7GFi5rvOzUOKg== dependencies: find-up "^3.0.0" @@ -4669,7 +4669,7 @@ read-pkg-up@^5.0.0: read-pkg@^5.0.0: version "5.2.0" - resolved "http://localhost:4873/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== dependencies: "@types/normalize-package-data" "^2.4.0" @@ -4679,7 +4679,7 @@ read-pkg@^5.0.0: "readable-stream@1 || 2", readable-stream@~2.3.6: version "2.3.7" - resolved "http://localhost:4873/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== dependencies: core-util-is "~1.0.0" @@ -4692,7 +4692,7 @@ read-pkg@^5.0.0: readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: version "1.1.0" - resolved "http://localhost:4873/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" + resolved "https://registry.yarnpkg.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz#8d45407b4f870a0dcaebc0e28670d18e74514309" integrity sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw== dependencies: debuglog "^1.0.1" @@ -4702,36 +4702,36 @@ readdir-scoped-modules@^1.0.0, readdir-scoped-modules@^1.1.0: readdirp@~3.3.0: version "3.3.0" - resolved "http://localhost:4873/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== dependencies: picomatch "^2.0.7" realpath-native@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-2.0.0.tgz#7377ac429b6e1fd599dc38d08ed942d0d7beb866" integrity sha512-v1SEYUOXXdbBZK8ZuNgO4TBjamPsiSgcFr0aP+tEKpQZK8vooEUqV6nm6Cv502mX4NF2EfsnVqtNAHG+/6Ur1Q== reflect-metadata@^0.1.2: version "0.1.13" - resolved "http://localhost:4873/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" + resolved "https://registry.yarnpkg.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz#67ae3ca57c972a2aa1642b10fe363fe32d49dc08" integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg== regenerate-unicode-properties@^8.2.0: version "8.2.0" - resolved "http://localhost:4873/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== dependencies: regenerate "^1.4.0" regenerate@^1.4.0: version "1.4.0" - resolved "http://localhost:4873/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" @@ -4739,7 +4739,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: regexpu-core@^4.6.0: version "4.7.0" - resolved "http://localhost:4873/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== dependencies: regenerate "^1.4.0" @@ -4751,55 +4751,55 @@ regexpu-core@^4.6.0: registry-auth-token@^4.0.0: version "4.1.1" - resolved "http://localhost:4873/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.1.1.tgz#40a33be1e82539460f94328b0f7f0f84c16d9479" integrity sha512-9bKS7nTl9+/A1s7tnPeGrUpRcVY+LUh7bfFgzpndALdPfXQBfQV77rQVtqgUV3ti4vc/Ik81Ex8UJDWDQ12zQA== dependencies: rc "^1.2.8" registry-url@^5.0.0: version "5.1.0" - resolved "http://localhost:4873/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== dependencies: rc "^1.2.8" regjsgen@^0.5.1: version "0.5.1" - resolved "http://localhost:4873/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== regjsparser@^0.6.4: version "0.6.4" - resolved "http://localhost:4873/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: jsesc "~0.5.0" remove-trailing-separator@^1.0.1: version "1.1.0" - resolved "http://localhost:4873/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= repeat-element@^1.1.2: version "1.1.3" - resolved "http://localhost:4873/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== repeat-string@^1.6.1: version "1.6.1" - resolved "http://localhost:4873/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= request-promise-core@1.1.3: version "1.1.3" - resolved "http://localhost:4873/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== dependencies: lodash "^4.17.15" request-promise-native@^1.0.7: version "1.0.8" - resolved "http://localhost:4873/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== dependencies: request-promise-core "1.1.3" @@ -4808,7 +4808,7 @@ request-promise-native@^1.0.7: request@^2.83.0, request@^2.87.0, request@^2.88.0: version "2.88.2" - resolved "http://localhost:4873/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== dependencies: aws-sign2 "~0.7.0" @@ -4834,53 +4834,53 @@ request@^2.83.0, request@^2.87.0, request@^2.88.0: require-directory@^2.1.1: version "2.1.1" - resolved "http://localhost:4873/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-main-filename@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== resolve-cwd@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== dependencies: resolve-from "^5.0.0" resolve-from@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve-url@^0.2.1: version "0.2.1" - resolved "http://localhost:4873/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@1.1.7: version "1.1.7" - resolved "http://localhost:4873/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= resolve@1.x, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.14.2, resolve@^1.15.1, resolve@^1.3.2: version "1.15.1" - resolved "http://localhost:4873/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== dependencies: path-parse "^1.0.6" responselike@^1.0.2: version "1.0.2" - resolved "http://localhost:4873/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= dependencies: lowercase-keys "^1.0.0" restore-cursor@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== dependencies: onetime "^5.1.0" @@ -4888,31 +4888,31 @@ restore-cursor@^3.1.0: ret@~0.1.10: version "0.1.15" - resolved "http://localhost:4873/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== retry@^0.10.0: version "0.10.1" - resolved "http://localhost:4873/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" + resolved "https://registry.yarnpkg.com/retry/-/retry-0.10.1.tgz#e76388d217992c252750241d3d3956fed98d8ff4" integrity sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q= rimraf@3.0.2, rimraf@^3.0.0: version "3.0.2" - resolved "http://localhost:4873/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== dependencies: glob "^7.1.3" rimraf@^2.2.8, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.7.1: version "2.7.1" - resolved "http://localhost:4873/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" rollup-plugin-sourcemaps@^0.5.0: version "0.5.0" - resolved "http://localhost:4873/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.5.0.tgz#898e8411c9b5b7b524b4d96c3b41d5c43f9da77e" + resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.5.0.tgz#898e8411c9b5b7b524b4d96c3b41d5c43f9da77e" integrity sha512-xp2vvRvgnYiXydgf/JFFFgYxrqMaQaOrK/g6yZvgwT9R1TSYjD3HKku1pD7iQNjQHkl5yGpokvJLp7cP/lR+aQ== dependencies: "@rollup/pluginutils" "^3.0.1" @@ -4920,69 +4920,69 @@ rollup-plugin-sourcemaps@^0.5.0: rollup@2.2.0: version "2.2.0" - resolved "http://localhost:4873/rollup/-/rollup-2.2.0.tgz#d82cfd6eda6d9561593a7e8a2fc0b72811a89b49" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.2.0.tgz#d82cfd6eda6d9561593a7e8a2fc0b72811a89b49" integrity sha512-iAu/j9/WJ0i+zT0sAMuQnsEbmOKzdQ4Yxu5rbPs9aUCyqveI1Kw3H4Fi9NWfCOpb8luEySD2lDyFWL9CrLE8iw== optionalDependencies: fsevents "~2.1.2" rsvp@^4.8.4: version "4.8.5" - resolved "http://localhost:4873/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" integrity sha512-nfMOlASu9OnRJo1mbEk2cz0D56a1MBNrJ7orjRZQG10XDyuvwksKbuXNp6qa+kbn839HwjwhBzhFmdsaEAfauA== run-async@^2.4.0: version "2.4.0" - resolved "http://localhost:4873/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== dependencies: is-promise "^2.1.0" run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" - resolved "http://localhost:4873/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: aproba "^1.1.1" rxjs@6.5.3: version "6.5.3" - resolved "http://localhost:4873/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.3.tgz#510e26317f4db91a7eb1de77d9dd9ba0a4899a3a" integrity sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA== dependencies: tslib "^1.9.0" rxjs@6.5.4, rxjs@^6.5.0, rxjs@^6.5.3: version "6.5.4" - resolved "http://localhost:4873/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== dependencies: tslib "^1.9.0" safe-buffer@^5.0.1, safe-buffer@^5.1.2: version "5.2.0" - resolved "http://localhost:4873/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" - resolved "http://localhost:4873/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-regex@^1.1.0: version "1.1.0" - resolved "http://localhost:4873/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@^2.1.2, safer-buffer@~2.1.0: version "2.1.2" - resolved "http://localhost:4873/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== sane@^4.0.3: version "4.1.0" - resolved "http://localhost:4873/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" + resolved "https://registry.yarnpkg.com/sane/-/sane-4.1.0.tgz#ed881fd922733a6c461bc189dc2b6c006f3ffded" integrity sha512-hhbzAgTIX8O7SHfp2c8/kREfEn4qO/9q8C9beyY6+tvZ87EpoZ3i1RIEvp27YBswnNbY9mWd6paKVmKbAgLfZA== dependencies: "@cnakazawa/watch" "^1.0.3" @@ -4997,33 +4997,33 @@ sane@^4.0.3: sass@^1.23.0: version "1.26.3" - resolved "http://localhost:4873/sass/-/sass-1.26.3.tgz#412df54486143b76b5a65cdf7569e86f44659f46" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.26.3.tgz#412df54486143b76b5a65cdf7569e86f44659f46" integrity sha512-5NMHI1+YFYw4sN3yfKjpLuV9B5l7MqQ6FlkTcC4FT+oHbBRUZoSjHrrt/mE0nFXJyY2kQtU9ou9HxvFVjLFuuw== dependencies: chokidar ">=2.0.0 <4.0.0" saucelabs@^1.5.0: version "1.5.0" - resolved "http://localhost:4873/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" + resolved "https://registry.yarnpkg.com/saucelabs/-/saucelabs-1.5.0.tgz#9405a73c360d449b232839919a86c396d379fd9d" integrity sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ== dependencies: https-proxy-agent "^2.2.1" sax@>=0.6.0, sax@~1.2.4: version "1.2.4" - resolved "http://localhost:4873/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== saxes@^3.1.9: version "3.1.11" - resolved "http://localhost:4873/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== dependencies: xmlchars "^2.1.1" selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: version "3.6.0" - resolved "http://localhost:4873/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" + resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-3.6.0.tgz#2ba87a1662c020b8988c981ae62cb2a01298eafc" integrity sha512-WH7Aldse+2P5bbFBO4Gle/nuQOdVwpHMTL6raL3uuBj/vPG07k6uzt3aiahu352ONBr5xXh0hDlM3LhtXPOC4Q== dependencies: jszip "^3.1.3" @@ -5033,53 +5033,53 @@ selenium-webdriver@3.6.0, selenium-webdriver@^3.0.1: semver-diff@^3.1.1: version "3.1.1" - resolved "http://localhost:4873/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== dependencies: semver "^6.3.0" semver-dsl@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/semver-dsl/-/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" + resolved "https://registry.yarnpkg.com/semver-dsl/-/semver-dsl-1.0.1.tgz#d3678de5555e8a61f629eed025366ae5f27340a0" integrity sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA= dependencies: semver "^5.3.0" semver-intersect@1.4.0: version "1.4.0" - resolved "http://localhost:4873/semver-intersect/-/semver-intersect-1.4.0.tgz#bdd9c06bedcdd2fedb8cd352c3c43ee8c61321f3" + resolved "https://registry.yarnpkg.com/semver-intersect/-/semver-intersect-1.4.0.tgz#bdd9c06bedcdd2fedb8cd352c3c43ee8c61321f3" integrity sha512-d8fvGg5ycKAq0+I6nfWeCx6ffaWJCsBYU0H2Rq56+/zFePYfT8mXkB3tWBSjR5BerkHNZ5eTPIk1/LBYas35xQ== dependencies: semver "^5.0.0" "semver@2 || 3 || 4 || 5", semver@^5.0.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: version "5.7.1" - resolved "http://localhost:4873/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@6.x, semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: version "6.3.0" - resolved "http://localhost:4873/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== semver@7.1.3, semver@^7.0.0, semver@^7.1.1, semver@^7.1.3: version "7.1.3" - resolved "http://localhost:4873/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== set-blocking@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-immediate-shim@~1.0.1: version "1.0.1" - resolved "http://localhost:4873/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= set-value@^2.0.0, set-value@^2.0.1: version "2.0.1" - resolved "http://localhost:4873/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== dependencies: extend-shallow "^2.0.1" @@ -5089,56 +5089,56 @@ set-value@^2.0.0, set-value@^2.0.1: shebang-command@^1.2.0: version "1.2.0" - resolved "http://localhost:4873/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-command@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== dependencies: shebang-regex "^3.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shebang-regex@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shellwords@^0.1.1: version "0.1.1" - resolved "http://localhost:4873/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.3" - resolved "http://localhost:4873/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== sisteransi@^1.0.4: version "1.0.5" - resolved "http://localhost:4873/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== slash@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== smart-buffer@^4.1.0: version "4.1.0" - resolved "http://localhost:4873/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== snapdragon-node@^2.0.1: version "2.1.1" - resolved "http://localhost:4873/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" @@ -5147,14 +5147,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" - resolved "http://localhost:4873/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.2" - resolved "http://localhost:4873/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== dependencies: base "^0.11.1" @@ -5168,7 +5168,7 @@ snapdragon@^0.8.1: socks-proxy-agent@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" + resolved "https://registry.yarnpkg.com/socks-proxy-agent/-/socks-proxy-agent-5.0.0.tgz#7c0f364e7b1cf4a7a437e71253bed72e9004be60" integrity sha512-lEpa1zsWCChxiynk+lCycKuC502RxDWLKJZoIhnxrWNjLSDGYRFflHA1/228VkRcnv9TIb8w98derGbpKxJRgA== dependencies: agent-base "6" @@ -5177,7 +5177,7 @@ socks-proxy-agent@^5.0.0: socks@^2.3.3: version "2.3.3" - resolved "http://localhost:4873/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== dependencies: ip "1.1.5" @@ -5185,7 +5185,7 @@ socks@^2.3.3: source-map-resolve@^0.5.0, source-map-resolve@^0.5.2, source-map-resolve@^0.5.3: version "0.5.3" - resolved "http://localhost:4873/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== dependencies: atob "^2.1.2" @@ -5196,7 +5196,7 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2, source-map-resolve@^0.5.3: source-map-support@^0.5.6, source-map-support@~0.5.12: version "0.5.16" - resolved "http://localhost:4873/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== dependencies: buffer-from "^1.0.0" @@ -5204,39 +5204,39 @@ source-map-support@^0.5.6, source-map-support@~0.5.12: source-map-support@~0.4.0: version "0.4.18" - resolved "http://localhost:4873/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== dependencies: source-map "^0.5.6" source-map-url@^0.4.0: version "0.4.0" - resolved "http://localhost:4873/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@0.7.3, source-map@^0.7.3: version "0.7.3" - resolved "http://localhost:4873/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" - resolved "http://localhost:4873/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" - resolved "http://localhost:4873/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== sourcemap-codec@^1.4.4, sourcemap-codec@^1.4.8: version "1.4.8" - resolved "http://localhost:4873/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== spdx-correct@^3.0.0: version "3.1.0" - resolved "http://localhost:4873/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== dependencies: spdx-expression-parse "^3.0.0" @@ -5244,12 +5244,12 @@ spdx-correct@^3.0.0: spdx-exceptions@^2.1.0: version "2.2.0" - resolved "http://localhost:4873/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== spdx-expression-parse@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== dependencies: spdx-exceptions "^2.1.0" @@ -5257,29 +5257,29 @@ spdx-expression-parse@^3.0.0: spdx-license-ids@^3.0.0: version "3.0.5" - resolved "http://localhost:4873/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" - resolved "http://localhost:4873/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" sprintf-js@^1.1.2: version "1.1.2" - resolved "http://localhost:4873/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== sprintf-js@~1.0.2: version "1.0.3" - resolved "http://localhost:4873/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: version "1.16.1" - resolved "http://localhost:4873/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== dependencies: asn1 "~0.2.3" @@ -5294,19 +5294,19 @@ sshpk@^1.7.0: ssri@^8.0.0: version "8.0.0" - resolved "http://localhost:4873/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" integrity sha512-aq/pz989nxVYwn16Tsbj1TqFpD5LLrQxHf5zaHuieFV+R0Bbr4y8qUsOA45hXT/N4/9UNXTarBjnjVmjSOVaAA== dependencies: minipass "^3.1.1" stack-utils@^1.0.1: version "1.0.2" - resolved "http://localhost:4873/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== static-extend@^0.1.1: version "0.1.2" - resolved "http://localhost:4873/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" @@ -5314,12 +5314,12 @@ static-extend@^0.1.1: stealthy-require@^1.1.1: version "1.1.1" - resolved "http://localhost:4873/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= string-length@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-3.1.0.tgz#107ef8c23456e187a8abd4a61162ff4ac6e25837" integrity sha512-Ttp5YvkGm5v9Ijagtaz1BnN+k9ObpvS0eIBblPMp2YWL8FBmi9qblQ9fexc2k/CXFgrTIteU3jAw3payCnwSTA== dependencies: astral-regex "^1.0.0" @@ -5327,7 +5327,7 @@ string-length@^3.1.0: string-width@^3.0.0: version "3.1.0" - resolved "http://localhost:4873/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== dependencies: emoji-regex "^7.0.1" @@ -5336,7 +5336,7 @@ string-width@^3.0.0: string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: version "4.2.0" - resolved "http://localhost:4873/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== dependencies: emoji-regex "^8.0.0" @@ -5345,7 +5345,7 @@ string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: string.prototype.trimend@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz#ee497fd29768646d84be2c9b819e292439614373" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.0.tgz#ee497fd29768646d84be2c9b819e292439614373" integrity sha512-EEJnGqa/xNfIg05SxiPSqRS7S9qwDhYts1TSLR1BQfYUfPe1stofgGKvwERK9+9yf+PpfBMlpBaCHucXGPQfUA== dependencies: define-properties "^1.1.3" @@ -5353,7 +5353,7 @@ string.prototype.trimend@^1.0.0: string.prototype.trimleft@^2.1.1: version "2.1.2" - resolved "http://localhost:4873/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== dependencies: define-properties "^1.1.3" @@ -5362,7 +5362,7 @@ string.prototype.trimleft@^2.1.1: string.prototype.trimright@^2.1.1: version "2.1.2" - resolved "http://localhost:4873/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== dependencies: define-properties "^1.1.3" @@ -5371,7 +5371,7 @@ string.prototype.trimright@^2.1.1: string.prototype.trimstart@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz#afe596a7ce9de905496919406c9734845f01a2f2" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.0.tgz#afe596a7ce9de905496919406c9734845f01a2f2" integrity sha512-iCP8g01NFYiiBOnwG1Xc3WZLyoo+RuBymwIlWncShXDDJYWN6DbnM3odslBJdgCdRlq94B5s63NWAZlcn2CS4w== dependencies: define-properties "^1.1.3" @@ -5379,55 +5379,55 @@ string.prototype.trimstart@^1.0.0: string_decoder@~1.1.1: version "1.1.1" - resolved "http://localhost:4873/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== dependencies: safe-buffer "~5.1.0" strip-ansi@^3.0.0: version "3.0.1" - resolved "http://localhost:4873/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" - resolved "http://localhost:4873/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== dependencies: ansi-regex "^4.1.0" strip-ansi@^6.0.0: version "6.0.0" - resolved "http://localhost:4873/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== dependencies: ansi-regex "^5.0.0" strip-bom@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== strip-eof@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-final-newline@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== strip-json-comments@~2.0.1: version "2.0.1" - resolved "http://localhost:4873/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= stylus@^0.54.7: version "0.54.7" - resolved "http://localhost:4873/stylus/-/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2" + resolved "https://registry.yarnpkg.com/stylus/-/stylus-0.54.7.tgz#c6ce4793965ee538bcebe50f31537bfc04d88cd2" integrity sha512-Yw3WMTzVwevT6ZTrLCYNHAFmanMxdylelL3hkWNgPMeTCpMwpV3nXjpOHuBXtFv7aiO2xRuQS6OoAdgkNcSNug== dependencies: css-parse "~2.0.0" @@ -5441,33 +5441,33 @@ stylus@^0.54.7: supports-color@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^5.3.0: version "5.5.0" - resolved "http://localhost:4873/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== dependencies: has-flag "^3.0.0" supports-color@^6.1.0: version "6.1.0" - resolved "http://localhost:4873/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== dependencies: has-flag "^3.0.0" supports-color@^7.0.0, supports-color@^7.1.0: version "7.1.0" - resolved "http://localhost:4873/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== dependencies: has-flag "^4.0.0" supports-hyperlinks@^2.0.0: version "2.1.0" - resolved "http://localhost:4873/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" + resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-2.1.0.tgz#f663df252af5f37c5d49bbd7eeefa9e0b9e59e47" integrity sha512-zoE5/e+dnEijk6ASB6/qrK+oYdm2do1hjoLWrqUC/8WEIW1gbxFcKuBof7sW8ArN6e+AYvsE8HBGiVRWL/F5CA== dependencies: has-flag "^4.0.0" @@ -5475,17 +5475,17 @@ supports-hyperlinks@^2.0.0: symbol-observable@1.2.0: version "1.2.0" - resolved "http://localhost:4873/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== symbol-tree@^3.2.2: version "3.2.4" - resolved "http://localhost:4873/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== tar@^6.0.1: version "6.0.1" - resolved "http://localhost:4873/tar/-/tar-6.0.1.tgz#7b3bd6c313cb6e0153770108f8d70ac298607efa" + resolved "https://registry.yarnpkg.com/tar/-/tar-6.0.1.tgz#7b3bd6c313cb6e0153770108f8d70ac298607efa" integrity sha512-bKhKrrz2FJJj5s7wynxy/fyxpE0CmCjmOQ1KV4KkgXFWOgoIT/NbTMnB1n+LFNrNk0SSBVGGxcK5AGsyC+pW5Q== dependencies: chownr "^1.1.3" @@ -5497,12 +5497,12 @@ tar@^6.0.1: term-size@^2.1.0: version "2.2.0" - resolved "http://localhost:4873/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.0.tgz#1f16adedfe9bdc18800e1776821734086fcc6753" integrity sha512-a6sumDlzyHVJWb8+YofY4TW112G6p2FCPEAFk+59gIYHv3XHRhm9ltVQ9kli4hNWeQBwSpe8cRN25x0ROunMOw== terminal-link@^2.0.0: version "2.1.1" - resolved "http://localhost:4873/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" + resolved "https://registry.yarnpkg.com/terminal-link/-/terminal-link-2.1.1.tgz#14a64a27ab3c0df933ea546fba55f2d078edc994" integrity sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ== dependencies: ansi-escapes "^4.2.1" @@ -5510,7 +5510,7 @@ terminal-link@^2.0.0: terser@^4.3.8: version "4.6.7" - resolved "http://localhost:4873/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== dependencies: commander "^2.20.0" @@ -5519,7 +5519,7 @@ terser@^4.3.8: test-exclude@^6.0.0: version "6.0.0" - resolved "http://localhost:4873/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== dependencies: "@istanbuljs/schema" "^0.1.2" @@ -5528,53 +5528,53 @@ test-exclude@^6.0.0: throat@^5.0.0: version "5.0.0" - resolved "http://localhost:4873/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" + resolved "https://registry.yarnpkg.com/throat/-/throat-5.0.0.tgz#c5199235803aad18754a667d659b5e72ce16764b" integrity sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA== through@X.X.X, through@^2.3.6: version "2.3.8" - resolved "http://localhost:4873/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= tmp@0.0.30: version "0.0.30" - resolved "http://localhost:4873/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= dependencies: os-tmpdir "~1.0.1" tmp@^0.0.33: version "0.0.33" - resolved "http://localhost:4873/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" tmpl@1.0.x: version "1.0.4" - resolved "http://localhost:4873/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1" integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE= to-fast-properties@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= to-object-path@^0.3.0: version "0.3.0" - resolved "http://localhost:4873/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-readable-stream@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== to-regex-range@^2.1.0: version "2.1.1" - resolved "http://localhost:4873/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" @@ -5582,14 +5582,14 @@ to-regex-range@^2.1.0: to-regex-range@^5.0.1: version "5.0.1" - resolved "http://localhost:4873/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" - resolved "http://localhost:4873/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" @@ -5599,7 +5599,7 @@ to-regex@^3.0.1, to-regex@^3.0.2: tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" - resolved "http://localhost:4873/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== dependencies: psl "^1.1.28" @@ -5607,7 +5607,7 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: tough-cookie@^3.0.1: version "3.0.1" - resolved "http://localhost:4873/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-3.0.1.tgz#9df4f57e739c26930a018184887f4adb7dca73b2" integrity sha512-yQyJ0u4pZsv9D4clxO69OEjLWYw+jbgspjTue4lTQZLfV0c5l1VmK2y1JK8E9ahdpltPOaAThPcp5nKPUgSnsg== dependencies: ip-regex "^2.1.0" @@ -5616,14 +5616,14 @@ tough-cookie@^3.0.1: tr46@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= dependencies: punycode "^2.1.0" ts-jest@^25.0.0: version "25.3.0" - resolved "http://localhost:4873/ts-jest/-/ts-jest-25.3.0.tgz#c12d34573cbe34d49f10567940e44fd19d1c9178" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-25.3.0.tgz#c12d34573cbe34d49f10567940e44fd19d1c9178" integrity sha512-qH/uhaC+AFDU9JfAueSr0epIFJkGMvUPog4FxSEVAtPOur1Oni5WBJMiQIkfHvc7PviVRsnlVLLY2I6221CQew== dependencies: bs-logger "0.x" @@ -5639,7 +5639,7 @@ ts-jest@^25.0.0: ts-node@~8.3.0: version "8.3.0" - resolved "http://localhost:4873/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.3.0.tgz#e4059618411371924a1fb5f3b125915f324efb57" integrity sha512-dyNS/RqyVTDcmNM4NIBAeDMpsAdaQ+ojdf0GOLqE6nwJOgzEkdRNzJywhDfwnuvB10oa6NLVG1rUJQCpRN7qoQ== dependencies: arg "^4.1.0" @@ -5650,12 +5650,12 @@ ts-node@~8.3.0: tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0: version "1.11.1" - resolved "http://localhost:4873/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== tslint@~6.1.0: version "6.1.0" - resolved "http://localhost:4873/tslint/-/tslint-6.1.0.tgz#c6c611b8ba0eed1549bf5a59ba05a7732133d851" + resolved "https://registry.yarnpkg.com/tslint/-/tslint-6.1.0.tgz#c6c611b8ba0eed1549bf5a59ba05a7732133d851" integrity sha512-fXjYd/61vU6da04E505OZQGb2VCN2Mq3doeWcOIryuG+eqdmFUXTYVwdhnbEu2k46LNLgUYt9bI5icQze/j0bQ== dependencies: "@babel/code-frame" "^7.0.0" @@ -5674,70 +5674,70 @@ tslint@~6.1.0: tsutils@^2.29.0: version "2.29.0" - resolved "http://localhost:4873/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" + resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-2.29.0.tgz#32b488501467acbedd4b85498673a0812aca0b99" integrity sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA== dependencies: tslib "^1.8.1" tunnel-agent@^0.6.0: version "0.6.0" - resolved "http://localhost:4873/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "http://localhost:4873/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@~0.3.2: version "0.3.2" - resolved "http://localhost:4873/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" type-detect@4.0.8: version "4.0.8" - resolved "http://localhost:4873/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== type-fest@^0.11.0: version "0.11.0" - resolved "http://localhost:4873/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1" integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ== type-fest@^0.6.0: version "0.6.0" - resolved "http://localhost:4873/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== type-fest@^0.8.1: version "0.8.1" - resolved "http://localhost:4873/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== typedarray-to-buffer@^3.1.5: version "3.1.5" - resolved "http://localhost:4873/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" + resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== dependencies: is-typedarray "^1.0.0" typescript@~3.6.0: version "3.6.5" - resolved "http://localhost:4873/typescript/-/typescript-3.6.5.tgz#dae20114a7b4ff4bd642db9c8c699f2953e8bbdb" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.6.5.tgz#dae20114a7b4ff4bd642db9c8c699f2953e8bbdb" integrity sha512-BEjlc0Z06ORZKbtcxGrIvvwYs5hAnuo6TKdNFL55frVDlB+na3z5bsLhFaIxmT+dPWgBIjMo6aNnTOgHHmHgiQ== unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" - resolved "http://localhost:4873/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== unicode-match-property-ecmascript@^1.0.4: version "1.0.4" - resolved "http://localhost:4873/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== dependencies: unicode-canonical-property-names-ecmascript "^1.0.4" @@ -5745,17 +5745,17 @@ unicode-match-property-ecmascript@^1.0.4: unicode-match-property-value-ecmascript@^1.2.0: version "1.2.0" - resolved "http://localhost:4873/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== unicode-property-aliases-ecmascript@^1.0.4: version "1.1.0" - resolved "http://localhost:4873/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== union-value@^1.0.0: version "1.0.1" - resolved "http://localhost:4873/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== dependencies: arr-union "^3.1.0" @@ -5765,28 +5765,28 @@ union-value@^1.0.0: unique-filename@^1.1.1: version "1.1.1" - resolved "http://localhost:4873/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.1.tgz#1d69769369ada0583103a1e6ae87681b56573230" integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ== dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.2" - resolved "http://localhost:4873/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.2.tgz#baabce91083fc64e945b0f3ad613e264f7cd4e6c" integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w== dependencies: imurmurhash "^0.1.4" unique-string@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== dependencies: crypto-random-string "^2.0.0" universal-analytics@0.4.20: version "0.4.20" - resolved "http://localhost:4873/universal-analytics/-/universal-analytics-0.4.20.tgz#d6b64e5312bf74f7c368e3024a922135dbf24b03" + resolved "https://registry.yarnpkg.com/universal-analytics/-/universal-analytics-0.4.20.tgz#d6b64e5312bf74f7c368e3024a922135dbf24b03" integrity sha512-gE91dtMvNkjO+kWsPstHRtSwHXz0l2axqptGYp5ceg4MsuurloM0PU3pdOfpb5zBXUvyjT4PwhWK2m39uczZuw== dependencies: debug "^3.0.0" @@ -5795,17 +5795,17 @@ universal-analytics@0.4.20: universalify@^0.1.0: version "0.1.2" - resolved "http://localhost:4873/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== universalify@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== unset-value@^1.0.0: version "1.0.0" - resolved "http://localhost:4873/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" @@ -5813,7 +5813,7 @@ unset-value@^1.0.0: update-notifier@^4.0.0: version "4.1.0" - resolved "http://localhost:4873/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.0.tgz#4866b98c3bc5b5473c020b1250583628f9a328f3" integrity sha512-w3doE1qtI0/ZmgeoDoARmI5fjDoT93IfKgEGqm26dGUOh8oNpaSTsGNdYRN/SjOuo10jcJGwkEL3mroKzktkew== dependencies: boxen "^4.2.0" @@ -5832,53 +5832,53 @@ update-notifier@^4.0.0: uri-js@^4.2.2: version "4.2.2" - resolved "http://localhost:4873/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== dependencies: punycode "^2.1.0" urix@^0.1.0: version "0.1.0" - resolved "http://localhost:4873/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse-lax@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= dependencies: prepend-http "^2.0.0" use@^3.1.0: version "3.1.1" - resolved "http://localhost:4873/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + 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: version "1.0.2" - resolved "http://localhost:4873/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util-promisify@^2.1.0: version "2.1.0" - resolved "http://localhost:4873/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" + resolved "https://registry.yarnpkg.com/util-promisify/-/util-promisify-2.1.0.tgz#3c2236476c4d32c5ff3c47002add7c13b9a82a53" integrity sha1-PCI2R2xNMsX/PEcAKt18E7moKlM= dependencies: object.getownpropertydescriptors "^2.0.3" uuid@7.0.2: version "7.0.2" - resolved "http://localhost:4873/uuid/-/uuid-7.0.2.tgz#7ff5c203467e91f5e0d85cfcbaaf7d2ebbca9be6" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-7.0.2.tgz#7ff5c203467e91f5e0d85cfcbaaf7d2ebbca9be6" integrity sha512-vy9V/+pKG+5ZTYKf+VcphF5Oc6EFiu3W8Nv3P3zIh0EqVI80ZxOzuPfe9EHjkFNvf8+xuTHVeei4Drydlx4zjw== uuid@^3.0.0, uuid@^3.3.2: version "3.4.0" - resolved "http://localhost:4873/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== v8-to-istanbul@^4.0.1: version "4.1.3" - resolved "http://localhost:4873/v8-to-istanbul/-/v8-to-istanbul-4.1.3.tgz#22fe35709a64955f49a08a7c7c959f6520ad6f20" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.3.tgz#22fe35709a64955f49a08a7c7c959f6520ad6f20" integrity sha512-sAjOC+Kki6aJVbUOXJbcR0MnbfjvBzwKZazEJymA2IX49uoOdEdk+4fBq5cXgYgiyKtAyrrJNtBZdOeDIF+Fng== dependencies: "@types/istanbul-lib-coverage" "^2.0.1" @@ -5887,7 +5887,7 @@ v8-to-istanbul@^4.0.1: validate-npm-package-license@^3.0.1: version "3.0.4" - resolved "http://localhost:4873/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== dependencies: spdx-correct "^3.0.0" @@ -5895,14 +5895,14 @@ validate-npm-package-license@^3.0.1: validate-npm-package-name@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz#5fa912d81eb7d0c74afc140de7317f0ca7df437e" integrity sha1-X6kS2B630MdK/BQN5zF/DKffQ34= dependencies: builtins "^1.0.3" verror@1.10.0: version "1.10.0" - resolved "http://localhost:4873/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" @@ -5911,14 +5911,14 @@ verror@1.10.0: w3c-hr-time@^1.0.1: version "1.0.2" - resolved "http://localhost:4873/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== dependencies: browser-process-hrtime "^1.0.0" w3c-xmlserializer@^1.1.2: version "1.1.2" - resolved "http://localhost:4873/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== dependencies: domexception "^1.0.1" @@ -5927,21 +5927,21 @@ w3c-xmlserializer@^1.1.2: walker@^1.0.7, walker@~1.0.5: version "1.0.7" - resolved "http://localhost:4873/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" integrity sha1-L3+bj9ENZ3JisYqITijRlhjgKPs= dependencies: makeerror "1.0.x" wcwidth@^1.0.1: version "1.0.1" - resolved "http://localhost:4873/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" integrity sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g= dependencies: defaults "^1.0.3" webdriver-js-extender@2.1.0: version "2.1.0" - resolved "http://localhost:4873/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" + resolved "https://registry.yarnpkg.com/webdriver-js-extender/-/webdriver-js-extender-2.1.0.tgz#57d7a93c00db4cc8d556e4d3db4b5db0a80c3bb7" integrity sha512-lcUKrjbBfCK6MNsh7xaY2UAUmZwe+/ib03AjVOpFobX4O7+83BUveSrLfU0Qsyb1DaKJdQRbuU+kM9aZ6QUhiQ== dependencies: "@types/selenium-webdriver" "^3.0.0" @@ -5949,7 +5949,7 @@ webdriver-js-extender@2.1.0: webdriver-manager@^12.0.6: version "12.1.7" - resolved "http://localhost:4873/webdriver-manager/-/webdriver-manager-12.1.7.tgz#ed4eaee8f906b33c146e869b55e850553a1b1162" + resolved "https://registry.yarnpkg.com/webdriver-manager/-/webdriver-manager-12.1.7.tgz#ed4eaee8f906b33c146e869b55e850553a1b1162" integrity sha512-XINj6b8CYuUYC93SG3xPkxlyUc3IJbD6Vvo75CVGuG9uzsefDzWQrhz0Lq8vbPxtb4d63CZdYophF8k8Or/YiA== dependencies: adm-zip "^0.4.9" @@ -5966,24 +5966,24 @@ webdriver-manager@^12.0.6: webidl-conversions@^4.0.2: version "4.0.2" - resolved "http://localhost:4873/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: version "1.0.5" - resolved "http://localhost:4873/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== dependencies: iconv-lite "0.4.24" whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: version "2.3.0" - resolved "http://localhost:4873/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== whatwg-url@^7.0.0: version "7.1.0" - resolved "http://localhost:4873/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== dependencies: lodash.sortby "^4.7.0" @@ -5992,43 +5992,43 @@ whatwg-url@^7.0.0: which-module@^2.0.0: version "2.0.0" - resolved "http://localhost:4873/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which@^1.2.9, which@^1.3.1: version "1.3.1" - resolved "http://localhost:4873/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== dependencies: isexe "^2.0.0" which@^2.0.1, which@^2.0.2: version "2.0.2" - resolved "http://localhost:4873/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== dependencies: isexe "^2.0.0" widest-line@^3.1.0: version "3.1.0" - resolved "http://localhost:4873/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== dependencies: string-width "^4.0.0" word-wrap@~1.2.3: version "1.2.3" - resolved "http://localhost:4873/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== wordwrap@~0.0.2: version "0.0.3" - resolved "http://localhost:4873/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wrap-ansi@^6.2.0: version "6.2.0" - resolved "http://localhost:4873/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== dependencies: ansi-styles "^4.0.0" @@ -6037,12 +6037,12 @@ wrap-ansi@^6.2.0: wrappy@1: version "1.0.2" - resolved "http://localhost:4873/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^3.0.0: version "3.0.3" - resolved "http://localhost:4873/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== dependencies: imurmurhash "^0.1.4" @@ -6052,22 +6052,22 @@ write-file-atomic@^3.0.0: ws@^7.0.0: version "7.2.3" - resolved "http://localhost:4873/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== xdg-basedir@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== xml-name-validator@^3.0.0: version "3.0.0" - resolved "http://localhost:4873/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xml2js@^0.4.17: version "0.4.23" - resolved "http://localhost:4873/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== dependencies: sax ">=0.6.0" @@ -6075,39 +6075,39 @@ xml2js@^0.4.17: xmlbuilder@~11.0.0: version "11.0.1" - resolved "http://localhost:4873/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== xmlchars@^2.1.1: version "2.2.0" - resolved "http://localhost:4873/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== xxhashjs@^0.2.1: version "0.2.2" - resolved "http://localhost:4873/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" + resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== dependencies: cuint "^0.2.2" y18n@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^3.0.2: version "3.1.1" - resolved "http://localhost:4873/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yallist@^4.0.0: version "4.0.0" - resolved "http://localhost:4873/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== yargs-parser@^18.1.0, yargs-parser@^18.1.1: version "18.1.2" - resolved "http://localhost:4873/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.2.tgz#2f482bea2136dbde0861683abea7756d30b504f1" integrity sha512-hlIPNR3IzC1YuL1c2UwwDKpXlNFBqD1Fswwh1khz5+d8Cq/8yc/Mn0i+rQXduu8hcrFKvO7Eryk+09NecTQAAQ== dependencies: camelcase "^5.0.0" @@ -6115,7 +6115,7 @@ yargs-parser@^18.1.0, yargs-parser@^18.1.1: yargs@15.3.0: version "15.3.0" - resolved "http://localhost:4873/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.0.tgz#403af6edc75b3ae04bf66c94202228ba119f0976" integrity sha512-g/QCnmjgOl1YJjGsnUg2SatC7NUYEiLXJqxNOQU9qSpjzGtGXda9b+OKccr1kLTy8BN9yqEyqfq5lxlwdc13TA== dependencies: cliui "^6.0.0" @@ -6132,7 +6132,7 @@ yargs@15.3.0: yargs@^15.3.1: version "15.3.1" - resolved "http://localhost:4873/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.3.1.tgz#9505b472763963e54afe60148ad27a330818e98b" integrity sha512-92O1HWEjw27sBfgmXiixJWT5hRBp2eobqXicLtPBIDBhYB+1HpwZlXmbW2luivBJHBzki+7VyCLRtAkScbTBQA== dependencies: cliui "^6.0.0" @@ -6149,10 +6149,10 @@ yargs@^15.3.1: yn@^3.0.0: version "3.1.1" - resolved "http://localhost:4873/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== zone.js@~0.10.2: version "0.10.3" - resolved "http://localhost:4873/zone.js/-/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" + resolved "https://registry.yarnpkg.com/zone.js/-/zone.js-0.10.3.tgz#3e5e4da03c607c9dcd92e37dd35687a14a140c16" integrity sha512-LXVLVEq0NNOqK/fLJo3d0kfzd4sxwn2/h67/02pjCjfKDxgx1i9QqpvtHD8CrBnSSwMw5+dy11O7FRX5mkO7Cg== From e389abd82f4dd720ed835c3c2d8ea71e84e8f6a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Mon, 30 Mar 2020 15:06:11 +0300 Subject: [PATCH 047/182] AuditLogging Repository is updated --- .../Abp/AuditLogging/IAuditLogRepository.cs | 2 + .../EfCoreAuditLogRepository.cs | 8 +- .../MongoDB/MongoAuditLogRepository.cs | 7 ++ .../AuditLogging/AuditLogRepository_Tests.cs | 103 ++++++++++++++++++ 4 files changed, 119 insertions(+), 1 deletion(-) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs index dbf3692b29..9efc4ae0f6 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.Domain/Volo/Abp/AuditLogging/IAuditLogRepository.cs @@ -46,6 +46,8 @@ namespace Volo.Abp.AuditLogging DateTime startDate, DateTime endDate); + Task GetEntityChange(Guid auditLogId, Guid entityChangeId, bool includeDetails = true); + Task> GetEntityChangeListAsync( string sorting = null, int maxResultCount = 50, diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs index 2a80767cd6..606fe66cee 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs @@ -135,12 +135,18 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore return result.ToDictionary(element => element.Day.ClearTime(), element => element.avgExecutionTime); } - + public override IQueryable WithDetails() { return GetQueryable().IncludeDetails(); } + public Task GetEntityChange(Guid auditLogId, Guid entityChangeId, bool includeDetails = true) + { + return DbContext.Set().AsNoTracking().IncludeDetails(includeDetails) + .Where(x => x.Id == entityChangeId && x.AuditLogId == auditLogId).FirstAsync(); + } + public virtual async Task> GetEntityChangeListAsync( string sorting = null, int maxResultCount = 50, diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index 8705e398dd..6a9b6806fd 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -140,6 +140,13 @@ namespace Volo.Abp.AuditLogging.MongoDB return result.ToDictionary(element => element.Day.ClearTime(), element => element.avgExecutionTime); } + public virtual async Task GetEntityChange(Guid auditLogId, Guid entityChangeId, bool includeDetails = true) + { + return (await GetMongoQueryable() + .Where(x => x.Id == auditLogId && x.EntityChanges.Any(y => y.Id == entityChangeId)).FirstAsync()) + .EntityChanges.First(x => x.Id == entityChangeId); + } + public virtual async Task> GetEntityChangeListAsync( string sorting = null, int maxResultCount = 50, diff --git a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs index 7acf357e3b..78abe1862d 100644 --- a/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs +++ b/modules/audit-logging/test/Volo.Abp.AuditLogging.TestBase/Volo/Abp/AuditLogging/AuditLogRepository_Tests.cs @@ -440,6 +440,109 @@ namespace Volo.Abp.AuditLogging entityChanges.Single(x => x.ChangeType == EntityChangeType.Updated).ShouldNotBeNull(); } + [Fact] + public async Task GetEntityChangeAsync() + { + // Arrange + var userId = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); + var userId2 = new Guid("4456fb0d-74cc-4807-9eee-23e551e6cb06"); + var ipAddress = "153.1.7.61"; + var firstComment = "first Comment"; + + var log1 = new AuditLogInfo + { + UserId = userId, + ImpersonatorUserId = Guid.NewGuid(), + ImpersonatorTenantId = Guid.NewGuid(), + ExecutionTime = DateTime.Today, + ExecutionDuration = 42, + ClientIpAddress = ipAddress, + ClientName = "MyDesktop", + BrowserInfo = "Chrome", + Comments = new List { firstComment, "Second Comment" }, + UserName = "Douglas", + EntityChanges = { + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Deleted", + ChangeType = EntityChangeType.Deleted, + ChangeTime = new DateTime(1995, 3, 27), + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + }, + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Created", + ChangeType = EntityChangeType.Created, + ChangeTime = DateTime.Now, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + } + + } + }; + + var log2 = new AuditLogInfo + { + UserId = userId2, + ImpersonatorUserId = Guid.NewGuid(), + ImpersonatorTenantId = Guid.NewGuid(), + ExecutionTime = DateTime.Today, + ExecutionDuration = 42, + ClientIpAddress = ipAddress, + ClientName = "MyDesktop", + BrowserInfo = "Chrome", + Comments = new List { firstComment, "Second Comment" }, + HttpStatusCode = (int?)HttpStatusCode.BadGateway, + EntityChanges = { + new EntityChangeInfo + { + EntityId = Guid.NewGuid().ToString(), + EntityTypeFullName = "Volo.Abp.AuditLogging.TestEntity_Updated", + ChangeType = EntityChangeType.Updated, + ChangeTime = DateTime.Now, + PropertyChanges = new List + { + new EntityPropertyChangeInfo + { + PropertyTypeFullName = typeof(string).FullName, + PropertyName = "Name", + NewValue = "New value", + OriginalValue = null + } + } + } + } + }; + + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log1)); + await AuditLogRepository.InsertAsync(new AuditLog(GuidGenerator, log2)); + + var entityChanges = await AuditLogRepository.GetEntityChangeListAsync(); + var entityChange = + await AuditLogRepository.GetEntityChange(entityChanges.First().AuditLogId, entityChanges.First().Id); + + entityChange.ChangeTime.ShouldBe(entityChanges.First().ChangeTime); + } + [Fact] public async Task GetOrderedEntityChangeListAsync() { From b05c26d301784d5f0151f248edb424297fa010aa Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 30 Mar 2020 15:26:24 +0300 Subject: [PATCH 048/182] feat(utils): add abp mapping file --- npm/packs/utils/.npmignore | 3 ++- npm/packs/utils/abp.resourcemapping.js | 5 +++++ 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 npm/packs/utils/abp.resourcemapping.js diff --git a/npm/packs/utils/.npmignore b/npm/packs/utils/.npmignore index 59aab27092..cc44e4969c 100644 --- a/npm/packs/utils/.npmignore +++ b/npm/packs/utils/.npmignore @@ -1,2 +1,3 @@ **/* -!dist/**/* \ No newline at end of file +!dist/**/* +!abp.resourcemapping.js \ No newline at end of file diff --git a/npm/packs/utils/abp.resourcemapping.js b/npm/packs/utils/abp.resourcemapping.js new file mode 100644 index 0000000000..147008a28e --- /dev/null +++ b/npm/packs/utils/abp.resourcemapping.js @@ -0,0 +1,5 @@ +module.exports = { + mappings: { + '@node_modules/@abp/utils/bundles/*': '@libs/abp/utils/', + }, +}; From bb08a7ca5ecb0e2d26854e953dd6a601faff0ab0 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 30 Mar 2020 15:34:54 +0300 Subject: [PATCH 049/182] fix: fix type error --- .../lib/components/loader-bar/loader-bar.component.ts | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts index 517d8b08a2..441359e476 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/components/loader-bar/loader-bar.component.ts @@ -43,7 +43,8 @@ export class LoaderBarComponent implements OnDestroy, OnInit { stopDelay = 820; @Input() - filter = (action: StartLoader | StopLoader) => action.payload.url.indexOf('openid-configuration') < 0; + filter = (action: StartLoader | StopLoader) => + action.payload.url.indexOf('openid-configuration') < 0; get boxShadow(): string { return `0 0 10px rgba(${this.color}, 0.5)`; @@ -67,7 +68,9 @@ export class LoaderBarComponent implements OnDestroy, OnInit { .pipe( filter( event => - event instanceof NavigationStart || event instanceof NavigationEnd || event instanceof NavigationError, + event instanceof NavigationStart || + event instanceof NavigationEnd || + event instanceof NavigationError, ), takeUntilDestroy(this), ) @@ -78,7 +81,7 @@ export class LoaderBarComponent implements OnDestroy, OnInit { } ngOnDestroy() { - this.interval.unsubscribe(); + if (this.interval) this.interval.unsubscribe(); } startLoading() { @@ -100,7 +103,7 @@ export class LoaderBarComponent implements OnDestroy, OnInit { } stopLoading() { - this.interval.unsubscribe(); + if (this.interval) this.interval.unsubscribe(); this.progressLevel = 100; this.isLoading = false; if (this.timer && !this.timer.closed) return; From bb17d9acb596454d7255a82b88aaa890d6cc2339 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Mon, 30 Mar 2020 15:42:47 +0300 Subject: [PATCH 050/182] chore(core): add @abp/utils and ts-toolbelt as dependencies --- npm/ng-packs/packages/core/ng-package.json | 4 +++- npm/ng-packs/packages/core/package.json | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/core/ng-package.json b/npm/ng-packs/packages/core/ng-package.json index 7bdb6d9da8..045f0e8844 100644 --- a/npm/ng-packs/packages/core/ng-package.json +++ b/npm/ng-packs/packages/core/ng-package.json @@ -6,6 +6,7 @@ }, "deleteDestPath": false, "whitelistedNonPeerDependencies": [ + "@abp/utils", "@angular/localize", "@ngxs/router-plugin", "@ngxs/storage-plugin", @@ -13,6 +14,7 @@ "angular-oauth2-oidc", "just-compare", "just-clone", - "snq" + "snq", + "ts-toolbelt" ] } diff --git a/npm/ng-packs/packages/core/package.json b/npm/ng-packs/packages/core/package.json index 49aee45ca3..443222b91b 100644 --- a/npm/ng-packs/packages/core/package.json +++ b/npm/ng-packs/packages/core/package.json @@ -7,6 +7,7 @@ "url": "https://github.com/abpframework/abp.git" }, "dependencies": { + "@abp/utils": "~2.3.0", "@angular/localize": "~9.0.2", "@ngxs/router-plugin": "^3.6.2", "@ngxs/storage-plugin": "^3.6.2", @@ -14,7 +15,8 @@ "angular-oauth2-oidc": "^8.0.4", "just-clone": "3.1.0", "just-compare": "^1.3.0", - "snq": "^1.0.3" + "snq": "^1.0.3", + "ts-toolbelt": "^6.3.6" }, "publishConfig": { "access": "public" From c9017cab87f08bbec4635bcabe97816c0556218d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ahmet=20=C3=87otur?= Date: Mon, 30 Mar 2020 15:58:29 +0300 Subject: [PATCH 051/182] Query updated --- .../EntityFrameworkCore/EfCoreAuditLogRepository.cs | 2 +- .../Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs index 606fe66cee..b6308c5741 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.EntityFrameworkCore/Volo/Abp/AuditLogging/EntityFrameworkCore/EfCoreAuditLogRepository.cs @@ -199,7 +199,7 @@ namespace Volo.Abp.AuditLogging.EntityFrameworkCore .WhereIf(changeType.HasValue, e => e.ChangeType == changeType) .WhereIf(!string.IsNullOrWhiteSpace(entityId), e => e.EntityId == entityId) .WhereIf(!string.IsNullOrWhiteSpace(entityTypeFullName), - e => e.EntityTypeFullName == entityTypeFullName); + e => e.EntityTypeFullName.Contains(entityTypeFullName)); } } } diff --git a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs index 6a9b6806fd..89ed33ee5f 100644 --- a/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs +++ b/modules/audit-logging/src/Volo.Abp.AuditLogging.MongoDB/Volo/Abp/AuditLogging/MongoDB/MongoAuditLogRepository.cs @@ -206,7 +206,7 @@ namespace Volo.Abp.AuditLogging.MongoDB .WhereIf(changeType.HasValue, e => e.EntityChanges.Any(ec => ec.ChangeType == changeType)) .WhereIf(!string.IsNullOrWhiteSpace(entityId), e => e.EntityChanges.Any(ec => ec.EntityId == entityId)) .WhereIf(!string.IsNullOrWhiteSpace(entityTypeFullName), - e => e.EntityChanges.Any(ec => ec.EntityTypeFullName == entityTypeFullName)); + e => e.EntityChanges.Any(ec => ec.EntityTypeFullName.Contains(entityTypeFullName))); } protected virtual bool IsSatisfiedEntityChange( @@ -243,7 +243,7 @@ namespace Volo.Abp.AuditLogging.MongoDB return false; } - if (entityTypeFullName != null && entityTypeFullName != entityChange.EntityTypeFullName) + if (entityTypeFullName != null && entityChange.EntityTypeFullName.Contains(entityTypeFullName)) { return false; } From a4def8625d6c982dd06c88b886b9ce6a6d0279de Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 30 Mar 2020 21:10:35 +0800 Subject: [PATCH 052/182] Fix options prefix in document. Resolve #3419 --- docs/en/Authorization.md | 2 +- docs/en/Modules/Docs.md | 2 +- docs/en/UI/AspNetCore/Bundling-Minification.md | 2 +- docs/zh-Hans/Authorization.md | 2 +- docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md | 10 +++++----- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/en/Authorization.md b/docs/en/Authorization.md index 1bceda951f..58d7011080 100644 --- a/docs/en/Authorization.md +++ b/docs/en/Authorization.md @@ -342,7 +342,7 @@ A permission value provider should return one of the following values from the ` Once a provider is defined, it should be added to the `PermissionOptions` as shown below: ```csharp -Configure(options => +Configure(options => { options.ValueProviders.Add(); }); diff --git a/docs/en/Modules/Docs.md b/docs/en/Modules/Docs.md index db752ceb74..bbed28e8fe 100644 --- a/docs/en/Modules/Docs.md +++ b/docs/en/Modules/Docs.md @@ -134,7 +134,7 @@ An ABP module must declare `[DependsOn]` attribute if it has a dependency upon a { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => + Configure(options => { options.DefinitionProviders.Add(); }); diff --git a/docs/en/UI/AspNetCore/Bundling-Minification.md b/docs/en/UI/AspNetCore/Bundling-Minification.md index 5af3f177d5..4216b6d40f 100644 --- a/docs/en/UI/AspNetCore/Bundling-Minification.md +++ b/docs/en/UI/AspNetCore/Bundling-Minification.md @@ -249,7 +249,7 @@ public class MyPrismjsStyleExtension : BundleContributor Then you can configure `BundleContributorOptions` to extend existing `PrismjsStyleBundleContributor`. ````csharp -Configure(options => +Configure(options => { options .Extensions() diff --git a/docs/zh-Hans/Authorization.md b/docs/zh-Hans/Authorization.md index fd3ec72943..69522d87e5 100644 --- a/docs/zh-Hans/Authorization.md +++ b/docs/zh-Hans/Authorization.md @@ -343,7 +343,7 @@ public class SystemAdminPermissionValueProvider : PermissionValueProvider 定义`Provider`后将其添加到 `PermissionOptions`,如下所示: ````csharp -Configure(options => +Configure(options => { options.ValueProviders.Add(); }); diff --git a/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md b/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md index c0f999f996..cce92599d6 100644 --- a/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md +++ b/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md @@ -115,7 +115,7 @@ public class MyWebModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => + Configure(options => { options .ScriptBundles @@ -153,7 +153,7 @@ public class MyWebExtensionModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { - Configure(options => + Configure(options => { options .ScriptBundles @@ -191,7 +191,7 @@ public class MyExtensionGlobalStyleContributor : BundleContributor 然后你可以按照下面的代码使用这个贡献者: ````C# -services.Configure(options => +services.Configure(options => { options .ScriptBundles @@ -251,7 +251,7 @@ public class MyPrismjsStyleExtension : BundleContributor 然后你可以配置 `BundleContributorOptions` 去扩展已存在的 `PrismjsStyleBundleContributor`. ````csharp -Configure(options => +Configure(options => { options .Extensions() @@ -319,7 +319,7 @@ namespace MyCompany.MyProject 例如: ````c# -services.Configure(options => +services.Configure(options => { options .StyleBundles From ab83f4a37a4f6c6ceb21574df7b19d13943a0255 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 30 Mar 2020 21:18:21 +0800 Subject: [PATCH 053/182] Fix options prefix in document. --- docs/en/Authorization.md | 2 +- docs/en/Best-Practices/Entity-Framework-Core-Integration.md | 2 +- docs/en/Best-Practices/MongoDB-Integration.md | 2 +- docs/en/UI/AspNetCore/Bundling-Minification.md | 2 +- docs/zh-Hans/API/Dynamic-CSharp-API-Clients.md | 4 ++-- docs/zh-Hans/Authorization.md | 2 +- docs/zh-Hans/Best-Practices/MongoDB-Integration.md | 2 +- docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md | 2 +- 8 files changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/en/Authorization.md b/docs/en/Authorization.md index 58d7011080..888d907b59 100644 --- a/docs/en/Authorization.md +++ b/docs/en/Authorization.md @@ -339,7 +339,7 @@ A permission value provider should return one of the following values from the ` - `PermissionGrantResult.Prohibited` is returned to prohibit the user for the permission. If any of the providers return `Prohibited`, the result will always be `Prohibited`. Doesn't matter what other providers return. - `PermissionGrantResult.Undefined` is returned if this value provider could not decide about the permission value. Return this to let other providers check the permission. -Once a provider is defined, it should be added to the `PermissionOptions` as shown below: +Once a provider is defined, it should be added to the `AbpPermissionOptions` as shown below: ```csharp Configure(options => diff --git a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md index db8117d798..a86a3e272c 100644 --- a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md +++ b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md @@ -107,7 +107,7 @@ public static class IdentityDbContextModelBuilderExtensions ```` * **Do** call `b.ConfigureByConvention();` for each entity mapping (as shown above). -* **Do** create a **configuration options** class by inheriting from the `ModelBuilderConfigurationOptions`. Example: +* **Do** create a **configuration options** class by inheriting from the `AbpModelBuilderConfigurationOptions`. Example: ````C# public class IdentityModelBuilderConfigurationOptions : ModelBuilderConfigurationOptions diff --git a/docs/en/Best-Practices/MongoDB-Integration.md b/docs/en/Best-Practices/MongoDB-Integration.md index 76b6e8561f..d65872ede7 100644 --- a/docs/en/Best-Practices/MongoDB-Integration.md +++ b/docs/en/Best-Practices/MongoDB-Integration.md @@ -90,7 +90,7 @@ public static class AbpIdentityMongoDbContextExtensions } ``` -- **Do** create a **configuration options** class by inheriting from the `MongoModelBuilderConfigurationOptions`. Example: +- **Do** create a **configuration options** class by inheriting from the `AbpMongoModelBuilderConfigurationOptions`. Example: ```c# public class IdentityMongoModelBuilderConfigurationOptions diff --git a/docs/en/UI/AspNetCore/Bundling-Minification.md b/docs/en/UI/AspNetCore/Bundling-Minification.md index 4216b6d40f..9d88a37135 100644 --- a/docs/en/UI/AspNetCore/Bundling-Minification.md +++ b/docs/en/UI/AspNetCore/Bundling-Minification.md @@ -246,7 +246,7 @@ public class MyPrismjsStyleExtension : BundleContributor } ```` -Then you can configure `BundleContributorOptions` to extend existing `PrismjsStyleBundleContributor`. +Then you can configure `AbpBundleContributorOptions` to extend existing `PrismjsStyleBundleContributor`. ````csharp Configure(options => diff --git a/docs/zh-Hans/API/Dynamic-CSharp-API-Clients.md b/docs/zh-Hans/API/Dynamic-CSharp-API-Clients.md index 331e66c18e..eae86d6117 100644 --- a/docs/zh-Hans/API/Dynamic-CSharp-API-Clients.md +++ b/docs/zh-Hans/API/Dynamic-CSharp-API-Clients.md @@ -69,7 +69,7 @@ public class MyClientAppModule : AbpModule } ```` -查看下面的"RemoteServiceOptions"章节获取更多详细配置. +查看下面的"AbpRemoteServiceOptions"章节获取更多详细配置. ## 使用 @@ -104,7 +104,7 @@ public class MyService : ITransientDependency ## 配置 -### RemoteServiceOptions +### AbpRemoteServiceOptions 默认情况下`AbpRemoteServiceOptions`从`appsettings.json`获取.或者,你可以使用`Configure`方法来设置或重写它.如: diff --git a/docs/zh-Hans/Authorization.md b/docs/zh-Hans/Authorization.md index 69522d87e5..9886d07690 100644 --- a/docs/zh-Hans/Authorization.md +++ b/docs/zh-Hans/Authorization.md @@ -340,7 +340,7 @@ public class SystemAdminPermissionValueProvider : PermissionValueProvider * `PermissionGrantResult.Prohibited` 禁止授权用户,任何一个授权值提供程序返回了 `Prohibited`, 那么其他的提供程序返回的值都不再重要. * `PermissionGrantResult.Undefined` 代表当前无法确定是否授予或禁止权限, 返回`UnDefined`由其他权限值提供程序检查权限. -定义`Provider`后将其添加到 `PermissionOptions`,如下所示: +定义`Provider`后将其添加到 `AbpPermissionOptions`,如下所示: ````csharp Configure(options => diff --git a/docs/zh-Hans/Best-Practices/MongoDB-Integration.md b/docs/zh-Hans/Best-Practices/MongoDB-Integration.md index 4c71a58f90..f2188b7805 100644 --- a/docs/zh-Hans/Best-Practices/MongoDB-Integration.md +++ b/docs/zh-Hans/Best-Practices/MongoDB-Integration.md @@ -90,7 +90,7 @@ public static class AbpIdentityMongoDbContextExtensions } ``` -- **推荐** 通过继承 `MongoModelBuilderConfigurationOptions` 来创建 **configuration Options** 类. 示例: +- **推荐** 通过继承 `AbpMongoModelBuilderConfigurationOptions` 来创建 **configuration Options** 类. 示例: ```c# public class IdentityMongoModelBuilderConfigurationOptions diff --git a/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md b/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md index cce92599d6..ebb402b273 100644 --- a/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md +++ b/docs/zh-Hans/UI/AspNetCore/Bundling-Minification.md @@ -248,7 +248,7 @@ public class MyPrismjsStyleExtension : BundleContributor } ```` -然后你可以配置 `BundleContributorOptions` 去扩展已存在的 `PrismjsStyleBundleContributor`. +然后你可以配置 `AbpBundleContributorOptions` 去扩展已存在的 `PrismjsStyleBundleContributor`. ````csharp Configure(options => From 18e511b8cec3338572ccaa1d2699dec94f0f8eab Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 30 Mar 2020 21:23:01 +0800 Subject: [PATCH 054/182] Rename RemoteServiceOptions --- docs/en/API/Dynamic-CSharp-API-Clients.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/API/Dynamic-CSharp-API-Clients.md b/docs/en/API/Dynamic-CSharp-API-Clients.md index 3c3c2ec26c..460623440f 100644 --- a/docs/en/API/Dynamic-CSharp-API-Clients.md +++ b/docs/en/API/Dynamic-CSharp-API-Clients.md @@ -69,7 +69,7 @@ public class MyClientAppModule : AbpModule } ```` -See the "RemoteServiceOptions" section below for more detailed configuration. +See the "AbpRemoteServiceOptions" section below for more detailed configuration. ## Usage @@ -104,7 +104,7 @@ While you can inject `IBookAppService` like above to use the client proxy, you c ## Configuration -### RemoteServiceOptions +### AbpRemoteServiceOptions `AbpRemoteServiceOptions` is automatically set from the `appsettings.json` by default. Alternatively, you can use `Configure` method to set or override it. Example: From ca080777dbce8f68121c585e69c336ec4f47c815 Mon Sep 17 00:00:00 2001 From: maliming Date: Mon, 30 Mar 2020 21:31:48 +0800 Subject: [PATCH 055/182] Rename MongoModelBuilderConfigurationOptions & ModelBuilderConfigurationOptions. --- docs/en/Best-Practices/Entity-Framework-Core-Integration.md | 2 +- docs/en/Best-Practices/MongoDB-Integration.md | 2 +- .../Best-Practices/Entity-Framework-Core-Integration.md | 4 ++-- docs/zh-Hans/Best-Practices/MongoDB-Integration.md | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md index a86a3e272c..f487f9d61d 100644 --- a/docs/en/Best-Practices/Entity-Framework-Core-Integration.md +++ b/docs/en/Best-Practices/Entity-Framework-Core-Integration.md @@ -110,7 +110,7 @@ public static class IdentityDbContextModelBuilderExtensions * **Do** create a **configuration options** class by inheriting from the `AbpModelBuilderConfigurationOptions`. Example: ````C# -public class IdentityModelBuilderConfigurationOptions : ModelBuilderConfigurationOptions +public class IdentityModelBuilderConfigurationOptions : AbpModelBuilderConfigurationOptions { public IdentityModelBuilderConfigurationOptions() : base(AbpIdentityConsts.DefaultDbTablePrefix, AbpIdentityConsts.DefaultDbSchema) diff --git a/docs/en/Best-Practices/MongoDB-Integration.md b/docs/en/Best-Practices/MongoDB-Integration.md index d65872ede7..74a0e429f1 100644 --- a/docs/en/Best-Practices/MongoDB-Integration.md +++ b/docs/en/Best-Practices/MongoDB-Integration.md @@ -94,7 +94,7 @@ public static class AbpIdentityMongoDbContextExtensions ```c# public class IdentityMongoModelBuilderConfigurationOptions - : MongoModelBuilderConfigurationOptions + : AbpMongoModelBuilderConfigurationOptions { public IdentityMongoModelBuilderConfigurationOptions() : base(AbpIdentityConsts.DefaultDbTablePrefix) diff --git a/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md b/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md index c74945ec01..b01f7eab28 100644 --- a/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md +++ b/docs/zh-Hans/Best-Practices/Entity-Framework-Core-Integration.md @@ -106,10 +106,10 @@ public static class IdentityDbContextModelBuilderExtensions ```` * **推荐** 为每个Enttiy映射调用 `b.ConfigureByConvention();`(如上所示). -* **推荐** 通过继承 `ModelBuilderConfigurationOptions` 来创建 **configuration Options** 类. 例如: +* **推荐** 通过继承 `AbpModelBuilderConfigurationOptions` 来创建 **configuration Options** 类. 例如: ````C# -public class IdentityModelBuilderConfigurationOptions : ModelBuilderConfigurationOptions +public class IdentityModelBuilderConfigurationOptions : AbpModelBuilderConfigurationOptions { public IdentityModelBuilderConfigurationOptions() : base(AbpIdentityConsts.DefaultDbTablePrefix, AbpIdentityConsts.DefaultDbSchema) diff --git a/docs/zh-Hans/Best-Practices/MongoDB-Integration.md b/docs/zh-Hans/Best-Practices/MongoDB-Integration.md index f2188b7805..b7b033b1fa 100644 --- a/docs/zh-Hans/Best-Practices/MongoDB-Integration.md +++ b/docs/zh-Hans/Best-Practices/MongoDB-Integration.md @@ -1,4 +1,4 @@ -## MongoDB 集成 +## MongoDB 集成 * **推荐** 为每个模块定义一个独立的 `MongoDbContext` 接口与实现类. @@ -94,7 +94,7 @@ public static class AbpIdentityMongoDbContextExtensions ```c# public class IdentityMongoModelBuilderConfigurationOptions - : MongoModelBuilderConfigurationOptions + : AbpMongoModelBuilderConfigurationOptions { public IdentityMongoModelBuilderConfigurationOptions() : base(AbpIdentityConsts.DefaultDbTablePrefix) From 60963a3dc175fa89d23a018c88c2980127d3fadb Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 30 Mar 2020 18:29:33 +0300 Subject: [PATCH 056/182] add connection string param to CLI --- .../Volo/Abp/Cli/Commands/NewCommand.cs | 17 +++++++- .../Steps/ConnectionStringChangeStep.cs | 41 +++++++++++++++++++ .../TemplateProjectBuildPipelineBuilder.cs | 5 +++ .../Cli/ProjectBuilding/ProjectBuildArgs.cs | 7 +++- 4 files changed, 68 insertions(+), 2 deletions(-) create mode 100644 framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index c7d7b4a87b..86345da19c 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -73,6 +73,14 @@ namespace Volo.Abp.Cli.Commands Logger.LogInformation("UI Framework: " + uiFramework); } + var connectionString = commandLineArgs + .Options + .GetOrNull(Options.ConnectionString.Short, Options.ConnectionString.Long); + if (connectionString != null) + { + Logger.LogInformation("Connection string: " + connectionString); + } + var mobileApp = GetMobilePreference(commandLineArgs); if (mobileApp != MobileApp.None) { @@ -122,7 +130,8 @@ namespace Volo.Abp.Cli.Commands mobileApp, gitHubLocalRepositoryPath, templateSource, - commandLineArgs.Options + commandLineArgs.Options, + connectionString ) ); @@ -309,6 +318,12 @@ namespace Volo.Abp.Cli.Commands public const string Long = "template-source"; } + public static class ConnectionString + { + public const string Short = "cs"; + public const string Long = "connection-string"; + } + public static class CreateSolutionFolder { public const string Short = "csf"; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs new file mode 100644 index 0000000000..ba42500007 --- /dev/null +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs @@ -0,0 +1,41 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using Newtonsoft.Json; +using Volo.Abp.Cli.ProjectBuilding.Files; + +namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps +{ + public class ConnectionStringChangeStep : ProjectBuildPipelineStep + { + public override void Execute(ProjectBuildContext context) + { + var newConnectionString = context.BuildArgs.ConnectionString; + + var appSettingsJsonFiles = context.Files.Where(f => + f.Name.EndsWith("appsettings.json", StringComparison.OrdinalIgnoreCase)); + + foreach (var appSettingsJson in appSettingsJsonFiles) + { + var appSettingsObject = JsonConvert.DeserializeObject(appSettingsJson.Content); + var oldConnectionString = appSettingsObject.ConnectionStrings.Default; + appSettingsJson.ReplaceText(oldConnectionString, newConnectionString); + } + } + + public class ConnectionStringModel + { + public string Default { get; set; } + } + + public class AppSettingsConnectionStringModel + { + public ConnectionStringModel ConnectionStrings { get; set; } + + public string GetDefaultConnectionString() + { + return ConnectionStrings?.Default; + } + } + } +} diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs index a68de8ef62..607ec4f1c7 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/TemplateProjectBuildPipelineBuilder.cs @@ -28,6 +28,11 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building pipeline.Steps.Add(new RemoveRootFolderStep()); } + if (context.BuildArgs.ConnectionString != null) + { + pipeline.Steps.Add(new ConnectionStringChangeStep()); + } + pipeline.Steps.Add(new CreateProjectResultZipStep()); return pipeline; diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs index ea207bc426..70cb98dff0 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/ProjectBuildArgs.cs @@ -27,6 +27,9 @@ namespace Volo.Abp.Cli.ProjectBuilding [CanBeNull] public string TemplateSource { get; set; } + [CanBeNull] + public string ConnectionString { get; set; } + [NotNull] public Dictionary ExtraProperties { get; set; } @@ -39,7 +42,8 @@ namespace Volo.Abp.Cli.ProjectBuilding MobileApp? mobileApp = null, [CanBeNull] string abpGitHubLocalRepositoryPath = null, [CanBeNull] string templateSource = null, - Dictionary extraProperties = null) + Dictionary extraProperties = null, + [CanBeNull] string connectionString = null) { SolutionName = Check.NotNull(solutionName, nameof(solutionName)); TemplateName = templateName; @@ -50,6 +54,7 @@ namespace Volo.Abp.Cli.ProjectBuilding AbpGitHubLocalRepositoryPath = abpGitHubLocalRepositoryPath; TemplateSource = templateSource; ExtraProperties = extraProperties ?? new Dictionary(); + ConnectionString = connectionString; } } } \ No newline at end of file From 25c50b295c3f0dd8cb7c18bc2623e17dac7da008 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 30 Mar 2020 18:38:20 +0300 Subject: [PATCH 057/182] Update NewCommand.cs --- .../Volo/Abp/Cli/Commands/NewCommand.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 86345da19c..222bfee307 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -73,9 +73,7 @@ namespace Volo.Abp.Cli.Commands Logger.LogInformation("UI Framework: " + uiFramework); } - var connectionString = commandLineArgs - .Options - .GetOrNull(Options.ConnectionString.Short, Options.ConnectionString.Long); + var connectionString = GetConnectionString(commandLineArgs); if (connectionString != null) { Logger.LogInformation("Connection string: " + connectionString); @@ -177,6 +175,12 @@ namespace Volo.Abp.Cli.Commands Logger.LogInformation($"'{projectName}' has been successfully created to '{outputFolder}'"); } + private static string GetConnectionString(CommandLineArgs commandLineArgs) + { + var connectionString = commandLineArgs.Options.GetOrNull(Options.ConnectionString.Short, Options.ConnectionString.Long); + return string.IsNullOrWhiteSpace(connectionString) ? null : connectionString; + } + public string GetUsageInfo() { var sb = new StringBuilder(); From 733dbd44606e892689a0adad4e3c48e034b353df Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 30 Mar 2020 19:21:21 +0300 Subject: [PATCH 058/182] Update ConnectionStringChangeStep.cs --- .../Steps/ConnectionStringChangeStep.cs | 31 ++++++++----------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs index ba42500007..d12bc45866 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text.RegularExpressions; using Newtonsoft.Json; +using Newtonsoft.Json.Linq; using Volo.Abp.Cli.ProjectBuilding.Files; namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps @@ -10,31 +12,24 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps { public override void Execute(ProjectBuildContext context) { - var newConnectionString = context.BuildArgs.ConnectionString; + var newConnectionString = "\"Default\": \"" + context.BuildArgs.ConnectionString + "\""; var appSettingsJsonFiles = context.Files.Where(f => f.Name.EndsWith("appsettings.json", StringComparison.OrdinalIgnoreCase)); foreach (var appSettingsJson in appSettingsJsonFiles) { - var appSettingsObject = JsonConvert.DeserializeObject(appSettingsJson.Content); - var oldConnectionString = appSettingsObject.ConnectionStrings.Default; - appSettingsJson.ReplaceText(oldConnectionString, newConnectionString); - } - } - - public class ConnectionStringModel - { - public string Default { get; set; } - } - - public class AppSettingsConnectionStringModel - { - public ConnectionStringModel ConnectionStrings { get; set; } + try + { + var jsonObject = JObject.Parse(appSettingsJson.Content); + var defaultConnectionString = ((Newtonsoft.Json.Linq.JContainer)jsonObject["ConnectionStrings"]).First.ToString(); - public string GetDefaultConnectionString() - { - return ConnectionStrings?.Default; + appSettingsJson.ReplaceText(defaultConnectionString, newConnectionString); + } + catch (Exception ex) + { + Console.WriteLine("Cannot change the connection string in " + appSettingsJson.Name + ". Error: " + ex.Message); + } } } } From 765d967a42d5c37e5c063226d8cd09b3f10b2e06 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 30 Mar 2020 19:25:54 +0300 Subject: [PATCH 059/182] Update ConnectionStringChangeStep.cs --- .../Building/Steps/ConnectionStringChangeStep.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs index d12bc45866..ea53868812 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs @@ -22,7 +22,9 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps try { var jsonObject = JObject.Parse(appSettingsJson.Content); - var defaultConnectionString = ((Newtonsoft.Json.Linq.JContainer)jsonObject["ConnectionStrings"]).First.ToString(); + var connectionStringContainer = (JContainer)jsonObject["ConnectionStrings"]; + var firstConnectionString = connectionStringContainer.First; + var defaultConnectionString = firstConnectionString.ToString(); appSettingsJson.ReplaceText(defaultConnectionString, newConnectionString); } From bc547cd05ac9fddffb3793d42fbbd85410adc08d Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 30 Mar 2020 20:37:33 +0300 Subject: [PATCH 060/182] Add ReadAllLinesAsync method. --- .../Steps/ConnectionStringChangeStep.cs | 24 +++++++++- .../Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs | 48 ++++++++++++++++++- 2 files changed, 70 insertions(+), 2 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs index ea53868812..491955650b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs @@ -1,6 +1,8 @@ using System; using System.Collections.Generic; +using System.IO; using System.Linq; +using System.Text; using System.Text.RegularExpressions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; @@ -21,7 +23,8 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps { try { - var jsonObject = JObject.Parse(appSettingsJson.Content); + var appSettingJsonContentWithoutBom = GetStringWithoutBom(appSettingsJson.Bytes); + var jsonObject = JObject.Parse(appSettingJsonContentWithoutBom); var connectionStringContainer = (JContainer)jsonObject["ConnectionStrings"]; var firstConnectionString = connectionStringContainer.First; var defaultConnectionString = firstConnectionString.ToString(); @@ -34,5 +37,24 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps } } } + + private static string GetStringWithoutBom(byte[] bytes) + { + if (bytes == null) + { + return null; + } + + var hasBom = bytes.Length >= 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF; + + if (hasBom) + { + return Encoding.UTF8.GetString(bytes, 3, bytes.Length - 3); + } + else + { + return Encoding.UTF8.GetString(bytes); + } + } } } diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs index 21ca7c2086..4c258dfbeb 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Text; using System.Threading.Tasks; @@ -73,6 +74,51 @@ namespace Volo.Abp.IO } } - //TODO: ReadAllLinesAsync + /// + /// Opens a text file, reads all lines of the file, and then closes the file. + /// + /// The file to open for reading. + /// Encoding of the file. Default is UTF8 + /// Specifies how the operating system should open a file. Default is Open + /// Defines constants for read, write, or read/write access to a file. Default is Read + /// Contains constants for controlling the kind of access other FileStream objects can have to the same file. Default is Read + /// Length of StreamReader buffer. Default is 4096. + /// Indicates FileStream options. Default is Asynchronous (The file is to be used for asynchronous reading.) and SequentialScan (The file is to be accessed sequentially from beginning to end.) + /// A string containing all lines of the file. + public static async Task ReadAllLinesAsync(string path, + Encoding encoding = null, + FileMode fileMode = FileMode.Open, + FileAccess fileAccess = FileAccess.Read, + FileShare fileShare = FileShare.Read, + int bufferSize = 4096, + FileOptions fileOptions = FileOptions.Asynchronous | FileOptions.SequentialScan) + { + if (encoding == null) + { + encoding = Encoding.UTF8; + } + + var lines = new List(); + + using (var stream = new FileStream( + path, + fileMode, + fileAccess, + fileShare, + bufferSize, + fileOptions)) + { + using (var reader = new StreamReader(stream, encoding)) + { + string line; + while ((line = await reader.ReadLineAsync()) != null) + { + lines.Add(line); + } + } + } + + return lines.ToArray(); + } } } \ No newline at end of file From 619d7665c40f4bcf2346b93d04d8452d7e29ccc8 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 30 Mar 2020 20:51:43 +0300 Subject: [PATCH 061/182] Add ConvertFromBytesWithoutBom to convert BOM encoded texts without BOM --- .../Volo/Abp/Text/StringHelper.cs | 37 +++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 framework/src/Volo.Abp.Core/Volo/Abp/Text/StringHelper.cs diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/Text/StringHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/Text/StringHelper.cs new file mode 100644 index 0000000000..c6be5db02b --- /dev/null +++ b/framework/src/Volo.Abp.Core/Volo/Abp/Text/StringHelper.cs @@ -0,0 +1,37 @@ +using System.Text; + +namespace Volo.Abp.Text +{ + public class StringHelper + { + /// + /// Converts a byte[] to string without BOM (byte order mark). + /// + /// The byte[] to be converted to string + /// The encoding to get string. Default is UTF8 + /// + public static string ConvertFromBytesWithoutBom(byte[] bytes, Encoding encoding = null) + { + if (bytes == null) + { + return null; + } + + if (encoding == null) + { + encoding = Encoding.UTF8; + } + + var hasBom = bytes.Length >= 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF; + + if (hasBom) + { + return encoding.GetString(bytes, 3, bytes.Length - 3); + } + else + { + return encoding.GetString(bytes); + } + } + } +} \ No newline at end of file From b591a55bf28c3f7c829b35336d4920610d6d3599 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 30 Mar 2020 20:52:11 +0300 Subject: [PATCH 062/182] Add ReadFileWithoutBom to get content when the file encoded with Byte Order Mark. --- .../src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs b/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs index 4c258dfbeb..a945784352 100644 --- a/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs +++ b/framework/src/Volo.Abp.Core/Volo/Abp/IO/FileHelper.cs @@ -4,6 +4,7 @@ using System.IO; using System.Text; using System.Threading.Tasks; using JetBrains.Annotations; +using Volo.Abp.Text; namespace Volo.Abp.IO { @@ -120,5 +121,17 @@ namespace Volo.Abp.IO return lines.ToArray(); } + + /// + /// Opens a text file, reads content without BOM + /// + /// The file to open for reading. + /// A string containing all lines of the file. + public static async Task ReadFileWithoutBomAsync(string path) + { + var content = await ReadAllBytesAsync(path); + + return StringHelper.ConvertFromBytesWithoutBom(content); + } } } \ No newline at end of file From 0b2546ed04838fdcf84ecb2fccdec7d6f9f19bbb Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 30 Mar 2020 21:09:54 +0300 Subject: [PATCH 063/182] closes #3208 --- .../Steps/ConnectionStringChangeStep.cs | 70 ++++++++++++------- 1 file changed, 43 insertions(+), 27 deletions(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs index 491955650b..02bc8219b8 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs @@ -7,29 +7,64 @@ using System.Text.RegularExpressions; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using Volo.Abp.Cli.ProjectBuilding.Files; +using Volo.Abp.Text; namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps { public class ConnectionStringChangeStep : ProjectBuildPipelineStep { + private const string DefaultConnectionStringKey = "Default"; + public override void Execute(ProjectBuildContext context) { - var newConnectionString = "\"Default\": \"" + context.BuildArgs.ConnectionString + "\""; - var appSettingsJsonFiles = context.Files.Where(f => - f.Name.EndsWith("appsettings.json", StringComparison.OrdinalIgnoreCase)); + f.Name.EndsWith("appsettings.json", StringComparison.OrdinalIgnoreCase)) + .ToArray(); + + if (!appSettingsJsonFiles.Any()) + { + return; + } + + var newConnectionString = $"\"{DefaultConnectionStringKey}: \"{context.BuildArgs.ConnectionString}\""; foreach (var appSettingsJson in appSettingsJsonFiles) { try { - var appSettingJsonContentWithoutBom = GetStringWithoutBom(appSettingsJson.Bytes); + var appSettingJsonContentWithoutBom = StringHelper.ConvertFromBytesWithoutBom(appSettingsJson.Bytes); var jsonObject = JObject.Parse(appSettingJsonContentWithoutBom); - var connectionStringContainer = (JContainer)jsonObject["ConnectionStrings"]; - var firstConnectionString = connectionStringContainer.First; - var defaultConnectionString = firstConnectionString.ToString(); - appSettingsJson.ReplaceText(defaultConnectionString, newConnectionString); + var connectionStringContainer = (JContainer)jsonObject?["ConnectionStrings"]; + if (connectionStringContainer == null) + { + continue; + } + + if (!connectionStringContainer.Any()) + { + continue; + } + + var connectionStrings = connectionStringContainer.ToList(); + + foreach (var connectionString in connectionStrings) + { + var property = ((JProperty)connectionString); + var connectionStringName = property.Name; + + if (connectionStringName == DefaultConnectionStringKey) + { + var defaultConnectionString = property.ToString(); + if (defaultConnectionString == null) + { + continue; + } + + appSettingsJson.ReplaceText(defaultConnectionString, newConnectionString); + break; + } + } } catch (Exception ex) { @@ -37,24 +72,5 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps } } } - - private static string GetStringWithoutBom(byte[] bytes) - { - if (bytes == null) - { - return null; - } - - var hasBom = bytes.Length >= 3 && bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF; - - if (hasBom) - { - return Encoding.UTF8.GetString(bytes, 3, bytes.Length - 3); - } - else - { - return Encoding.UTF8.GetString(bytes); - } - } } } From 990c74f00086df4578af1823a05db147d34ef24a Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Mon, 30 Mar 2020 21:17:15 +0300 Subject: [PATCH 064/182] add missing string closer char --- .../Building/Steps/ConnectionStringChangeStep.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs index 02bc8219b8..b1e118ee8b 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/ProjectBuilding/Building/Steps/ConnectionStringChangeStep.cs @@ -26,7 +26,7 @@ namespace Volo.Abp.Cli.ProjectBuilding.Building.Steps return; } - var newConnectionString = $"\"{DefaultConnectionStringKey}: \"{context.BuildArgs.ConnectionString}\""; + var newConnectionString = $"\"{DefaultConnectionStringKey}\": \"{context.BuildArgs.ConnectionString}\""; foreach (var appSettingsJson in appSettingsJsonFiles) { From 2a5fdf7f8b7017c8b256f34649f68c2696da7921 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 31 Mar 2020 08:29:41 +0300 Subject: [PATCH 065/182] chore: remove unnecessary package --- npm/ng-packs/package.json | 1 - 1 file changed, 1 deletion(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 5092ae340c..9e81892e58 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -77,7 +77,6 @@ "ngxs-reset-plugin": "^1.2.0", "ngxs-schematic": "^1.1.9", "prettier": "^1.18.2", - "primeicons": "^2.0.0", "protractor": "~5.4.0", "rxjs": "~6.4.0", "snq": "^1.0.3", From 81600ceb1daf6ef1093e2d004f790abf5a6caf89 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 31 Mar 2020 10:06:06 +0300 Subject: [PATCH 066/182] chore: remove linked list --- .../core/src/lib/tests/linked-list.spec.ts | 1532 ----------------- .../packages/core/src/lib/utils/index.ts | 1 - .../core/src/lib/utils/linked-list.ts | 396 ----- 3 files changed, 1929 deletions(-) delete mode 100644 npm/ng-packs/packages/core/src/lib/tests/linked-list.spec.ts delete mode 100644 npm/ng-packs/packages/core/src/lib/utils/linked-list.ts diff --git a/npm/ng-packs/packages/core/src/lib/tests/linked-list.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/linked-list.spec.ts deleted file mode 100644 index 3ad9eeda63..0000000000 --- a/npm/ng-packs/packages/core/src/lib/tests/linked-list.spec.ts +++ /dev/null @@ -1,1532 +0,0 @@ -import { LinkedList, ListNode } from '../utils/linked-list'; - -describe('Linked List (Doubly)', () => { - let list: LinkedList; - - beforeEach(() => (list = new LinkedList())); - - describe('#length', () => { - it('should initially be 0', () => { - expect(list.length).toBe(0); - }); - }); - - describe('#head', () => { - it('should initially be undefined', () => { - expect(list.head).toBeUndefined(); - }); - }); - - describe('#tail', () => { - it('should initially be undefined', () => { - expect(list.tail).toBeUndefined(); - }); - }); - - describe('#add', () => { - describe('#head', () => { - it('should add node to the head of the list', () => { - list.addHead('a'); - - // "a" - - expect(list.head.value).toBe('a'); - expect(list.tail.value).toBe('a'); - }); - - it('should create reference to previous and next nodes', () => { - list.add('a').head(); - list.add('b').head(); - list.add('c').head(); - - // "c" <-> "b" <-> "a" - - expect(list.length).toBe(3); - expect(list.head.value).toBe('c'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('a'); - expect(list.head.previous).toBeUndefined(); - expect(list.tail.value).toBe('a'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('c'); - expect(list.tail.next).toBeUndefined(); - }); - }); - - describe('#tail', () => { - it('should add node to the tail of the list', () => { - list.addTail('a'); - - // "a" - - expect(list.head.value).toBe('a'); - expect(list.tail.value).toBe('a'); - expect(list.tail.next).toBeUndefined(); - }); - - it('should create reference to previous and next nodes', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.head.previous).toBeUndefined(); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - expect(list.tail.next).toBeUndefined(); - }); - }); - - describe('#after', () => { - it('should add a node after node with given value', () => { - list.add('a').tail(); - - // "a" - - list.add('b').after('a'); - list.add('c').after('b'); - - // "a" <-> "b" <-> "c" - - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - - it('should add a node to tail if given value is not found', () => { - list.add('a').tail(); - - // "a" - - list.add('b').after('x'); - - // "a" <-> "b" - - expect(list.length).toBe(2); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.tail.value).toBe('b'); - expect(list.tail.previous.value).toBe('a'); - }); - - it('should be able to receive a custom compareFn', () => { - list.add({ x: 1 }).tail(); - list.add({ x: 2 }).tail(); - list.add({ x: 3 }).tail(); - - // {"x":1} <-> {"x":2} <-> {"x":3} - - list.add({ x: 0 }).after({ x: 1 }, (v1: X, v2: X) => v1.x === v2.x); - - // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":3} - - expect(list.length).toBe(4); - expect(list.head.value.x).toBe(1); - expect(list.head.next.value.x).toBe(0); - expect(list.head.next.next.value.x).toBe(2); - expect(list.head.next.next.next.value.x).toBe(3); - expect(list.tail.value.x).toBe(3); - expect(list.tail.previous.value.x).toBe(2); - expect(list.tail.previous.previous.value.x).toBe(0); - expect(list.tail.previous.previous.previous.value.x).toBe(1); - }); - }); - - describe('#before', () => { - it('should add a node before node with given value', () => { - list.add('c').tail(); - - // "c" - - list.add('b').before('c'); - list.add('a').before('b'); - - // "a" <-> "b" <-> "c" - - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - - it('should add a node to head if given value is not found', () => { - list.add('b').tail(); - - // "a" - - list.add('a').before('x'); - - // "a" <-> "b" - - expect(list.length).toBe(2); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.tail.value).toBe('b'); - expect(list.tail.previous.value).toBe('a'); - }); - - it('should be able to receive a custom compareFn', () => { - list.add({ x: 1 }).tail(); - list.add({ x: 2 }).tail(); - list.add({ x: 3 }).tail(); - - // {"x":1} <-> {"x":2} <-> {"x":3} - - list.add({ x: 0 }).before({ x: 2 }, (v1: X, v2: X) => v1.x === v2.x); - - // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":3} - - expect(list.length).toBe(4); - expect(list.head.value.x).toBe(1); - expect(list.head.next.value.x).toBe(0); - expect(list.head.next.next.value.x).toBe(2); - expect(list.head.next.next.next.value.x).toBe(3); - expect(list.tail.value.x).toBe(3); - expect(list.tail.previous.value.x).toBe(2); - expect(list.tail.previous.previous.value.x).toBe(0); - expect(list.tail.previous.previous.previous.value.x).toBe(1); - }); - }); - - describe('#byIndex', () => { - it('should add a node at given index', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - list.add('x').byIndex(1); - - // "a" <-> "x" <-> "b" <-> "c" - - list.add('y').byIndex(3); - - // "a" <-> "x" <-> "b" <-> "y" <-> "c" - - expect(list.length).toBe(5); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('x'); - expect(list.head.next.next.value).toBe('b'); - expect(list.head.next.next.next.value).toBe('y'); - expect(list.head.next.next.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('y'); - expect(list.tail.previous.previous.value).toBe('b'); - expect(list.tail.previous.previous.previous.value).toBe('x'); - expect(list.tail.previous.previous.previous.previous.value).toBe('a'); - }); - - it('should add a node to head if given index is zero', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - list.add('x').byIndex(0); - - // "x" <-> "a" <-> "b" <-> "c" - - expect(list.length).toBe(4); - expect(list.head.value).toBe('x'); - expect(list.head.next.value).toBe('a'); - expect(list.head.next.next.value).toBe('b'); - expect(list.head.next.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - expect(list.tail.previous.previous.previous.value).toBe('x'); - }); - - it('should add a node to tail if given index more than size', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - list.add('x').byIndex(4); - - // "a" <-> "b" <-> "c" <-> "x" - - expect(list.length).toBe(4); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.head.next.next.next.value).toBe('x'); - expect(list.tail.value).toBe('x'); - expect(list.tail.previous.value).toBe('c'); - expect(list.tail.previous.previous.value).toBe('b'); - expect(list.tail.previous.previous.previous.value).toBe('a'); - }); - - it('should be able to add a node at given index counting from right to left', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - list.add('x').byIndex(-1); - - // "a" <-> "b" <-> "x" <-> "c" - - expect(list.length).toBe(4); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('x'); - expect(list.head.next.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('x'); - expect(list.tail.previous.previous.value).toBe('b'); - expect(list.tail.previous.previous.previous.value).toBe('a'); - }); - - it('should add a node to head if given index is less than minus size', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - list.add('x').byIndex(-4); - - // "x" <-> "a" <-> "b" <-> "c" - - expect(list.length).toBe(4); - expect(list.head.value).toBe('x'); - expect(list.head.next.value).toBe('a'); - expect(list.head.next.next.value).toBe('b'); - expect(list.head.next.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - expect(list.tail.previous.previous.previous.value).toBe('x'); - }); - }); - }); - - describe('#addMany', () => { - describe('#head', () => { - it('should add multiple nodes to the head of the list', () => { - list.add('x').head(); - - // "x" - - list.addMany(['a', 'b', 'c']).head(); - - // "a" <-> "b" <-> "c" <-> "x" - - expect(list.length).toBe(4); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.head.next.next.next.value).toBe('x'); - expect(list.head.previous).toBeUndefined(); - expect(list.tail.value).toBe('x'); - expect(list.tail.previous.value).toBe('c'); - expect(list.tail.previous.previous.value).toBe('b'); - expect(list.tail.previous.previous.previous.value).toBe('a'); - expect(list.tail.next).toBeUndefined(); - }); - }); - - describe('#tail', () => { - it('should add multiple nodes to the tail of the list', () => { - list.add('x').tail(); - - // "x" - - list.addMany(['a', 'b', 'c']).tail(); - - // "x" <-> "a" <-> "b" <-> "c" - - expect(list.length).toBe(4); - expect(list.head.value).toBe('x'); - expect(list.head.next.value).toBe('a'); - expect(list.head.next.next.value).toBe('b'); - expect(list.head.next.next.next.value).toBe('c'); - expect(list.head.previous).toBeUndefined(); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - expect(list.tail.previous.previous.previous.value).toBe('x'); - expect(list.tail.next).toBeUndefined(); - }); - }); - - describe('#after', () => { - it('should add multiple nodes after node with given value', () => { - list.add('a').tail(); - - // "a" - - list.addMany(['b', 'c']).after('a'); - - // "a" <-> "b" <-> "c" - - list.addMany(['x', 'y', 'z']).after('b'); - - // "a" <-> "b" <-> "x" <-> "y" <-> "z" <-> "c" - - expect(list.length).toBe(6); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('x'); - expect(list.head.next.next.next.value).toBe('y'); - expect(list.head.next.next.next.next.value).toBe('z'); - expect(list.head.next.next.next.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('z'); - expect(list.tail.previous.previous.value).toBe('y'); - expect(list.tail.previous.previous.previous.value).toBe('x'); - expect(list.tail.previous.previous.previous.previous.value).toBe('b'); - expect(list.tail.previous.previous.previous.previous.previous.value).toBe('a'); - }); - - it('should add multiple nodes to tail if given value is not found', () => { - list.add('a').tail(); - - // "a" - - list.addMany(['b', 'c']).after('x'); - - // "a" <-> "b" <-> "c" - - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - - it('should be able to receive a custom compareFn', () => { - list.addMany([{ x: 1 }, { x: 2 }, { x: 3 }]).tail(); - - // {"x":1} <-> {"x":2} <-> {"x":3} - - list.addMany([{ x: 4 }, { x: 5 }]).after({ x: 1 }, (v1: X, v2: X) => v1.x === v2.x); - - // {"x":1} <-> {"x":4} <-> {"x":5} <-> {"x":2} <-> {"x":3} - - expect(list.length).toBe(5); - expect(list.head.value.x).toBe(1); - expect(list.head.next.value.x).toBe(4); - expect(list.head.next.next.value.x).toBe(5); - expect(list.head.next.next.next.value.x).toBe(2); - expect(list.head.next.next.next.next.value.x).toBe(3); - expect(list.tail.value.x).toBe(3); - expect(list.tail.previous.value.x).toBe(2); - expect(list.tail.previous.previous.value.x).toBe(5); - expect(list.tail.previous.previous.previous.value.x).toBe(4); - expect(list.tail.previous.previous.previous.previous.value.x).toBe(1); - }); - - it('should not change the list when empty array given as value', () => { - list.add('a').tail(); - - // "a" - - list.addMany([]).after('a'); - - // "a" - - expect(list.length).toBe(1); - expect(list.head.value).toBe('a'); - expect(list.tail.value).toBe('a'); - }); - }); - - describe('#before', () => { - it('should add multiple nodes before node with given value', () => { - list.add('c').tail(); - - // "c" - - list.addMany(['a', 'b']).before('c'); - - // "a" <-> "b" <-> "c" - - list.addMany(['x', 'y', 'z']).before('b'); - - // "a" <-> "x" <-> "y" <-> "z" <-> "b" <-> "c" - - expect(list.length).toBe(6); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('x'); - expect(list.head.next.next.value).toBe('y'); - expect(list.head.next.next.next.value).toBe('z'); - expect(list.head.next.next.next.next.value).toBe('b'); - expect(list.head.next.next.next.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('z'); - expect(list.tail.previous.previous.previous.value).toBe('y'); - expect(list.tail.previous.previous.previous.previous.value).toBe('x'); - expect(list.tail.previous.previous.previous.previous.previous.value).toBe('a'); - }); - - it('should add multiple nodes to head if given value is not found', () => { - list.add('c').tail(); - - // "c" - - list.addMany(['a', 'b']).before('x'); - - // "a" <-> "b" <-> "c" - - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - - it('should be able to receive a custom compareFn', () => { - list.addMany([{ x: 1 }, { x: 2 }, { x: 3 }]).tail(); - - // {"x":1} <-> {"x":2} <-> {"x":3} - - list.addMany([{ x: 4 }, { x: 5 }]).before({ x: 3 }, (v1: X, v2: X) => v1.x === v2.x); - - // {"x":1} <-> {"x":2} <-> {"x":4} <-> {"x":5} <-> {"x":3} - - expect(list.length).toBe(5); - expect(list.head.value.x).toBe(1); - expect(list.head.next.value.x).toBe(2); - expect(list.head.next.next.value.x).toBe(4); - expect(list.head.next.next.next.value.x).toBe(5); - expect(list.head.next.next.next.next.value.x).toBe(3); - expect(list.tail.value.x).toBe(3); - expect(list.tail.previous.value.x).toBe(5); - expect(list.tail.previous.previous.value.x).toBe(4); - expect(list.tail.previous.previous.previous.value.x).toBe(2); - expect(list.tail.previous.previous.previous.previous.value.x).toBe(1); - }); - - it('should not change the list when empty array given as value', () => { - list.add('a').tail(); - - // "a" - - list.addMany([]).before('a'); - - // "a" - - expect(list.length).toBe(1); - expect(list.head.value).toBe('a'); - expect(list.tail.value).toBe('a'); - }); - }); - - describe('#byIndex', () => { - it('should add multiple nodes starting from given index', () => { - list.addMany(['a', 'b', 'c']).tail(); - - // "a" <-> "b" <-> "c" - - list.addMany(['x', 'y']).byIndex(1); - - // "a" <-> "x" <-> "y" <-> "b" <-> "c" - - list.addMany(['z']).byIndex(4); - - // "a" <-> "x" <-> "y" <-> "b" <-> "z" <-> "c" - - expect(list.length).toBe(6); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('x'); - expect(list.head.next.next.value).toBe('y'); - expect(list.head.next.next.next.value).toBe('b'); - expect(list.head.next.next.next.next.value).toBe('z'); - expect(list.head.next.next.next.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('z'); - expect(list.tail.previous.previous.value).toBe('b'); - expect(list.tail.previous.previous.previous.value).toBe('y'); - expect(list.tail.previous.previous.previous.previous.value).toBe('x'); - expect(list.tail.previous.previous.previous.previous.previous.value).toBe('a'); - }); - - it('should add multiple nodes to head if given index is zero', () => { - list.addMany(['a', 'b', 'c']).tail(); - - // "a" <-> "b" <-> "c" - - list.addMany(['x', 'y']).byIndex(0); - - // "x" <-> "y" <-> "a" <-> "b" <-> "c" - - expect(list.length).toBe(5); - expect(list.head.value).toBe('x'); - expect(list.head.next.value).toBe('y'); - expect(list.head.next.next.value).toBe('a'); - expect(list.head.next.next.next.value).toBe('b'); - expect(list.head.next.next.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - expect(list.tail.previous.previous.previous.value).toBe('y'); - expect(list.tail.previous.previous.previous.previous.value).toBe('x'); - }); - - it('should add multiple nodes to tail if given index more than size', () => { - list.addMany(['a', 'b', 'c']).tail(); - - // "a" <-> "b" <-> "c" - - list.addMany(['x', 'y']).byIndex(4); - - // "a" <-> "b" <-> "c" <-> "x" <-> "y" - - expect(list.length).toBe(5); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.head.next.next.next.value).toBe('x'); - expect(list.head.next.next.next.next.value).toBe('y'); - expect(list.tail.value).toBe('y'); - expect(list.tail.previous.value).toBe('x'); - expect(list.tail.previous.previous.value).toBe('c'); - expect(list.tail.previous.previous.previous.value).toBe('b'); - expect(list.tail.previous.previous.previous.previous.value).toBe('a'); - }); - - it('should be able to add multiple nodes at given index counting from right to left', () => { - list.addMany(['a', 'b', 'c']).tail(); - - // "a" <-> "b" <-> "c" - - list.addMany(['x', 'y']).byIndex(-1); - - // "a" <-> "b" <-> "x" <-> "y" <-> "c" - - expect(list.length).toBe(5); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('x'); - expect(list.head.next.next.next.value).toBe('y'); - expect(list.head.next.next.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('y'); - expect(list.tail.previous.previous.value).toBe('x'); - expect(list.tail.previous.previous.previous.value).toBe('b'); - expect(list.tail.previous.previous.previous.previous.value).toBe('a'); - }); - - it('should add a node to head if given index is less than minus size', () => { - list.addMany(['a', 'b', 'c']).tail(); - - // "a" <-> "b" <-> "c" - - list.addMany(['x', 'y']).byIndex(-4); - - // "x" <-> "y" <-> "a" <-> "b" <-> "c" - - expect(list.length).toBe(5); - expect(list.head.value).toBe('x'); - expect(list.head.next.value).toBe('y'); - expect(list.head.next.next.value).toBe('a'); - expect(list.head.next.next.next.value).toBe('b'); - expect(list.head.next.next.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - expect(list.tail.previous.previous.previous.value).toBe('y'); - expect(list.tail.previous.previous.previous.previous.value).toBe('x'); - }); - }); - }); - - describe('#find', () => { - it('should return the first node found based on given predicate', () => { - list.add('a').tail(); - list.add('x').tail(); - list.add('b').tail(); - list.add('x').tail(); - list.add('c').tail(); - - // "a" <-> "x" <-> "b" <-> "x" <-> "c" - - const found1 = list.find(node => node.previous && node.previous.value === 'a'); - - expect(found1.value).toBe('x'); - expect(found1.previous.value).toBe('a'); - expect(found1.next.value).toBe('b'); - - // "a" <-> "x" <-> "b" <-> "x" <-> "c" - - const found2 = list.find(node => node.next && node.next.value === 'c'); - - expect(found2.value).toBe('x'); - expect(found2.previous.value).toBe('b'); - expect(found2.next.value).toBe('c'); - }); - - it('should return undefined when list is empty', () => { - const found = list.find(node => node.value === 'x'); - - expect(found).toBeUndefined(); - }); - - it('should return undefined when predicate finds no match', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - const found = list.find(node => node.value === 'x'); - - expect(found).toBeUndefined(); - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - }); - - describe('#findIndex', () => { - it('should return the index of the first node found based on given predicate', () => { - list.add('a').tail(); - list.add('x').tail(); - list.add('b').tail(); - list.add('x').tail(); - list.add('c').tail(); - - // "a" <-> "x" <-> "b" <-> "x" <-> "c" - - const index1 = list.findIndex(node => node.previous && node.previous.value === 'a'); - - expect(index1).toBe(1); - - // "a" <-> "x" <-> "b" <-> "x" <-> "c" - - const index2 = list.findIndex(node => node.next && node.next.value === 'c'); - - expect(index2).toBe(3); - }); - - it('should return -1 when list is empty', () => { - const index = list.findIndex(node => node.value === 'x'); - - expect(index).toBe(-1); - }); - - it('should return -1 when no match is found', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - const index = list.findIndex(node => node.value === 'x'); - - expect(index).toBe(-1); - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - }); - - describe('#forEach', () => { - it('should call given function for each node of the list', () => { - const a = list.add('a').tail(); - const b = list.add('b').tail(); - const c = list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - const spy = jest.fn(); - list.forEach(spy); - - expect(spy.mock.calls).toEqual([ - [a, 0, list], - [b, 1, list], - [c, 2, list], - ]); - }); - - it('should not call given function when list is empty', () => { - const spy = jest.fn(); - list.forEach(spy); - - expect(spy).not.toHaveBeenCalled(); - }); - }); - - describe('#drop', () => { - describe('#head', () => { - it('should return undefined when there is no head', () => { - const dropped = list.drop().head(); - expect(dropped).toBeUndefined(); - }); - - it('should remove the node from the head of the list', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - list.drop().head(); - - // "b" <-> "c" - - expect(list.length).toBe(2); - expect(list.head.value).toBe('b'); - expect(list.head.next.value).toBe('c'); - expect(list.head.previous).toBeUndefined(); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.next).toBeUndefined(); - - // "b" <-> "c" - - list.drop().head(); - list.drop().head(); - - expect(list.length).toBe(0); - expect(list.head).toBeUndefined(); - expect(list.tail).toBeUndefined(); - }); - }); - - describe('#tail', () => { - it('should return undefined when there is no tail', () => { - const dropped = list.drop().tail(); - expect(dropped).toBeUndefined(); - }); - - it('should remove the node from the tail of the list', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - list.drop().tail(); - - // "a" <-> "b" - - expect(list.length).toBe(2); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.previous).toBeUndefined(); - expect(list.tail.value).toBe('b'); - expect(list.tail.previous.value).toBe('a'); - expect(list.tail.next).toBeUndefined(); - - // "a" <-> "b" - - list.drop().tail(); - list.drop().tail(); - - expect(list.length).toBe(0); - expect(list.head).toBeUndefined(); - expect(list.tail).toBeUndefined(); - }); - }); - - describe('#byIndex', () => { - it('should remove the node at given index', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - list.add('d').tail(); - list.add('e').tail(); - - // "a" <-> "b" <-> "c" <-> "d" <-> "e" - - list.drop().byIndex(1); - - // "a" <-> "c" <-> "d" <-> "e" - - list.drop().byIndex(-2); - - // "a" <-> "c" <-> "e" - - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('c'); - expect(list.head.next.next.value).toBe('e'); - expect(list.tail.value).toBe('e'); - expect(list.tail.previous.value).toBe('c'); - expect(list.tail.previous.previous.value).toBe('a'); - - // "a" <-> "c" <-> "e" - - list.drop().byIndex(2); - list.drop().byIndex(1); - list.drop().byIndex(0); - - expect(list.length).toBe(0); - expect(list.head).toBeUndefined(); - expect(list.tail).toBeUndefined(); - }); - - it('should return undefined when list is empty', () => { - const dropped = list.drop().byIndex(0); - expect(dropped).toBeUndefined(); - }); - - it('should return undefined when given index does not exist', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - const dropped1 = list.drop().byIndex(4); - - // "a" <-> "b" <-> "c" - - expect(dropped1).toBeUndefined(); - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - - // "a" <-> "b" <-> "c" - - const dropped2 = list.drop().byIndex(-4); - - // "a" <-> "b" <-> "c" - - expect(dropped2).toBeUndefined(); - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - }); - - describe('#byValue', () => { - it('should remove the first node with given value', () => { - list.add('a').tail(); - list.add('x').tail(); - list.add('b').tail(); - list.add('x').tail(); - list.add('c').tail(); - - // "a" <-> "x" <-> "b" <-> "x" <-> "c" - - list.drop().byValue('x'); - - // "a" <-> "b" <-> "x" <-> "c" - - expect(list.length).toBe(4); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('x'); - expect(list.head.next.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('x'); - expect(list.tail.previous.previous.value).toBe('b'); - expect(list.tail.previous.previous.previous.value).toBe('a'); - - // "a" <-> "b" <-> "x" <-> "c" - - list.drop().byValue('x'); - - // "a" <-> "b" <-> "c" - - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - - it('should be able to receive a custom compareFn', () => { - list.add({ x: 1 }).tail(); - list.add({ x: 2 }).tail(); - list.add({ x: 3 }).tail(); - - // {"x":1} <-> {"x":2} <-> {"x":3} - - list.drop().byValue({ x: 2 }, (v1: X, v2: X) => v1.x === v2.x); - - // {"x":1} <-> {"x":3} - - expect(list.length).toBe(2); - expect(list.head.value.x).toBe(1); - expect(list.head.next.value.x).toBe(3); - expect(list.tail.value.x).toBe(3); - expect(list.tail.previous.value.x).toBe(1); - }); - - it('should return undefined when list is empty', () => { - const dropped = list.drop().byValue('x'); - expect(dropped).toBeUndefined(); - }); - - it('should return undefined when given value is not found', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - const node = list.drop().byValue('x'); - - // "a" <-> "b" <-> "c" - - expect(node).toBeUndefined(); - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - }); - - describe('#byValueAll', () => { - it('should remove all nodes with given value', () => { - list.add('a').tail(); - list.add('x').tail(); - list.add('b').tail(); - list.add('x').tail(); - list.add('c').tail(); - - // "a" <-> "x" <-> "b" <-> "x" <-> "c" - - const dropped = list.drop().byValueAll('x'); - - // "a" <-> "b" <-> "c" - - expect(dropped.length).toBe(2); - expect(dropped[0].value).toEqual('x'); - expect(dropped[0].previous.value).toEqual('a'); - expect(dropped[0].next.value).toEqual('b'); - expect(dropped[1].value).toEqual('x'); - expect(dropped[1].previous.value).toEqual('b'); - expect(dropped[1].next.value).toEqual('c'); - - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - - it('should be able to receive a custom compareFn', () => { - list.add({ x: 1 }).tail(); - list.add({ x: 0 }).tail(); - list.add({ x: 2 }).tail(); - list.add({ x: 0 }).tail(); - list.add({ x: 3 }).tail(); - - // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":0} <-> {"x":3} - - const dropped = list.drop().byValueAll({ x: 0 }, (v1: X, v2: X) => v1.x === v2.x); - - // {"x":1} <-> {"x":2} <-> {"x":3} - - expect(dropped.length).toBe(2); - expect(dropped[0].value.x).toEqual(0); - expect(dropped[0].previous.value.x).toEqual(1); - expect(dropped[0].next.value.x).toEqual(2); - expect(dropped[1].value.x).toEqual(0); - expect(dropped[1].previous.value.x).toEqual(2); - expect(dropped[1].next.value.x).toEqual(3); - - expect(list.length).toBe(3); - expect(list.head.value.x).toBe(1); - expect(list.head.next.value.x).toBe(2); - expect(list.head.next.next.value.x).toBe(3); - expect(list.tail.value.x).toBe(3); - expect(list.tail.previous.value.x).toBe(2); - expect(list.tail.previous.previous.value.x).toBe(1); - }); - - it('should return empty array when list is empty', () => { - const dropped = list.drop().byValueAll('x'); - expect(dropped).toEqual([]); - }); - - it('should return empty array when given value is not found', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - const dropped = list.drop().byValueAll('x'); - - // "a" <-> "b" <-> "c" - - expect(dropped).toEqual([]); - - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - }); - }); - - describe('#dropMany', () => { - describe('#head', () => { - it('should return empty array when there is no head', () => { - const dropped = list.dropMany(1).head(); - expect(dropped).toEqual([]); - }); - - it('should remove multiple nodes from the head of the list', () => { - list.addMany(['a', 'b', 'c', 'd', 'e']).tail(); - - // "a" <-> "b" <-> "c" <-> "d" <-> "e" - - list.dropMany(3).head(); - - // "d" <-> "e" - - expect(list.length).toBe(2); - expect(list.head.value).toBe('d'); - expect(list.head.next.value).toBe('e'); - expect(list.head.previous).toBeUndefined(); - expect(list.tail.value).toBe('e'); - expect(list.tail.previous.value).toBe('d'); - expect(list.tail.next).toBeUndefined(); - }); - - it('should not change the list when count is less than or equal to zero', () => { - list.add('a').tail(); - - // "a" - - list.dropMany(0).head(); - - // "a" - - list.dropMany(-1).head(); - - // "a" - - expect(list.length).toBe(1); - expect(list.head.value).toBe('a'); - expect(list.tail.value).toBe('a'); - }); - }); - - describe('#tail', () => { - it('should return empty array when there is no tail', () => { - const dropped = list.dropMany(1).tail(); - expect(dropped).toEqual([]); - }); - - it('should remove multiple nodes from the tail of the list', () => { - list.addMany(['a', 'b', 'c', 'd', 'e']).tail(); - - // "a" <-> "b" <-> "c" <-> "d" <-> "e" - - list.dropMany(3).tail(); - - // "a" <-> "b" - - expect(list.length).toBe(2); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.previous).toBeUndefined(); - expect(list.tail.value).toBe('b'); - expect(list.tail.previous.value).toBe('a'); - expect(list.tail.next).toBeUndefined(); - }); - - it('should not change the list when count is less than or equal to zero', () => { - list.add('a').tail(); - - // "a" - - list.dropMany(0).tail(); - - // "a" - - list.dropMany(-1).tail(); - - // "a" - - expect(list.length).toBe(1); - expect(list.head.value).toBe('a'); - expect(list.tail.value).toBe('a'); - }); - }); - - describe('#byIndex', () => { - it('should remove multiple nodes starting from given index', () => { - list.addMany(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']).tail(); - - // "a" <-> "b" <-> "c" <-> "d" <-> "e" <-> "f" <-> "g" <-> "h" - - list.dropMany(2).byIndex(1); - - // "a" <-> "d" <-> "e" <-> "f" <-> "g" <-> "h" - - list.dropMany(2).byIndex(-3); - - // "a" <-> "d" <-> "e" <-> "h" - - expect(list.length).toBe(4); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('d'); - expect(list.head.next.next.value).toBe('e'); - expect(list.head.next.next.next.value).toBe('h'); - expect(list.tail.value).toBe('h'); - expect(list.tail.previous.value).toBe('e'); - expect(list.tail.previous.previous.value).toBe('d'); - expect(list.tail.previous.previous.previous.value).toBe('a'); - - list.dropMany(4).byIndex(0); - - expect(list.length).toBe(0); - expect(list.head).toBeUndefined(); - expect(list.tail).toBeUndefined(); - }); - - it('should return empty array when list is empty', () => { - const dropped = list.dropMany(1).byIndex(0); - expect(dropped).toEqual([]); - }); - - it('should return empty array when given index does not exist', () => { - list.addMany(['a', 'b', 'c']).tail(); - - // "a" <-> "b" <-> "c" - - const dropped = list.dropMany(3).byIndex(4); - - // "a" <-> "b" <-> "c" - - expect(dropped).toEqual([]); - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - - it('should remove from start when given index is less than minus size', () => { - list.addMany(['a', 'b', 'c', 'd', 'e']).tail(); - - // "a" <-> "b" <-> "c" <-> "d" <-> "e" - - list.dropMany(2).byIndex(-9); - - // "c" <-> "d" <-> "e" - - expect(list.length).toBe(3); - expect(list.head.value).toBe('c'); - expect(list.head.next.value).toBe('d'); - expect(list.head.next.next.value).toBe('e'); - expect(list.tail.value).toBe('e'); - expect(list.tail.previous.value).toBe('d'); - expect(list.tail.previous.previous.value).toBe('c'); - }); - - it('should remove from end when given index + count is larger than or equal to size', () => { - list.addMany(['a', 'b', 'c', 'd', 'e']).tail(); - - // "a" <-> "b" <-> "c" <-> "d" <-> "e" - - list.dropMany(2).byIndex(3); - - // "a" <-> "b" <-> "c" - - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - - // "a" <-> "b" <-> "c" - - list.dropMany(9).byIndex(1); - - // "a" - - expect(list.length).toBe(1); - expect(list.head.value).toBe('a'); - expect(list.tail.value).toBe('a'); - }); - - it('should not change the list when count is less than or equal to zero', () => { - list.add('a').tail(); - - // "a" - - list.dropMany(0).byIndex(0); - - // "a" - - list.dropMany(-1).byIndex(0); - - // "a" - - expect(list.length).toBe(1); - expect(list.head.value).toBe('a'); - expect(list.tail.value).toBe('a'); - }); - }); - }); - - describe('#get', () => { - it('should return node at given index', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - const node = list.get(1); - - expect(node.value).toBe('b'); - expect(node.previous.value).toBe('a'); - expect(node.next.value).toBe('c'); - }); - - it('should return undefined when list is empty', () => { - const node = list.get(1); - - expect(node).toBeUndefined(); - }); - - it('should return undefined when predicate finds no match', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - const node1 = list.get(4); - - expect(node1).toBeUndefined(); - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - - // "a" <-> "b" <-> "c" - - const node2 = list.get(-1); - - expect(node2).toBeUndefined(); - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - }); - - describe('#indexOf', () => { - it('should return the index of the first node found based on given value', () => { - list.add('a').tail(); - list.add('x').tail(); - list.add('b').tail(); - list.add('x').tail(); - list.add('c').tail(); - - // "a" <-> "x" <-> "b" <-> "x" <-> "c" - - const index1 = list.indexOf('x'); - - expect(index1).toBe(1); - - // "a" <-> "x" <-> "b" <-> "x" <-> "c" - - let timesFound = 0; - const index2 = list.indexOf('x', (v1: string, v2: string) => { - if (timesFound > 1) return false; - - timesFound += Number(v1 === v2); - - return timesFound > 1; - }); - - expect(index2).toBe(3); - }); - - it('should be able to receive a custom compareFn', () => { - list.add({ x: 1 }).tail(); - list.add({ x: 2 }).tail(); - list.add({ x: 3 }).tail(); - - // {"x":1} <-> {"x":2} <-> {"x":3} - - const index = list.indexOf({ x: 2 }, (v1: X, v2: X) => v1.x === v2.x); - - expect(index).toBe(1); - }); - - it('should return -1 when list is empty', () => { - const index = list.indexOf('x'); - - expect(index).toBe(-1); - }); - - it('should return -1 when no match is found', () => { - list.add('a').tail(); - list.add('b').tail(); - list.add('c').tail(); - - // "a" <-> "b" <-> "c" - - const index = list.indexOf('x'); - - expect(index).toBe(-1); - expect(list.length).toBe(3); - expect(list.head.value).toBe('a'); - expect(list.head.next.value).toBe('b'); - expect(list.head.next.next.value).toBe('c'); - expect(list.tail.value).toBe('c'); - expect(list.tail.previous.value).toBe('b'); - expect(list.tail.previous.previous.value).toBe('a'); - }); - }); - - describe('#toArray', () => { - it('should return array representation', () => { - list.addTail('a'); - list.addTail(2); - list.addTail('c'); - list.addTail({ k: 4, v: 'd' }); - - // "a" <-> 2 <-> "c" <-> {"k":4,"v":"d"} - - const arr = list.toArray(); - expect(arr).toEqual(['a', 2, 'c', { k: 4, v: 'd' }]); - }); - - it('should return empty array when list is empty', () => { - const arr = list.toArray(); - expect(arr).toEqual([]); - }); - }); - - describe('#toNodeArray', () => { - it('should return array of nodes', () => { - list.addTail('a'); - list.addTail(2); - list.addTail('c'); - list.addTail({ k: 4, v: 'd' }); - - // "a" <-> 2 <-> "c" <-> {"k":4,"v":"d"} - - const arr = list.toNodeArray(); - - expect(arr.every(node => node instanceof ListNode)).toBe(true); - expect(arr.map(node => node.value)).toEqual(['a', 2, 'c', { k: 4, v: 'd' }]); - }); - - it('should return empty array when list is empty', () => { - const arr = list.toNodeArray(); - expect(arr).toEqual([]); - }); - }); - - describe('#toString', () => { - it('should return string representation', () => { - list.addTail('a'); - list.addTail(2); - list.addTail('c'); - list.addTail({ k: 4, v: 'd' }); - - // "a" <-> 2 <-> "c" <-> {"k":4,"v":"d"} - - const str = list.toString(); - expect(str).toBe('"a" <-> 2 <-> "c" <-> {"k":4,"v":"d"}'); - }); - - it('should return empty string when list is empty', () => { - const str = list.toString(); - expect(str).toBe(''); - }); - - it('should be coercible', () => { - list.addMany(['a', 'b', 'c']).tail(); - - // "a" <-> "b" <-> "c" - - expect('' + list).toBe('"a" <-> "b" <-> "c"'); - }); - - it('should be able to receive a custom mapperFn', () => { - list.addMany([{ x: 1 }, { x: 2 }, { x: 3 }]).tail(); - - // {"x":1} <-> {"x":2} <-> {"x":3} - - const str = list.toString(value => value.x); - expect(str).toBe('1 <-> 2 <-> 3'); - }); - }); - - it('should be iterable', () => { - list.addTail('a'); - list.addTail('b'); - list.addTail('c'); - - // "a" <-> "b" <-> "c" - - const arr = []; - - for (const value of list) { - arr.push(value); - } - - expect(arr).toEqual(['a', 'b', 'c']); - }); -}); - -interface X { - [k: string]: any; -} diff --git a/npm/ng-packs/packages/core/src/lib/utils/index.ts b/npm/ng-packs/packages/core/src/lib/utils/index.ts index a112d9acd8..0043152ada 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/index.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/index.ts @@ -1,6 +1,5 @@ export * from './common-utils'; export * from './generator-utils'; export * from './initial-utils'; -export * from './linked-list'; export * from './route-utils'; export * from './rxjs-utils'; diff --git a/npm/ng-packs/packages/core/src/lib/utils/linked-list.ts b/npm/ng-packs/packages/core/src/lib/utils/linked-list.ts deleted file mode 100644 index 9bd3e21941..0000000000 --- a/npm/ng-packs/packages/core/src/lib/utils/linked-list.ts +++ /dev/null @@ -1,396 +0,0 @@ -/* tslint:disable:no-non-null-assertion */ - -import compare from 'just-compare'; - -export class ListNode { - readonly value: T; - next: ListNode | undefined; - previous: ListNode | undefined; - - constructor(value: T) { - this.value = value; - } -} - -export class LinkedList { - private first: ListNode | undefined; - private last: ListNode | undefined; - private size = 0; - - get head(): ListNode | undefined { - return this.first; - } - get tail(): ListNode | undefined { - return this.last; - } - get length(): number { - return this.size; - } - - private attach( - value: T, - previousNode: ListNode | undefined, - nextNode: ListNode | undefined, - ): ListNode { - if (!previousNode) return this.addHead(value); - - if (!nextNode) return this.addTail(value); - - const node = new ListNode(value); - node.previous = previousNode; - previousNode.next = node; - node.next = nextNode; - nextNode.previous = node; - - this.size++; - - return node; - } - - private attachMany( - values: T[], - previousNode: ListNode | undefined, - nextNode: ListNode | undefined, - ): ListNode[] { - if (!values.length) return []; - - if (!previousNode) return this.addManyHead(values); - - if (!nextNode) return this.addManyTail(values); - - const list = new LinkedList(); - list.addManyTail(values); - list.first!.previous = previousNode; - previousNode.next = list.first; - list.last!.next = nextNode; - nextNode.previous = list.last; - - this.size += values.length; - - return list.toNodeArray(); - } - - private detach(node: ListNode) { - if (!node.previous) return this.dropHead(); - - if (!node.next) return this.dropTail(); - - node.previous.next = node.next; - node.next.previous = node.previous; - - this.size--; - - return node; - } - - add(value: T) { - return { - after: (previousValue: T, compareFn: ListComparisonFn = compare) => - this.addAfter(value, previousValue, compareFn), - before: (nextValue: T, compareFn: ListComparisonFn = compare) => - this.addBefore(value, nextValue, compareFn), - byIndex: (position: number) => this.addByIndex(value, position), - head: () => this.addHead(value), - tail: () => this.addTail(value), - }; - } - - addMany(values: T[]) { - return { - after: (previousValue: T, compareFn: ListComparisonFn = compare) => - this.addManyAfter(values, previousValue, compareFn), - before: (nextValue: T, compareFn: ListComparisonFn = compare) => - this.addManyBefore(values, nextValue, compareFn), - byIndex: (position: number) => this.addManyByIndex(values, position), - head: () => this.addManyHead(values), - tail: () => this.addManyTail(values), - }; - } - - addAfter(value: T, previousValue: T, compareFn: ListComparisonFn = compare): ListNode { - const previous = this.find(node => compareFn(node.value, previousValue)); - - return previous ? this.attach(value, previous, previous.next) : this.addTail(value); - } - - addBefore(value: T, nextValue: T, compareFn: ListComparisonFn = compare): ListNode { - const next = this.find(node => compareFn(node.value, nextValue)); - - return next ? this.attach(value, next.previous, next) : this.addHead(value); - } - - addByIndex(value: T, position: number): ListNode { - if (position < 0) position += this.size; - else if (position >= this.size) return this.addTail(value); - - if (position <= 0) return this.addHead(value); - - const next = this.get(position)!; - - return this.attach(value, next.previous, next); - } - - addHead(value: T): ListNode { - const node = new ListNode(value); - - node.next = this.first; - - if (this.first) this.first.previous = node; - else this.last = node; - - this.first = node; - this.size++; - - return node; - } - - addTail(value: T): ListNode { - const node = new ListNode(value); - - if (this.first) { - node.previous = this.last; - this.last!.next = node; - this.last = node; - } else { - this.first = node; - this.last = node; - } - - this.size++; - - return node; - } - - addManyAfter( - values: T[], - previousValue: T, - compareFn: ListComparisonFn = compare, - ): ListNode[] { - const previous = this.find(node => compareFn(node.value, previousValue)); - - return previous ? this.attachMany(values, previous, previous.next) : this.addManyTail(values); - } - - addManyBefore( - values: T[], - nextValue: T, - compareFn: ListComparisonFn = compare, - ): ListNode[] { - const next = this.find(node => compareFn(node.value, nextValue)); - - return next ? this.attachMany(values, next.previous, next) : this.addManyHead(values); - } - - addManyByIndex(values: T[], position: number): ListNode[] { - if (position < 0) position += this.size; - - if (position <= 0) return this.addManyHead(values); - - if (position >= this.size) return this.addManyTail(values); - - const next = this.get(position)!; - - return this.attachMany(values, next.previous, next); - } - - addManyHead(values: T[]): ListNode[] { - return values.reduceRight[]>((nodes, value) => { - nodes.unshift(this.addHead(value)); - return nodes; - }, []); - } - - addManyTail(values: T[]): ListNode[] { - return values.map(value => this.addTail(value)); - } - - drop() { - return { - byIndex: (position: number) => this.dropByIndex(position), - byValue: (value: T, compareFn: ListComparisonFn = compare) => - this.dropByValue(value, compareFn), - byValueAll: (value: T, compareFn: ListComparisonFn = compare) => - this.dropByValueAll(value, compareFn), - head: () => this.dropHead(), - tail: () => this.dropTail(), - }; - } - - dropMany(count: number) { - return { - byIndex: (position: number) => this.dropManyByIndex(count, position), - head: () => this.dropManyHead(count), - tail: () => this.dropManyTail(count), - }; - } - - dropByIndex(position: number): ListNode | undefined { - if (position < 0) position += this.size; - - const current = this.get(position); - - return current ? this.detach(current) : undefined; - } - - dropByValue(value: T, compareFn: ListComparisonFn = compare): ListNode | undefined { - const position = this.findIndex(node => compareFn(node.value, value)); - - return position < 0 ? undefined : this.dropByIndex(position); - } - - dropByValueAll(value: T, compareFn: ListComparisonFn = compare): ListNode[] { - const dropped: ListNode[] = []; - - for (let current = this.first, position = 0; current; position++, current = current.next) { - if (compareFn(current.value, value)) { - dropped.push(this.dropByIndex(position - dropped.length)!); - } - } - - return dropped; - } - - dropHead(): ListNode | undefined { - const head = this.first; - - if (head) { - this.first = head.next; - - if (this.first) this.first.previous = undefined; - else this.last = undefined; - - this.size--; - - return head; - } - - return undefined; - } - - dropTail(): ListNode | undefined { - const tail = this.last; - - if (tail) { - this.last = tail.previous; - - if (this.last) this.last.next = undefined; - else this.first = undefined; - - this.size--; - - return tail; - } - - return undefined; - } - - dropManyByIndex(count: number, position: number): ListNode[] { - if (count <= 0) return []; - - if (position < 0) position = Math.max(position + this.size, 0); - else if (position >= this.size) return []; - - count = Math.min(count, this.size - position); - - const dropped: ListNode[] = []; - - while (count--) { - const current = this.get(position); - dropped.push(this.detach(current!)!); - } - - return dropped; - } - - dropManyHead(count: Exclude): ListNode[] { - if (count <= 0) return []; - - count = Math.min(count, this.size); - - const dropped: ListNode[] = []; - - while (count--) dropped.unshift(this.dropHead()!); - - return dropped; - } - - dropManyTail(count: Exclude): ListNode[] { - if (count <= 0) return []; - - count = Math.min(count, this.size); - - const dropped: ListNode[] = []; - - while (count--) dropped.push(this.dropTail()!); - - return dropped; - } - - find(predicate: ListIteratorFn): ListNode | undefined { - for (let current = this.first, position = 0; current; position++, current = current.next) { - if (predicate(current, position, this)) return current; - } - - return undefined; - } - - findIndex(predicate: ListIteratorFn): number { - for (let current = this.first, position = 0; current; position++, current = current.next) { - if (predicate(current, position, this)) return position; - } - - return -1; - } - - forEach(callback: ListIteratorFn) { - for (let node = this.first, position = 0; node; position++, node = node.next) { - callback(node, position, this); - } - } - - get(position: number): ListNode | undefined { - return this.find((_, index) => position === index); - } - - indexOf(value: T, compareFn: ListComparisonFn = compare): number { - return this.findIndex(node => compareFn(node.value, value)); - } - - toArray(): T[] { - const array = new Array(this.size); - - this.forEach((node, index) => (array[index!] = node.value)); - - return array; - } - - toNodeArray(): ListNode[] { - const array = new Array(this.size); - - this.forEach((node, index) => (array[index!] = node)); - - return array; - } - - toString(mapperFn: ListMapperFn = JSON.stringify): string { - return this.toArray() - .map(value => mapperFn(value)) - .join(' <-> '); - } - - *[Symbol.iterator]() { - for (let node = this.first, position = 0; node; position++, node = node.next) { - yield node.value; - } - } -} - -export type ListMapperFn = (value: T) => any; - -export type ListComparisonFn = (value1: T, value2: T) => boolean; - -export type ListIteratorFn = ( - node: ListNode, - index?: number, - list?: LinkedList, -) => R; From 678e930e342e434663c1e23d6b394c9fbadb0ce4 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 31 Mar 2020 11:52:38 +0300 Subject: [PATCH 067/182] build: add strictBindCallApply to tsconfig.json --- npm/packs/utils/tsconfig.json | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/npm/packs/utils/tsconfig.json b/npm/packs/utils/tsconfig.json index b9b01ccec0..417625b0b0 100644 --- a/npm/packs/utils/tsconfig.json +++ b/npm/packs/utils/tsconfig.json @@ -11,19 +11,14 @@ "moduleResolution": "node", "importHelpers": true, "target": "es2015", - "lib": [ - "es2018", - "dom" - ], + "strictBindCallApply": true, + "lib": ["es2018", "dom"], "paths": { - "utils": [ - "dist/utils/utils", - "dist/utils" - ] + "utils": ["dist/utils/utils", "dist/utils"] } }, "angularCompilerOptions": { "fullTemplateTypeCheck": true, "strictInjectionParameters": true } -} \ No newline at end of file +} From 9a4804e56ee42a01260dde622aad2dd431ce8f4f Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 31 Mar 2020 11:53:33 +0300 Subject: [PATCH 068/182] feat: allow comparison with value of different type --- .../projects/utils/src/lib/linked-list.ts | 55 ++++++++++++------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/npm/packs/utils/projects/utils/src/lib/linked-list.ts b/npm/packs/utils/projects/utils/src/lib/linked-list.ts index c0f014121a..f0b50836ce 100644 --- a/npm/packs/utils/projects/utils/src/lib/linked-list.ts +++ b/npm/packs/utils/projects/utils/src/lib/linked-list.ts @@ -85,10 +85,10 @@ export class LinkedList { add(value: T) { return { - after: (previousValue: T, compareFn: ListComparisonFn = compare) => - this.addAfter(value, previousValue, compareFn), - before: (nextValue: T, compareFn: ListComparisonFn = compare) => - this.addBefore(value, nextValue, compareFn), + after: (...params: [T] | [any, ListComparisonFn]) => + this.addAfter.call(this, value, ...params), + before: (...params: [T] | [any, ListComparisonFn]) => + this.addBefore.call(this, value, ...params), byIndex: (position: number) => this.addByIndex(value, position), head: () => this.addHead(value), tail: () => this.addTail(value), @@ -97,23 +97,27 @@ export class LinkedList { addMany(values: T[]) { return { - after: (previousValue: T, compareFn: ListComparisonFn = compare) => - this.addManyAfter(values, previousValue, compareFn), - before: (nextValue: T, compareFn: ListComparisonFn = compare) => - this.addManyBefore(values, nextValue, compareFn), + after: (...params: [T] | [any, ListComparisonFn]) => + this.addManyAfter.call(this, values, ...params), + before: (...params: [T] | [any, ListComparisonFn]) => + this.addManyBefore.call(this, values, ...params), byIndex: (position: number) => this.addManyByIndex(values, position), head: () => this.addManyHead(values), tail: () => this.addManyTail(values), }; } - addAfter(value: T, previousValue: T, compareFn: ListComparisonFn = compare): ListNode { + addAfter(value: T, nextValue: T): ListNode; + addAfter(value: T, previousValue: any, compareFn: ListComparisonFn): ListNode; + addAfter(value: T, previousValue: any, compareFn: ListComparisonFn = compare): ListNode { const previous = this.find(node => compareFn(node.value, previousValue)); return previous ? this.attach(value, previous, previous.next) : this.addTail(value); } - addBefore(value: T, nextValue: T, compareFn: ListComparisonFn = compare): ListNode { + addBefore(value: T, nextValue: T): ListNode; + addBefore(value: T, nextValue: any, compareFn: ListComparisonFn): ListNode; + addBefore(value: T, nextValue: any, compareFn: ListComparisonFn = compare): ListNode { const next = this.find(node => compareFn(node.value, nextValue)); return next ? this.attach(value, next.previous, next) : this.addHead(value); @@ -161,9 +165,11 @@ export class LinkedList { return node; } + addManyAfter(values: T[], previousValue: T): ListNode[]; + addManyAfter(values: T[], previousValue: any, compareFn: ListComparisonFn): ListNode[]; addManyAfter( values: T[], - previousValue: T, + previousValue: any, compareFn: ListComparisonFn = compare, ): ListNode[] { const previous = this.find(node => compareFn(node.value, previousValue)); @@ -171,9 +177,11 @@ export class LinkedList { return previous ? this.attachMany(values, previous, previous.next) : this.addManyTail(values); } + addManyBefore(values: T[], previousValue: T): ListNode[]; + addManyBefore(values: T[], nextValue: any, compareFn: ListComparisonFn): ListNode[]; addManyBefore( values: T[], - nextValue: T, + nextValue: any, compareFn: ListComparisonFn = compare, ): ListNode[] { const next = this.find(node => compareFn(node.value, nextValue)); @@ -207,10 +215,10 @@ export class LinkedList { drop() { return { byIndex: (position: number) => this.dropByIndex(position), - byValue: (value: T, compareFn: ListComparisonFn = compare) => - this.dropByValue(value, compareFn), - byValueAll: (value: T, compareFn: ListComparisonFn = compare) => - this.dropByValueAll(value, compareFn), + byValue: (...params: [T] | [any, ListComparisonFn]) => + this.dropByValue.apply(this, params), + byValueAll: (...params: [T] | [any, ListComparisonFn]) => + this.dropByValueAll.apply(this, params), head: () => this.dropHead(), tail: () => this.dropTail(), }; @@ -232,13 +240,17 @@ export class LinkedList { return current ? this.detach(current) : undefined; } - dropByValue(value: T, compareFn: ListComparisonFn = compare): ListNode | undefined { + dropByValue(value: T): ListNode | undefined; + dropByValue(value: any, compareFn: ListComparisonFn): ListNode | undefined; + dropByValue(value: any, compareFn: ListComparisonFn = compare): ListNode | undefined { const position = this.findIndex(node => compareFn(node.value, value)); return position < 0 ? undefined : this.dropByIndex(position); } - dropByValueAll(value: T, compareFn: ListComparisonFn = compare): ListNode[] { + dropByValueAll(value: T): ListNode[]; + dropByValueAll(value: any, compareFn: ListComparisonFn): ListNode[]; + dropByValueAll(value: any, compareFn: ListComparisonFn = compare): ListNode[] { const dropped: ListNode[] = []; for (let current = this.first, position = 0; current; position++, current = current.next) { @@ -352,7 +364,9 @@ export class LinkedList { return this.find((_, index) => position === index); } - indexOf(value: T, compareFn: ListComparisonFn = compare): number { + indexOf(value: T): number; + indexOf(value: any, compareFn: ListComparisonFn): number; + indexOf(value: any, compareFn: ListComparisonFn = compare): number { return this.findIndex(node => compareFn(node.value, value)); } @@ -378,6 +392,7 @@ export class LinkedList { .join(' <-> '); } + // Cannot use Generator type because of ng-packagr *[Symbol.iterator](): any { for (let node = this.first, position = 0; node; position++, node = node.next) { yield node.value; @@ -387,7 +402,7 @@ export class LinkedList { export type ListMapperFn = (value: T) => any; -export type ListComparisonFn = (value1: T, value2: T) => boolean; +export type ListComparisonFn = (value1: T, value2: any) => boolean; export type ListIteratorFn = ( node: ListNode, From f2b7eacbec04948ebce191954bd02fb48d312d7e Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 31 Mar 2020 12:22:53 +0300 Subject: [PATCH 069/182] chore: bump utils version --- npm/packs/utils/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index f666982f47..1a2aec8fa4 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "2.3.0", + "version": "2.3.1", "scripts": { "prepublish": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", From 9698e3f7dc11d588143fe5c8f102e108e5983856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Halil=20=C4=B0brahim=20Kalkan?= Date: Tue, 31 Mar 2020 14:47:16 +0300 Subject: [PATCH 070/182] Refactor MappingPropertyDefinitionChecks --- .../AbpAutoMapperExtensibleDtoExtensions.cs | 2 +- ...xtraPropertiesObjectExtendingExtensions.cs | 135 ++++++++++++------ .../ObjectExtensionPropertyInfo.cs | 14 ++ .../AbpObjectExtendingTestModule.cs | 1 + ...opertiesObjectExtendingExtensions_Tests.cs | 4 +- 5 files changed, 107 insertions(+), 49 deletions(-) diff --git a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs b/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs index e78e9628c1..664e35e9b0 100644 --- a/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs +++ b/framework/src/Volo.Abp.AutoMapper/AutoMapper/AbpAutoMapperExtensibleDtoExtensions.cs @@ -8,7 +8,7 @@ namespace AutoMapper { public static IMappingExpression MapExtraProperties( this IMappingExpression mappingExpression, - MappingPropertyDefinitionChecks definitionChecks = MappingPropertyDefinitionChecks.Both) + MappingPropertyDefinitionChecks? definitionChecks = null) where TDestination : IHasExtraProperties where TSource : IHasExtraProperties { diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions.cs index 25156f298c..6b687fcf81 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using System.Diagnostics; using JetBrains.Annotations; using Volo.Abp.Data; @@ -25,7 +24,7 @@ namespace Volo.Abp.ObjectExtending public static void MapExtraPropertiesTo( [NotNull] this TSource source, [NotNull] TDestination destination, - MappingPropertyDefinitionChecks definitionChecks = MappingPropertyDefinitionChecks.Both) + MappingPropertyDefinitionChecks? definitionChecks = null) where TSource : IHasExtraProperties where TDestination : IHasExtraProperties { @@ -58,7 +57,7 @@ namespace Volo.Abp.ObjectExtending public static void MapExtraPropertiesTo( [NotNull] Dictionary sourceDictionary, [NotNull] Dictionary destinationDictionary, - MappingPropertyDefinitionChecks definitionChecks = MappingPropertyDefinitionChecks.Both) + MappingPropertyDefinitionChecks? definitionChecks = null) where TSource : IHasExtraProperties where TDestination : IHasExtraProperties { @@ -90,7 +89,7 @@ namespace Volo.Abp.ObjectExtending [NotNull] Type destinationType, [NotNull] Dictionary sourceDictionary, [NotNull] Dictionary destinationDictionary, - MappingPropertyDefinitionChecks definitionChecks = MappingPropertyDefinitionChecks.Both) + MappingPropertyDefinitionChecks? definitionChecks = null) { Check.AssignableTo(sourceType, nameof(sourceType)); Check.AssignableTo(destinationType, nameof(destinationType)); @@ -98,78 +97,120 @@ namespace Volo.Abp.ObjectExtending Check.NotNull(destinationDictionary, nameof(destinationDictionary)); var sourceObjectExtension = ObjectExtensionManager.Instance.GetOrNull(sourceType); - if (definitionChecks.HasFlag(MappingPropertyDefinitionChecks.Source) && - sourceObjectExtension == null) - { - return; - } - var destinationObjectExtension = ObjectExtensionManager.Instance.GetOrNull(destinationType); - if (definitionChecks.HasFlag(MappingPropertyDefinitionChecks.Destination) && - destinationObjectExtension == null) - { - return; - } - if (definitionChecks == MappingPropertyDefinitionChecks.None) + foreach (var keyValue in sourceDictionary) { - foreach (var keyValue in sourceDictionary) + if (CanMapProperty( + keyValue.Key, + sourceObjectExtension, + destinationObjectExtension, + definitionChecks)) { destinationDictionary[keyValue.Key] = keyValue.Value; } } - else if (definitionChecks == MappingPropertyDefinitionChecks.Source) - { - Debug.Assert(sourceObjectExtension != null, nameof(sourceObjectExtension) + " != null"); + } + + //TODO: Move these methods to a class like ObjectExtensionHelper + + public static bool CanMapProperty( + [NotNull] string propertyName, + MappingPropertyDefinitionChecks? definitionChecks = null) + { + return CanMapProperty( + typeof(TSource), + typeof(TDestination), + propertyName, + definitionChecks + ); + } + + public static bool CanMapProperty( + [NotNull] Type sourceType, + [NotNull] Type destinationType, + [NotNull] string propertyName, + MappingPropertyDefinitionChecks? definitionChecks = null) + { + Check.AssignableTo(sourceType, nameof(sourceType)); + Check.AssignableTo(destinationType, nameof(destinationType)); + Check.NotNull(propertyName, nameof(propertyName)); + + var sourceObjectExtension = ObjectExtensionManager.Instance.GetOrNull(sourceType); + var destinationObjectExtension = ObjectExtensionManager.Instance.GetOrNull(destinationType); + + return CanMapProperty( + propertyName, + sourceObjectExtension, + destinationObjectExtension, + definitionChecks); + } - foreach (var property in sourceObjectExtension.GetProperties()) + private static bool CanMapProperty( + [NotNull] string propertyName, + [CanBeNull] ObjectExtensionInfo sourceObjectExtension, + [CanBeNull] ObjectExtensionInfo destinationObjectExtension, + MappingPropertyDefinitionChecks? definitionChecks = null) + { + Check.NotNull(propertyName, nameof(propertyName)); + + if (definitionChecks != null) + { + if (definitionChecks.Value.HasFlag(MappingPropertyDefinitionChecks.Source)) { - if (!sourceDictionary.ContainsKey(property.Name)) + if (sourceObjectExtension == null) { - continue; + return false; } - destinationDictionary[property.Name] = sourceDictionary[property.Name]; + if (!sourceObjectExtension.HasProperty(propertyName)) + { + return false; + } } - } - else if (definitionChecks == MappingPropertyDefinitionChecks.Destination) - { - Debug.Assert(destinationObjectExtension != null, nameof(destinationObjectExtension) + " != null"); - foreach (var keyValue in sourceDictionary) + if (definitionChecks.Value.HasFlag(MappingPropertyDefinitionChecks.Destination)) { - if (!destinationObjectExtension.HasProperty(keyValue.Key)) + if (destinationObjectExtension == null) { - continue; + return false; } - destinationDictionary[keyValue.Key] = keyValue.Value; + if (!destinationObjectExtension.HasProperty(propertyName)) + { + return false; + } } + + return true; } - else if (definitionChecks == MappingPropertyDefinitionChecks.Both) + else { - Debug.Assert(sourceObjectExtension != null, nameof(sourceObjectExtension) + " != null"); - Debug.Assert(destinationObjectExtension != null, nameof(destinationObjectExtension) + " != null"); + var sourcePropertyDefinition = sourceObjectExtension?.GetPropertyOrNull(propertyName); + var destinationPropertyDefinition = destinationObjectExtension?.GetPropertyOrNull(propertyName); - foreach (var property in sourceObjectExtension.GetProperties()) + if (sourcePropertyDefinition != null) { - if (!sourceDictionary.ContainsKey(property.Name)) + if (destinationPropertyDefinition != null) { - continue; + return true; } - if (!destinationObjectExtension.HasProperty(property.Name)) + if (sourcePropertyDefinition.CheckPairDefinitionOnMapping == false) { - continue; + return true; } - - destinationDictionary[property.Name] = sourceDictionary[property.Name]; } - } - else - { - throw new NotImplementedException(definitionChecks + " was not implemented!"); + else if (destinationPropertyDefinition != null) + { + if (destinationPropertyDefinition.CheckPairDefinitionOnMapping == false) + { + return true; + } + } + + return false; } } } -} +} \ No newline at end of file diff --git a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfo.cs b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfo.cs index af5d0c2ce4..2edae9a3f8 100644 --- a/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfo.cs +++ b/framework/src/Volo.Abp.ObjectExtending/Volo/Abp/ObjectExtending/ObjectExtensionPropertyInfo.cs @@ -15,6 +15,20 @@ namespace Volo.Abp.ObjectExtending [NotNull] public Type Type { get; } + /// + /// Indicates whether to check the other side of the object mapping + /// if it explicitly defines the property. This property is used in; + /// + /// * .MapExtraPropertiesTo() extension method. + /// * .MapExtraProperties() configuration for the AutoMapper. + /// + /// It this is true, these methods check if the mapping object + /// has defined the property using the . + /// + /// Default: null (unspecified, uses the default logic). + /// + public bool? CheckPairDefinitionOnMapping { get; set; } + [NotNull] public Dictionary Configuration { get; } diff --git a/framework/test/Volo.Abp.ObjectExtending.Tests/Volo/Abp/ObjectExtending/AbpObjectExtendingTestModule.cs b/framework/test/Volo.Abp.ObjectExtending.Tests/Volo/Abp/ObjectExtending/AbpObjectExtendingTestModule.cs index 6dcee4d5b2..470bb547e5 100644 --- a/framework/test/Volo.Abp.ObjectExtending.Tests/Volo/Abp/ObjectExtending/AbpObjectExtendingTestModule.cs +++ b/framework/test/Volo.Abp.ObjectExtending.Tests/Volo/Abp/ObjectExtending/AbpObjectExtendingTestModule.cs @@ -19,6 +19,7 @@ namespace Volo.Abp.ObjectExtending ObjectExtensionManager.Instance .AddOrUpdateProperty("Name") .AddOrUpdateProperty("Age") + .AddOrUpdateProperty("NoPairCheck", options => options.CheckPairDefinitionOnMapping = false) .AddOrUpdateProperty("Name") .AddOrUpdateProperty("ChildCount"); }); diff --git a/framework/test/Volo.Abp.ObjectExtending.Tests/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions_Tests.cs b/framework/test/Volo.Abp.ObjectExtending.Tests/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions_Tests.cs index a51d9514b2..7ba213b81c 100644 --- a/framework/test/Volo.Abp.ObjectExtending.Tests/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions_Tests.cs +++ b/framework/test/Volo.Abp.ObjectExtending.Tests/Volo/Abp/ObjectExtending/HasExtraPropertiesObjectExtendingExtensions_Tests.cs @@ -16,7 +16,8 @@ namespace Volo.Abp.ObjectExtending .SetProperty("Name", "John") .SetProperty("Age", 42) .SetProperty("ChildCount", 2) - .SetProperty("Sex", "male"); + .SetProperty("Sex", "male") + .SetProperty("NoPairCheck", "test-value"); _personDto = new ExtensibleTestPersonDto() .SetProperty("ExistingDtoProperty", "existing-value"); @@ -31,6 +32,7 @@ namespace Volo.Abp.ObjectExtending _personDto.HasProperty("Age").ShouldBeFalse(); //Not defined on the destination _personDto.HasProperty("ChildCount").ShouldBeFalse(); //Not defined in the source _personDto.HasProperty("Sex").ShouldBeFalse(); //Not defined in both classes + _personDto.GetProperty("NoPairCheck").ShouldBe("test-value"); //CheckPairDefinitionOnMapping = false _personDto.GetProperty("ExistingDtoProperty").ShouldBe("existing-value"); //Should not clear existing values } From af15facc6be078210199f6ea3db7285cf7a05322 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 31 Mar 2020 15:13:58 +0300 Subject: [PATCH 071/182] docs: move linked list document to common utils --- docs/en/UI/Angular/Track-By-Service.md | 4 -- .../{Angular => Common/Utils}/Linked-List.md | 64 +++++++++++++------ docs/en/docs-nav.json | 9 ++- 3 files changed, 53 insertions(+), 24 deletions(-) rename docs/en/UI/{Angular => Common/Utils}/Linked-List.md (93%) diff --git a/docs/en/UI/Angular/Track-By-Service.md b/docs/en/UI/Angular/Track-By-Service.md index 71a98fda9d..e6b560a2eb 100644 --- a/docs/en/UI/Angular/Track-By-Service.md +++ b/docs/en/UI/Angular/Track-By-Service.md @@ -111,7 +111,3 @@ class DemoComponent { trackByTenantAccountId = trackByDeep('tenant', 'account', 'id'); } ``` - -## What's Next? - -* [Linked List (Doubly)](./Linked-List.md) \ No newline at end of file diff --git a/docs/en/UI/Angular/Linked-List.md b/docs/en/UI/Common/Utils/Linked-List.md similarity index 93% rename from docs/en/UI/Angular/Linked-List.md rename to docs/en/UI/Common/Utils/Linked-List.md index 388c5963cd..a11fb56279 100644 --- a/docs/en/UI/Angular/Linked-List.md +++ b/docs/en/UI/Common/Utils/Linked-List.md @@ -130,7 +130,11 @@ list.addTail({ x: 3 }); // {"x":1} <-> {"x":2} <-> {"x":3} -list.addAfter({ x: 0 }, { x: 2 }, (v1, v2) => v1.x === v2.x); +list.addAfter( + { x: 0 }, + 2, + (value, searchedValue) => value.x === searchedValue +); // {"x":1} <-> {"x":2} <-> {"x":0} <-> {"x":3} ``` @@ -164,7 +168,11 @@ list.addManyTail([{ x: 1 },{ x: 2 },{ x: 3 }]); // {"x":1} <-> {"x":2} <-> {"x":3} -list.addManyAfter([{ x: 4 }, { x: 5 }], { x: 2 }, (v1, v2) => v1.x === v2.x); +list.addManyAfter( + [{ x: 4 }, { x: 5 }], + 2, + (value, searchedValue) => value.x === searchedValue +); // {"x":1} <-> {"x":2} <-> {"x":4} <-> {"x":5} <-> {"x":3} ``` @@ -203,7 +211,11 @@ list.addTail({ x: 3 }); // {"x":1} <-> {"x":2} <-> {"x":3} -list.addBefore({ x: 0 }, { x: 2 }, (v1, v2) => v1.x === v2.x); +list.addBefore( + { x: 0 }, + 2, + (value, searchedValue) => value.x === searchedValue +); // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":3} ``` @@ -237,7 +249,11 @@ list.addManyTail([{ x: 1 },{ x: 2 },{ x: 3 }]); // {"x":1} <-> {"x":2} <-> {"x":3} -list.addManyBefore([{ x: 4 }, { x: 5 }], { x: 2 }, (v1, v2) => v1.x === v2.x); +list.addManyBefore( + [{ x: 4 }, { x: 5 }], + 2, + (value, searchedValue) => value.x === searchedValue +); // {"x":1} <-> {"x":4} <-> {"x":5} <-> {"x":2} <-> {"x":3} ``` @@ -388,7 +404,9 @@ list.add({ x: 3 }).tail(); // {"x":1} <-> {"x":2} <-> {"x":3} -list.add({ x: 0 }).after({ x: 2 }, (v1, v2) => v1.x === v2.x); +list + .add({ x: 0 }) + .after(2, (value, searchedValue) => value.x === searchedValue); // {"x":1} <-> {"x":2} <-> {"x":0} <-> {"x":3} ``` @@ -429,7 +447,9 @@ list.add({ x: 3 }).tail(); // {"x":1} <-> {"x":2} <-> {"x":3} -list.add({ x: 0 }).before({ x: 2 }, (v1, v2) => v1.x === v2.x); +list + .add({ x: 0 }) + .before(2, (value, searchedValue) => value.x === searchedValue); // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":3} ``` @@ -543,7 +563,9 @@ list.addMany([{ x: 1 }, { x: 2 }, { x: 3 }]).tail(); // {"x":1} <-> {"x":2} <-> {"x":3} -list.addMany([{ x: 4 }, { x: 5 }]).after({ x: 2 }, (v1, v2) => v1.x === v2.x); +list + .addMany([{ x: 4 }, { x: 5 }]) + .after(2, (value, searchedValue) => value.x === searchedValue); // {"x":1} <-> {"x":2} <-> {"x":4} <-> {"x":5} <-> {"x":3} ``` @@ -579,7 +601,9 @@ list.addMany([{ x: 1 }, { x: 2 }, { x: 3 }]).tail(); // {"x":1} <-> {"x":2} <-> {"x":3} -list.addMany([{ x: 4 }, { x: 5 }]).before({ x: 2 }, (v1, v2) => v1.x === v2.x); +list + .addMany([{ x: 4 }, { x: 5 }]) + .before(2, (value, searchedValue) => value.x === searchedValue); // {"x":1} <-> {"x":4} <-> {"x":5} <-> {"x":2} <-> {"x":3} ``` @@ -779,7 +803,7 @@ list.addMany([{ x: 1 }, { x: 0 }, { x: 2 }, { x: 0 }, { x: 3 }]).tail(); // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":0} <-> {"x":3} -list.dropByValue({ x: 0 }, (v1, v2) => v1.x === v2.x); +list.dropByValue(0, (value, searchedValue) => value.x === searchedValue); // {"x":1} <-> {"x":2} <-> {"x":0} <-> {"x":3} ``` @@ -813,7 +837,7 @@ list.addMany([{ x: 1 }, { x: 0 }, { x: 2 }, { x: 0 }, { x: 3 }]).tail(); // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":0} <-> {"x":3} -list.dropByValue({ x: 0 }, (v1, v2) => v1.x === v2.x); +list.dropByValue(0, (value, searchedValue) => value.x === searchedValue); // {"x":1} <-> {"x":2} <-> {"x":3} ``` @@ -921,7 +945,9 @@ list.addMany([{ x: 1 }, { x: 0 }, { x: 2 }, { x: 0 }, { x: 3 }]).tail(); // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":0} <-> {"x":3} -list.drop().byValue({ x: 0 }, (v1, v2) => v1.x === v2.x); +list + .drop() + .byValue(0, (value, searchedValue) => value.x === searchedValue); // {"x":1} <-> {"x":2} <-> {"x":0} <-> {"x":3} ``` @@ -957,7 +983,9 @@ list.addMany([{ x: 1 }, { x: 0 }, { x: 2 }, { x: 0 }, { x: 3 }]).tail(); // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":0} <-> {"x":3} -list.drop().byValueAll({ x: 0 }, (v1, v2) => v1.x === v2.x); +list + .drop() + .byValueAll(0, (value, searchedValue) => value.x === searchedValue); // {"x":1} <-> {"x":2} <-> {"x":3} ``` @@ -1114,7 +1142,7 @@ found.next.value === "c" -#### indexOf(value: T, compareFn = compare): number +#### indexOf(value: any, compareFn = compare): number Finds the position of the first node from the list that has the given value: @@ -1145,11 +1173,11 @@ list.addTailMany([{ x: 1 }, { x: 0 }, { x: 2 }, { x: 0 }, { x: 3 }]); // {"x":1} <-> {"x":0} <-> {"x":2} <-> {"x":0} <-> {"x":3} -const i0 = indexOf({ x: 1 }, (v1, v2) => v1.x === v2.x); -const i1 = indexOf({ x: 2 }, (v1, v2) => v1.x === v2.x); -const i2 = indexOf({ x: 3 }, (v1, v2) => v1.x === v2.x); -const i3 = indexOf({ x: 0 }, (v1, v2) => v1.x === v2.x); -const i4 = indexOf({ x: 4 }, (v1, v2) => v1.x === v2.x); +const i0 = indexOf(1, (value, searchedValue) => value.x === searchedValue); +const i1 = indexOf(2, (value, searchedValue) => value.x === searchedValue); +const i2 = indexOf(3, (value, searchedValue) => value.x === searchedValue); +const i3 = indexOf(0, (value, searchedValue) => value.x === searchedValue); +const i4 = indexOf(4, (value, searchedValue) => value.x === searchedValue); /* i0 === 0 diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index d5b24f4404..52258520f7 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -344,10 +344,15 @@ { "text": "TrackByService", "path": "UI/Angular/Track-By-Service.md" - }, + } + ] + }, + { + "text": "Common", + "items": [ { "text": "Linked List (Doubly)", - "path": "UI/Angular/Linked-List.md" + "path": "UI/Common/Utils/Linked-List.md" } ] } From b3c052be54f7714405b57d9559cdd03a087bc6b3 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 31 Mar 2020 15:17:11 +0300 Subject: [PATCH 072/182] docs: set type of value back to T in indexOf --- docs/en/UI/Common/Utils/Linked-List.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/UI/Common/Utils/Linked-List.md b/docs/en/UI/Common/Utils/Linked-List.md index a11fb56279..971809e8a8 100644 --- a/docs/en/UI/Common/Utils/Linked-List.md +++ b/docs/en/UI/Common/Utils/Linked-List.md @@ -1142,7 +1142,7 @@ found.next.value === "c" -#### indexOf(value: any, compareFn = compare): number +#### indexOf(value: T, compareFn = compare): number Finds the position of the first node from the list that has the given value: From 0f00344749372b882cabbe6430188261b0aeb1b2 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 31 Mar 2020 15:42:04 +0300 Subject: [PATCH 073/182] feat(core): add checkAccessToken fn to initial-utils --- npm/ng-packs/package.json | 1 + .../core/src/lib/tests/initial-utils.spec.ts | 33 +++++++++++++++---- .../core/src/lib/utils/initial-utils.ts | 17 +++++++++- npm/ng-packs/yarn.lock | 12 ++++--- 4 files changed, 51 insertions(+), 12 deletions(-) diff --git a/npm/ng-packs/package.json b/npm/ng-packs/package.json index 9e81892e58..80adfa3d3e 100644 --- a/npm/ng-packs/package.json +++ b/npm/ng-packs/package.json @@ -34,6 +34,7 @@ "@abp/ng.tenant-management.config": "~2.3.0", "@abp/ng.theme.basic": "~2.3.0", "@abp/ng.theme.shared": "^2.3.0", + "@abp/utils": "~2.3.0", "@angular-builders/jest": "^8.2.0", "@angular-devkit/build-angular": "~0.803.21", "@angular-devkit/build-ng-packagr": "~0.803.21", 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 3ca180a5df..1a8905202b 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 @@ -1,10 +1,10 @@ -import { getInitialData, localeInitializer } from '../utils'; -import { Injector } from '@angular/core'; -import { Spectator, createComponentFactory } from '@ngneat/spectator/jest'; -import { Component } from '@angular/core'; +import { Component, Injector } from '@angular/core'; +import { createComponentFactory, Spectator } from '@ngneat/spectator/jest'; import { Store } from '@ngxs/store'; +import { OAuthService } from 'angular-oauth2-oidc'; import { of } from 'rxjs'; import { GetAppConfiguration } from '../actions'; +import { getInitialData, localeInitializer } from '../utils'; @Component({ selector: 'abp-dummy', @@ -14,7 +14,10 @@ export class DummyComponent {} describe('InitialUtils', () => { let spectator: Spectator; - const createComponent = createComponentFactory({ component: DummyComponent, mocks: [Store] }); + const createComponent = createComponentFactory({ + component: DummyComponent, + mocks: [Store], + }); beforeEach(() => (spectator = createComponent())); @@ -25,7 +28,8 @@ describe('InitialUtils', () => { const store = spectator.get(Store); const dispatchSpy = jest.spyOn(store, 'dispatch'); - injectorSpy.mockReturnValue(store); + injectorSpy.mockReturnValueOnce(store); + injectorSpy.mockReturnValueOnce({ hasValidAccessToken: () => false }); dispatchSpy.mockReturnValue(of('test')); expect(typeof getInitialData(injector)).toBe('function'); @@ -34,6 +38,23 @@ describe('InitialUtils', () => { }); }); + describe('#checkAccessToken', () => { + test('should call logOut fn of OAuthService when token is valid and current user not found', async () => { + const injector = spectator.get(Injector); + const injectorSpy = jest.spyOn(injector, 'get'); + const store = spectator.get(Store); + const dispatchSpy = jest.spyOn(store, 'dispatch'); + const logOutFn = jest.fn(); + + injectorSpy.mockReturnValueOnce(store); + injectorSpy.mockReturnValueOnce({ hasValidAccessToken: () => true, logOut: logOutFn }); + dispatchSpy.mockReturnValue(of({ currentUser: { id: null } })); + + getInitialData(injector)(); + expect(logOutFn).toHaveBeenCalled(); + }); + }); + describe('#localeInitializer', () => { test('should resolve registerLocale', async () => { const injector = spectator.get(Injector); 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 2043b1e8b6..100710a53a 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 @@ -3,17 +3,32 @@ import { Injector } from '@angular/core'; import { Store } from '@ngxs/store'; import { GetAppConfiguration } from '../actions/config.actions'; import differentLocales from '../constants/different-locales'; +import { ApplicationConfiguration } from '../models/application-configuration'; +import { tap } from 'rxjs/operators'; +import { ConfigState } from '../states/config.state'; +import { OAuthService } from 'angular-oauth2-oidc'; export function getInitialData(injector: Injector) { const fn = () => { const store: Store = injector.get(Store); - return store.dispatch(new GetAppConfiguration()).toPromise(); + return store + .dispatch(new GetAppConfiguration()) + .pipe(tap(res => checkAccessToken(store, injector))) + .toPromise(); }; return fn; } +function checkAccessToken(store: Store, injector: Injector) { + const oAuth = injector.get(OAuthService); + console.warn(oAuth.hasValidAccessToken()); + if (oAuth.hasValidAccessToken() && !store.selectSnapshot(ConfigState.getDeep('currentUser.id'))) { + oAuth.logOut(); + } +} + export function localeInitializer(injector: Injector) { const fn = () => { const store: Store = injector.get(Store); diff --git a/npm/ng-packs/yarn.lock b/npm/ng-packs/yarn.lock index e4bf556c6b..9bd1c259c4 100644 --- a/npm/ng-packs/yarn.lock +++ b/npm/ng-packs/yarn.lock @@ -120,6 +120,13 @@ chart.js "^2.9.3" tslib "^1.9.0" +"@abp/utils@~2.3.0": + version "2.3.1" + resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-2.3.1.tgz#728b978d598a98b643562250be54c92988b986e5" + integrity sha512-sZ1nrl8pV1Zx3WAqHRUQ2V3aJlsjaq1ggg2VIPYY4FjCYHFZ3L+Fkq5cPPZb/MczG1YZpAQiMtCJ/+8slvPHHQ== + dependencies: + just-compare "^1.3.0" + "@angular-builders/jest@^8.2.0": version "8.3.2" resolved "https://registry.yarnpkg.com/@angular-builders/jest/-/jest-8.3.2.tgz#669c350c9df2e3afc9ae048c5067759c36113728" @@ -9578,11 +9585,6 @@ pretty-format@^24.0.0, pretty-format@^24.3.0, pretty-format@^24.8.0, pretty-form ansi-styles "^3.2.0" react-is "^16.8.4" -primeicons@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/primeicons/-/primeicons-2.0.0.tgz#ec3e5a8d4d04a09309225a5a57deb911e08dc0d3" - integrity sha512-GJTCeMSQU8UU1GqbsaDrg/IH+b/vSinJQl52NVpdJ7sShYLZA8Eq6jLF48Ye3N/dQloGrE07i7XsZvxQ9pNbqg== - private@^0.1.6: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" From da9b2d39ca1a1499416ad90192643a1ae8b60218 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 31 Mar 2020 16:04:56 +0300 Subject: [PATCH 074/182] chore: remove console.warn --- npm/ng-packs/packages/core/src/lib/utils/initial-utils.ts | 1 - 1 file changed, 1 deletion(-) 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 100710a53a..04a5a1ca83 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 @@ -23,7 +23,6 @@ export function getInitialData(injector: Injector) { function checkAccessToken(store: Store, injector: Injector) { const oAuth = injector.get(OAuthService); - console.warn(oAuth.hasValidAccessToken()); if (oAuth.hasValidAccessToken() && !store.selectSnapshot(ConfigState.getDeep('currentUser.id'))) { oAuth.logOut(); } From 7feffce4bcc38a5d39b1faf2649ce1100734bfba Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 31 Mar 2020 16:25:00 +0300 Subject: [PATCH 075/182] chore: update abp.resourcemapping.js in utils package --- npm/packs/utils/abp.resourcemapping.js | 2 +- npm/packs/utils/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/packs/utils/abp.resourcemapping.js b/npm/packs/utils/abp.resourcemapping.js index 147008a28e..d8d4cb5f97 100644 --- a/npm/packs/utils/abp.resourcemapping.js +++ b/npm/packs/utils/abp.resourcemapping.js @@ -1,5 +1,5 @@ module.exports = { mappings: { - '@node_modules/@abp/utils/bundles/*': '@libs/abp/utils/', + '@node_modules/@abp/utils/dist/bundles/*.*': '@libs/abp/utils/', }, }; diff --git a/npm/packs/utils/package.json b/npm/packs/utils/package.json index 1a2aec8fa4..0b062aa4c5 100644 --- a/npm/packs/utils/package.json +++ b/npm/packs/utils/package.json @@ -1,6 +1,6 @@ { "name": "@abp/utils", - "version": "2.3.1", + "version": "2.3.2", "scripts": { "prepublish": "yarn install --ignore-scripts && node prepublish.js", "ng": "ng", From 92a021611a37c45465927ca5a5312913526467e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ak=C4=B1n=20Sabri=20=C3=87am?= Date: Tue, 31 Mar 2020 17:23:42 +0300 Subject: [PATCH 076/182] added description field in posts and updated create and edit page for post --- .../Volo/Blogging/Posts/CreatePostDto.cs | 4 ++++ .../Volo/Blogging/Posts/PostWithDetailsDto.cs | 2 ++ .../Volo/Blogging/Posts/UpdatePostDto.cs | 3 +++ .../Volo/Blogging/Posts/PostAppService.cs | 6 +++++- .../Volo/Blogging/Posts/PostConsts.cs | 3 +++ .../Volo/Blogging/Posts/Post.cs | 7 +++++-- .../BloggingDbContextModelBuilderExtensions.cs | 1 + .../Pages/Blogs/Posts/Detail.cshtml | 3 ++- .../Pages/Blogs/Posts/Edit.cshtml | 7 ++++++- .../Pages/Blogs/Posts/Edit.cshtml.cs | 6 +++++- .../Pages/Blogs/Posts/New.cshtml | 7 ++++++- .../Pages/Blogs/Posts/New.cshtml.cs | 10 ++++++++++ .../Volo.Blogging.Web/Pages/Blogs/Posts/edit.js | 16 ++++++++++++++++ .../Volo.Blogging.Web/Pages/Blogs/Posts/new.js | 6 ++++-- 14 files changed, 72 insertions(+), 9 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/CreatePostDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/CreatePostDto.cs index 530bb6efc1..164e4f691f 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/CreatePostDto.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/CreatePostDto.cs @@ -22,5 +22,9 @@ namespace Volo.Blogging.Posts public string Content { get; set; } public string Tags { get; set; } + + [StringLength(PostConsts.MaxDescriptionLength)] + public string Description { get; set; } + } } diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs index 08dde7e019..15401afbc6 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/PostWithDetailsDto.cs @@ -18,6 +18,8 @@ namespace Volo.Blogging.Posts public string Content { get; set; } + public string Description { get; set; } + public int ReadCount { get; set; } public int CommentCount { get; set; } diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs index 07c62ba786..16b54fedd6 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Posts/UpdatePostDto.cs @@ -1,4 +1,5 @@ using System; +using System.Reflection; namespace Volo.Blogging.Posts { @@ -14,6 +15,8 @@ namespace Volo.Blogging.Posts public string Content { get; set; } + public string Description { get; set; } + public string Tags { get; set; } } } diff --git a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs index 76c9a29221..798bf8e39f 100644 --- a/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs +++ b/modules/blogging/src/Volo.Blogging.Application/Volo/Blogging/Posts/PostAppService.cs @@ -149,6 +149,7 @@ namespace Volo.Blogging.Posts post.SetTitle(input.Title); post.SetUrl(input.Url); post.Content = input.Content; + post.Description = input.Description; post.CoverImage = input.CoverImage; post = await _postRepository.UpdateAsync(post); @@ -171,7 +172,10 @@ namespace Volo.Blogging.Posts coverImage: input.CoverImage, url: input.Url ) - { Content = input.Content }; + { + Content = input.Content, + Description = input.Description + }; await _postRepository.InsertAsync(post); diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Posts/PostConsts.cs b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Posts/PostConsts.cs index 7cfb5b1b30..898de49943 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Posts/PostConsts.cs +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Posts/PostConsts.cs @@ -7,5 +7,8 @@ public const int MaxUrlLength = 64; public const int MaxContentLength = 1024 * 1024; //1MB + + public const int MaxDescriptionLength = 200; + } } diff --git a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/Post.cs b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/Post.cs index ee44e7e029..ecc21d59d6 100644 --- a/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/Post.cs +++ b/modules/blogging/src/Volo.Blogging.Domain/Volo/Blogging/Posts/Post.cs @@ -23,13 +23,16 @@ namespace Volo.Blogging.Posts [CanBeNull] public virtual string Content { get; set; } + [CanBeNull] + public virtual string Description { get; set; } + public virtual int ReadCount { get; protected set; } public virtual Collection Tags { get; protected set; } protected Post() { - + } public Post(Guid id, Guid blogId, [NotNull] string title, [NotNull] string coverImage, [NotNull] string url) @@ -63,7 +66,7 @@ namespace Volo.Blogging.Posts public virtual void AddTag(Guid tagId) { - Tags.Add(new PostTag(Id,tagId)); + Tags.Add(new PostTag(Id, tagId)); } public virtual void RemoveTag(Guid tagId) diff --git a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs index 56ef8277d9..a5e909d8a4 100644 --- a/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs +++ b/modules/blogging/src/Volo.Blogging.EntityFrameworkCore/Volo/Blogging/EntityFrameworkCore/BloggingDbContextModelBuilderExtensions.cs @@ -57,6 +57,7 @@ namespace Volo.Blogging.EntityFrameworkCore b.Property(x => x.CoverImage).IsRequired().HasColumnName(nameof(Post.CoverImage)); b.Property(x => x.Url).IsRequired().HasMaxLength(PostConsts.MaxUrlLength).HasColumnName(nameof(Post.Url)); b.Property(x => x.Content).IsRequired(false).HasMaxLength(PostConsts.MaxContentLength).HasColumnName(nameof(Post.Content)); + b.Property(x => x.Description).IsRequired(false).HasMaxLength(PostConsts.MaxDescriptionLength).HasColumnName(nameof(Post.Description)); b.HasMany(p => p.Tags).WithOne().HasForeignKey(qt => qt.PostId); diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml index 5c781d1a5a..7bed3d0d68 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Detail.cshtml @@ -9,7 +9,8 @@ @inject IAuthorizationService Authorization @model DetailModel @{ - ViewBag.PageTitle = Model.Post.Title; + ViewBag.Title = Model.Post.Title; + ViewBag.Description = Model.Post.Description; var hasCommentingPermission = CurrentUser.IsAuthenticated; //TODO: Apply real policy! } @section scripts { diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml index 4baf807e47..da48e701c4 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml @@ -26,9 +26,12 @@
+ - +
@@ -41,7 +44,9 @@ + + diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml.cs index 9c87723edd..a5a0c5826b 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml.cs +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/Edit.cshtml.cs @@ -56,7 +56,8 @@ namespace Volo.Blogging.Pages.Blog.Posts Url = Post.Url, CoverImage = Post.CoverImage, Content = Post.Content, - Tags = Post.Tags + Tags = Post.Tags, + Description = !Post.Description.IsNullOrWhiteSpace() ? Post.Description : Post.Content.Substring(0,200) }; var editedPost = await _postAppService.UpdateAsync(Post.Id, post); @@ -92,6 +93,9 @@ namespace Volo.Blogging.Pages.Blog.Posts [StringLength(PostConsts.MaxContentLength)] public string Content { get; set; } + [StringLength(PostConsts.MaxDescriptionLength)] + public string Description { get; set; } + public string Tags { get; set; } } } \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml index d26c178898..d99267ef07 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml @@ -27,6 +27,10 @@ + + @@ -44,6 +48,7 @@ +
@@ -69,7 +74,7 @@ @L["Cancel"]
-
+
diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml.cs index b566b7bbe0..614d4cdc93 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml.cs +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml.cs @@ -54,6 +54,12 @@ namespace Volo.Blogging.Pages.Blog.Posts public async Task OnPost() { var blog = await _blogAppService.GetAsync(Post.BlogId); + + if (Post.Description == null) + { + Post.Description = Post.Content.Substring(0, 200); + } + var postWithDetailsDto = await _postAppService.CreateAsync(ObjectMapper.Map(Post)); //TODO: Try Url.Page(...) @@ -84,6 +90,10 @@ namespace Volo.Blogging.Pages.Blog.Posts public string Content { get; set; } public string Tags { get; set; } + + [StringLength(PostConsts.MaxDescriptionLength)] + public string Description { get; set; } + } } } \ No newline at end of file diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js index 6b0dd9f02b..835db5979e 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js @@ -27,6 +27,22 @@ }); }; + var checkTitleLength = function () { + var title = $('#Post_Title').val(); + + if (title.length > 60) { + $("#WarningMessage-title").css("display", "block"); + } else { + $("#WarningMessage-title").css("display", "none"); + } + }; + + checkTitleLength(); + + $('#Post_Title').on("change paste keyup", function () { + checkTitleLength(); + }); + $('#CoverImageFile').change(function () { if (!$('#CoverImageFile').prop('files').length) { return; diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js index 0c3e927264..a9ab5c6d1e 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js @@ -104,8 +104,10 @@ var title = $('#Post_Title').val(); - if (title.length > 64) { - title = title.substring(0, 64); + if (title.length > 60) { + $("#WarningMessage-title").css("display", "block"); + } else { + $("#WarningMessage-title").css("display", "none"); } title = title.replace(' ', '-'); From 8c917e390ee0ebf61a5caef71246e290acee8d01 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Wed, 1 Apr 2020 01:30:48 +0300 Subject: [PATCH 077/182] Show actual exception message from Identity Server . Issue volosoft/volo#1533 Identity server hides the exception message therefore I used Raw of the HTTP content. And hide the stack trace I used --- .../IdentityModelAuthenticationService.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs index e69d3f67c7..b78a05c684 100644 --- a/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs +++ b/framework/src/Volo.Abp.IdentityModel/Volo/Abp/IdentityModel/IdentityModelAuthenticationService.cs @@ -70,9 +70,17 @@ namespace Volo.Abp.IdentityModel } var tokenResponse = await GetTokenResponse(discoveryResponse, configuration); + if (tokenResponse.IsError) { - throw new AbpException($"Could not get token from the OpenId Connect server! ErrorType: {tokenResponse.ErrorType}. Error: {tokenResponse.Error}. ErrorDescription: {tokenResponse.ErrorDescription}. HttpStatusCode: {tokenResponse.HttpStatusCode}"); + if (tokenResponse.ErrorDescription != null) + { + throw new AbpException($"Could not get token from the OpenId Connect server! ErrorType: {tokenResponse.ErrorType}. Error: {tokenResponse.Error}. ErrorDescription: {tokenResponse.ErrorDescription}. HttpStatusCode: {tokenResponse.HttpStatusCode}"); + } + + var rawError = tokenResponse.Raw; + var withoutInnerException = rawError.Split(new string[] { "" }, StringSplitOptions.RemoveEmptyEntries); + throw new AbpException(withoutInnerException[0]); } return tokenResponse.AccessToken; From 686614ab7f51c0755692dfd89422e1471626f8c1 Mon Sep 17 00:00:00 2001 From: maliming Date: Wed, 1 Apr 2020 15:58:29 +0800 Subject: [PATCH 078/182] Add builderAction parameter to the BuildConfiguration method. Resolve #3429 --- .../Extensions/Configuration/ConfigurationHelper.cs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs index 44b75d1adb..82d393eef3 100644 --- a/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs +++ b/framework/src/Volo.Abp.Core/Microsoft/Extensions/Configuration/ConfigurationHelper.cs @@ -6,7 +6,8 @@ namespace Microsoft.Extensions.Configuration public static class ConfigurationHelper { public static IConfigurationRoot BuildConfiguration( - AbpConfigurationBuilderOptions options = null) + AbpConfigurationBuilderOptions options = null, + Action builderAction = null) { options = options ?? new AbpConfigurationBuilderOptions(); @@ -43,6 +44,8 @@ namespace Microsoft.Extensions.Configuration builder = builder.AddCommandLine(options.CommandLineArgs); } + builderAction?.Invoke(builder); + return builder.Build(); } } From d3b139ce10f2a75f76f2350ce8317ddeb6acc777 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Wed, 1 Apr 2020 13:46:06 +0300 Subject: [PATCH 079/182] ignore file not found exception (trivial) --- .../Volo/Blogging/Files/RawFileDto.cs | 17 ++++++++++++++++- .../Volo/Blogging/Files/FileAppService.cs | 18 +++++++++++------- 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/RawFileDto.cs b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/RawFileDto.cs index 56a9653b73..d9b0a4c636 100644 --- a/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/RawFileDto.cs +++ b/modules/blogging/src/Volo.Blogging.Application.Contracts/Volo/Blogging/Files/RawFileDto.cs @@ -1,7 +1,22 @@ -namespace Volo.Blogging.Files +using System.Security.Cryptography; +using Volo.Abp.Threading; + +namespace Volo.Blogging.Files { public class RawFileDto { public byte[] Bytes { get; set; } + + public bool IsFileEmpty => Bytes == null || Bytes.Length == 0; + + public RawFileDto() + { + + } + + public static RawFileDto EmptyResult() + { + return new RawFileDto() {Bytes = new byte[0]}; + } } } \ No newline at end of file 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 4673f5c6d1..cdfd4cb836 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,6 +2,7 @@ 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.Validation; @@ -12,9 +13,11 @@ namespace Volo.Blogging.Files public class FileAppService : BloggingAppServiceBase, IFileAppService { public BlogFileOptions Options { get; } + private readonly ILogger _logger; - public FileAppService(IOptions options) + public FileAppService(IOptions options, ILogger logger) { + _logger = logger; Options = options.Value; } @@ -35,12 +38,13 @@ namespace Volo.Blogging.Files var filePath = Path.Combine(Options.FileUploadLocalFolder, name); - return Task.FromResult( - new RawFileDto - { - Bytes = File.ReadAllBytes(filePath) - } - ); + 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()); } public virtual Task CreateAsync(FileUploadInputDto input) From 2d55f3aabc314d8c01d791cbc005066cb68259a9 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Wed, 1 Apr 2020 15:00:00 +0300 Subject: [PATCH 080/182] chore: add umdId to @abp/utils --- npm/packs/utils/projects/utils/ng-package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/npm/packs/utils/projects/utils/ng-package.json b/npm/packs/utils/projects/utils/ng-package.json index c5ccce90e4..23dfd158e5 100644 --- a/npm/packs/utils/projects/utils/ng-package.json +++ b/npm/packs/utils/projects/utils/ng-package.json @@ -3,7 +3,8 @@ "dest": "../../dist", "deleteDestPath": true, "lib": { - "entryFile": "src/public-api.ts" + "entryFile": "src/public-api.ts", + "umdId": "abp.utils.common" }, "whitelistedNonPeerDependencies": ["just-compare"] } From b19519ece2df150a22998a141c772eb399d79682 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 1 Apr 2020 20:51:00 +0300 Subject: [PATCH 081/182] feat(core): add dom strategy --- .../core/src/lib/strategies/dom.strategy.ts | 28 +++++++++++ .../packages/core/src/lib/strategies/index.ts | 1 + .../core/src/lib/tests/dom.strategy.spec.ts | 49 +++++++++++++++++++ 3 files changed, 78 insertions(+) create mode 100644 npm/ng-packs/packages/core/src/lib/strategies/dom.strategy.ts create mode 100644 npm/ng-packs/packages/core/src/lib/strategies/index.ts create mode 100644 npm/ng-packs/packages/core/src/lib/tests/dom.strategy.spec.ts diff --git a/npm/ng-packs/packages/core/src/lib/strategies/dom.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/dom.strategy.ts new file mode 100644 index 0000000000..4fbe18d235 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/strategies/dom.strategy.ts @@ -0,0 +1,28 @@ +export class DomStrategy { + constructor( + public target: HTMLElement = document.head, + public position: InsertPosition = 'beforeend', + ) {} + + insertElement(element: T) { + this.target.insertAdjacentElement(this.position, element); + } +} + +export const DOM_STRATEGY = { + AfterElement(element: HTMLElement) { + return new DomStrategy(element, 'afterend'); + }, + AppendToBody() { + return new DomStrategy(document.body, 'beforeend'); + }, + AppendToHead() { + return new DomStrategy(document.head, 'beforeend'); + }, + BeforeElement(element: HTMLElement) { + return new DomStrategy(element, 'beforebegin'); + }, + PrependToHead() { + return new DomStrategy(document.head, 'afterbegin'); + }, +}; diff --git a/npm/ng-packs/packages/core/src/lib/strategies/index.ts b/npm/ng-packs/packages/core/src/lib/strategies/index.ts new file mode 100644 index 0000000000..2506a819de --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/strategies/index.ts @@ -0,0 +1 @@ +export * from './dom.strategy'; diff --git a/npm/ng-packs/packages/core/src/lib/tests/dom.strategy.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/dom.strategy.spec.ts new file mode 100644 index 0000000000..7e5f264f2b --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/dom.strategy.spec.ts @@ -0,0 +1,49 @@ +import { DomStrategy, DOM_STRATEGY } from '../strategies'; + +describe('DomStrategy', () => { + describe('#insertElement', () => { + it('should append element to head by default', () => { + const strategy = new DomStrategy(); + const element = document.createElement('script'); + strategy.insertElement(element); + + expect(document.head.lastChild).toBe(element); + }); + + it('should append element to body when body is given as target', () => { + const strategy = new DomStrategy(document.body); + const element = document.createElement('script'); + strategy.insertElement(element); + + expect(document.body.lastChild).toBe(element); + }); + + it('should prepend to head when position is given as "afterbegin"', () => { + const strategy = new DomStrategy(undefined, 'afterbegin'); + const element = document.createElement('script'); + strategy.insertElement(element); + + expect(document.head.firstChild).toBe(element); + }); + }); +}); + +describe('DOM_STRATEGY', () => { + let div = document.createElement('DIV'); + + beforeEach(() => { + document.body.innerHTML = ''; + document.body.appendChild(div); + }); + + test.each` + name | target | position + ${'AfterElement'} | ${div} | ${'afterend'} + ${'AppendToBody'} | ${document.body} | ${'beforeend'} + ${'AppendToHead'} | ${document.head} | ${'beforeend'} + ${'BeforeElement'} | ${div} | ${'beforebegin'} + ${'PrependToHead'} | ${document.head} | ${'afterbegin'} + `('should successfully map $name to CrossOriginStrategy', ({ name, target, position }) => { + expect(DOM_STRATEGY[name](target)).toEqual(new DomStrategy(target, position)); + }); +}); From cb51ca7fc14660db52281a6556bfcfdb70309f98 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 1 Apr 2020 20:52:02 +0300 Subject: [PATCH 082/182] feat(core): add cross-origin strategy --- .../lib/strategies/cross-origin.strategy.ts | 17 +++++++++ .../packages/core/src/lib/strategies/index.ts | 1 + .../lib/tests/cross-origin.strategy.spec.ts | 38 +++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 npm/ng-packs/packages/core/src/lib/strategies/cross-origin.strategy.ts create mode 100644 npm/ng-packs/packages/core/src/lib/tests/cross-origin.strategy.spec.ts diff --git a/npm/ng-packs/packages/core/src/lib/strategies/cross-origin.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/cross-origin.strategy.ts new file mode 100644 index 0000000000..c56d7a3d54 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/strategies/cross-origin.strategy.ts @@ -0,0 +1,17 @@ +export class CrossOriginStrategy { + constructor(public crossorigin: 'anonymous' | 'use-credentials', public integrity?: string) {} + + setCrossOrigin(element: T) { + if (this.integrity) element.setAttribute('integrity', this.integrity); + element.setAttribute('crossorigin', this.crossorigin); + } +} + +export const CROSS_ORIGIN_STRATEGY = { + Anonymous(integrity?: string) { + return new CrossOriginStrategy('anonymous', integrity); + }, + UseCredentials(integrity?: string) { + return new CrossOriginStrategy('use-credentials', integrity); + }, +}; diff --git a/npm/ng-packs/packages/core/src/lib/strategies/index.ts b/npm/ng-packs/packages/core/src/lib/strategies/index.ts index 2506a819de..d1a367e138 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/index.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/index.ts @@ -1 +1,2 @@ +export * from './cross-origin.strategy'; export * from './dom.strategy'; diff --git a/npm/ng-packs/packages/core/src/lib/tests/cross-origin.strategy.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/cross-origin.strategy.spec.ts new file mode 100644 index 0000000000..25cc6f0c93 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/cross-origin.strategy.spec.ts @@ -0,0 +1,38 @@ +import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from '../strategies'; +import { uuid } from '../utils'; + +describe('CrossOriginStrategy', () => { + describe('#setCrossOrigin', () => { + it('should set crossorigin attribute', () => { + const strategy = new CrossOriginStrategy('use-credentials'); + const element = document.createElement('link'); + strategy.setCrossOrigin(element); + + expect(element.crossOrigin).toBe('use-credentials'); + }); + + it('should set integrity attribute when given', () => { + const integrity = uuid(); + const strategy = new CrossOriginStrategy('anonymous', integrity); + const element = document.createElement('link'); + strategy.setCrossOrigin(element); + + expect(element.crossOrigin).toBe('anonymous'); + expect(element.getAttribute('integrity')).toBe(integrity); + }); + }); +}); + +describe('CROSS_ORIGIN_STRATEGY', () => { + test.each` + name | integrity | crossOrigin + ${'Anonymous'} | ${undefined} | ${'anonymous'} + ${'Anonymous'} | ${uuid()} | ${'anonymous'} + ${'UseCredentials'} | ${undefined} | ${'use-credentials'} + ${'UseCredentials'} | ${uuid()} | ${'use-credentials'} + `('should successfully map $name to CrossOriginStrategy', ({ name, integrity, crossOrigin }) => { + expect(CROSS_ORIGIN_STRATEGY[name](integrity)).toEqual( + new CrossOriginStrategy(crossOrigin, integrity), + ); + }); +}); From 4fef1aaea138880eea524407d6a4566495b23f44 Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Wed, 1 Apr 2020 20:52:37 +0300 Subject: [PATCH 083/182] add --connection-string parameter to docs and NewCommand of CLI. Issue #3208 --- docs/en/CLI.md | 1 + .../src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/en/CLI.md b/docs/en/CLI.md index a347599135..f0fd3ae7bd 100644 --- a/docs/en/CLI.md +++ b/docs/en/CLI.md @@ -60,6 +60,7 @@ abp new Acme.BookStore * `--version` or `-v`: Specifies the ABP & template version. It can be a [release tag](https://github.com/abpframework/abp/releases) or a [branch name](https://github.com/abpframework/abp/branches). Uses the latest release if not specified. Most of the times, you will want to use the latest version. * `--template-source` or `-ts`: Specifies a custom template source to use to build the project. Local and network sources can be used(Like `D\localTemplate` or `https://.zip`). * `--create-solution-folder` or `-csf`: Specifies if the project will be in a new folder in the output folder or directly the output folder. +* `--connection-string` or `-cs`: Overwrites the default connection strings in all `appsettings.json` files. The default connection string is `Server=localhost;Database=MyProjectName;Trusted_Connection=True;MultipleActiveResultSets=true`. You can set your own connection string if you don't want to use the default. Be aware that the default database provider is `SQL Server`, therefore you can only enter connection string for SQL Server! ### add-package diff --git a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs index 222bfee307..8a0c21a254 100644 --- a/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs +++ b/framework/src/Volo.Abp.Cli.Core/Volo/Abp/Cli/Commands/NewCommand.cs @@ -218,6 +218,7 @@ namespace Volo.Abp.Cli.Commands sb.AppendLine(" abp new Acme.BookStore -t module --no-ui"); sb.AppendLine(" abp new Acme.BookStore -ts \"D:\\localTemplate\\abp\""); sb.AppendLine(" abp new Acme.BookStore --local-framework-ref --abp-path \"D:\\github\\abp\""); + sb.AppendLine(" abp new Acme.BookStore --connection-string \"Server=myServerName\\myInstanceName;Database=myDatabase;User Id=myUsername;Password=myPassword\""); sb.AppendLine(""); sb.AppendLine("See the documentation for more info: https://docs.abp.io/en/abp/latest/CLI"); From b55bc42779912c395856a7ea8d1d1725c9ee86ea Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 1 Apr 2020 20:53:30 +0300 Subject: [PATCH 084/182] feat(core): add fromLazyLoad utility function --- .../src/lib/tests/lazy-load-utils.spec.ts | 105 ++++++++++++++++++ .../packages/core/src/lib/utils/index.ts | 1 + .../core/src/lib/utils/lazy-load-utils.ts | 54 +++++++++ 3 files changed, 160 insertions(+) create mode 100644 npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts create mode 100644 npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts diff --git a/npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts new file mode 100644 index 0000000000..657afeead1 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts @@ -0,0 +1,105 @@ +import { DomStrategy, DOM_STRATEGY } from '../strategies'; +import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from '../strategies/cross-origin.strategy'; +import { uuid } from '../utils'; +import { fromLazyLoad } from '../utils/lazy-load-utils'; + +describe('Lazy Load Utils', () => { + describe('#fromLazyLoad', () => { + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should append to head by default', () => { + const element = document.createElement('link'); + const spy = jest.spyOn(document.head, 'insertAdjacentElement'); + + fromLazyLoad(element); + expect(spy).toHaveBeenCalledWith('beforeend', element); + }); + + it('should allow setting a dom strategy', () => { + const element = document.createElement('link'); + const spy = jest.spyOn(document.head, 'insertAdjacentElement'); + + fromLazyLoad(element, DOM_STRATEGY.PrependToHead()); + expect(spy).toHaveBeenCalledWith('afterbegin', element); + }); + + it('should set crossorigin to "anonymous" by default', () => { + const element = document.createElement('link'); + + fromLazyLoad(element); + + expect(element.crossOrigin).toBe('anonymous'); + }); + + it('should allow setting a crossorigin strategy', () => { + const element = document.createElement('link'); + + const integrity = uuid(); + + fromLazyLoad(element, undefined, CROSS_ORIGIN_STRATEGY.UseCredentials(integrity)); + + expect(element.crossOrigin).toBe('use-credentials'); + expect(element.getAttribute('integrity')).toBe(integrity); + }); + + it('should emit error event on fail and clear callbacks', done => { + const error = new CustomEvent('error'); + const parentNode = { removeChild: jest.fn() }; + const element = ({ parentNode } as any) as HTMLLinkElement; + + fromLazyLoad( + element, + { + insertElement(el: HTMLLinkElement) { + expect(el).toBe(element); + + setTimeout(() => { + el.onerror(error); + }, 0); + }, + } as DomStrategy, + { + setCrossOrigin(el: HTMLLinkElement) {}, + } as CrossOriginStrategy, + ).subscribe({ + error: value => { + expect(value).toBe(error); + expect(parentNode.removeChild).toHaveBeenCalledWith(element); + expect(element.onerror).toBeNull(); + done(); + }, + }); + }); + + it('should emit load event on success and clear callbacks', done => { + const success = new CustomEvent('load'); + const parentNode = { removeChild: jest.fn() }; + const element = ({ parentNode } as any) as HTMLLinkElement; + + fromLazyLoad( + element, + { + insertElement(el: HTMLLinkElement) { + expect(el).toBe(element); + + setTimeout(() => { + el.onload(success); + }, 0); + }, + } as DomStrategy, + { + setCrossOrigin(el: HTMLLinkElement) {}, + } as CrossOriginStrategy, + ).subscribe({ + next: value => { + expect(value).toBe(success); + expect(parentNode.removeChild).not.toHaveBeenCalled(); + expect(element.onload).toBeNull(); + done(); + }, + }); + }); + }); +}); diff --git a/npm/ng-packs/packages/core/src/lib/utils/index.ts b/npm/ng-packs/packages/core/src/lib/utils/index.ts index 0043152ada..a0404f7568 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/index.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/index.ts @@ -1,5 +1,6 @@ export * from './common-utils'; export * from './generator-utils'; export * from './initial-utils'; +export * from './lazy-load-utils'; export * from './route-utils'; export * from './rxjs-utils'; diff --git a/npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts new file mode 100644 index 0000000000..5aee3bc715 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts @@ -0,0 +1,54 @@ +import { Observable, Observer } from 'rxjs'; +import { + CrossOriginStrategy, + CROSS_ORIGIN_STRATEGY, + DomStrategy, + DOM_STRATEGY, +} from '../strategies'; + +export function fromLazyLoad( + element: HTMLScriptElement | HTMLLinkElement, + domStrategy: DomStrategy = DOM_STRATEGY.AppendToHead(), + crossOriginStrategy: CrossOriginStrategy = CROSS_ORIGIN_STRATEGY.Anonymous(), +): Observable { + crossOriginStrategy.setCrossOrigin(element); + domStrategy.insertElement(element); + + return Observable.create((observer: Observer) => { + element.onload = event => { + clearCallbacks(element); + observer.next(event); + observer.complete(); + }; + + const handleError = createErrorHandler(observer, element); + + element.onerror = handleError; + element.onabort = handleError; + element.onemptied = handleError; + element.onstalled = handleError; + element.onsuspend = handleError; + + return () => { + clearCallbacks(element); + observer.complete(); + }; + }); +} + +function createErrorHandler(observer: Observer, element: HTMLElement) { + return function(event: Event | string) { + clearCallbacks(element); + element.parentNode.removeChild(element); + observer.error(event); + }; +} + +function clearCallbacks(element: HTMLElement) { + element.onload = null; + element.onerror = null; + element.onabort = null; + element.onemptied = null; + element.onstalled = null; + element.onsuspend = null; +} From 79b080671843e18eb30163594877b5a27b4768bf Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Wed, 1 Apr 2020 20:53:59 +0300 Subject: [PATCH 085/182] feat(core): add loading strategies --- .../packages/core/src/lib/strategies/index.ts | 1 + .../src/lib/strategies/loading.strategy.ts | 68 ++++++++++++++ .../src/lib/tests/loading.strategy.spec.ts | 90 +++++++++++++++++++ 3 files changed, 159 insertions(+) create mode 100644 npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts create mode 100644 npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts diff --git a/npm/ng-packs/packages/core/src/lib/strategies/index.ts b/npm/ng-packs/packages/core/src/lib/strategies/index.ts index d1a367e138..915887f92a 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/index.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/index.ts @@ -1,2 +1,3 @@ export * from './cross-origin.strategy'; export * from './dom.strategy'; +export * from './loading.strategy'; diff --git a/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts new file mode 100644 index 0000000000..eae23a0c7f --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts @@ -0,0 +1,68 @@ +import { Observable, of } from 'rxjs'; +import { switchMap } from 'rxjs/operators'; +import { fromLazyLoad } from '../utils'; +import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from './cross-origin.strategy'; +import { DomStrategy, DOM_STRATEGY } from './dom.strategy'; + +export abstract class LoadingStrategy { + constructor( + public path: string, + protected domStrategy: DomStrategy = DOM_STRATEGY.AppendToHead(), + protected crossOriginStrategy: CrossOriginStrategy = CROSS_ORIGIN_STRATEGY.Anonymous(), + ) {} + + abstract createElement(): T; + + createStream(): Observable { + return of(null).pipe( + switchMap(() => + fromLazyLoad(this.createElement(), this.domStrategy, this.crossOriginStrategy), + ), + ); + } +} + +export class ScriptLoadingStrategy extends LoadingStrategy { + constructor(src: string, domStrategy?: DomStrategy, crossOriginStrategy?: CrossOriginStrategy) { + super(src, domStrategy, crossOriginStrategy); + } + + createElement(): HTMLScriptElement { + const element = document.createElement('script'); + element.src = this.path; + + return element; + } +} + +export class StyleLoadingStrategy extends LoadingStrategy { + constructor(href: string, domStrategy?: DomStrategy, crossOriginStrategy?: CrossOriginStrategy) { + super(href, domStrategy, crossOriginStrategy); + } + + createElement(): HTMLLinkElement { + const element = document.createElement('link'); + element.rel = 'stylesheet'; + element.href = this.path; + + return element; + } +} + +export const LOADING_STRATEGY = { + AppendAnonymousScriptToBody(src: string) { + return new ScriptLoadingStrategy(src, DOM_STRATEGY.AppendToBody()); + }, + AppendAnonymousScriptToHead(src: string) { + return new ScriptLoadingStrategy(src); + }, + AppendAnonymousStyleToHead(src: string) { + return new StyleLoadingStrategy(src); + }, + PrependAnonymousScriptToHead(src: string) { + return new ScriptLoadingStrategy(src, DOM_STRATEGY.PrependToHead()); + }, + PrependAnonymousStyleToHead(src: string) { + return new StyleLoadingStrategy(src, DOM_STRATEGY.PrependToHead()); + }, +}; diff --git a/npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts new file mode 100644 index 0000000000..9260cd8948 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts @@ -0,0 +1,90 @@ +import { + CROSS_ORIGIN_STRATEGY, + DOM_STRATEGY, + LOADING_STRATEGY, + ScriptLoadingStrategy, + StyleLoadingStrategy, +} from '../strategies'; + +const path = 'http://example.com/'; + +describe('ScriptLoadingStrategy', () => { + describe('#createElement', () => { + it('should return a script element with src attribute', () => { + const strategy = new ScriptLoadingStrategy(path); + const element = strategy.createElement(); + + expect(element.tagName).toBe('SCRIPT'); + expect(element.src).toBe(path); + }); + }); + + describe('#createStream', () => { + it('should use given dom and cross-origin strategies', done => { + const domStrategy = DOM_STRATEGY.PrependToHead(); + const crossOriginStrategy = CROSS_ORIGIN_STRATEGY.UseCredentials(); + + domStrategy.insertElement = jest.fn((el: HTMLScriptElement) => { + setTimeout(() => { + el.onload(new CustomEvent('success', { detail: el.crossOrigin })); + }, 0); + }) as any; + + const strategy = new ScriptLoadingStrategy(path, domStrategy, crossOriginStrategy); + + strategy.createStream().subscribe(event => { + expect(event.detail).toBe('use-credentials'); + done(); + }); + }); + }); +}); + +describe('StyleLoadingStrategy', () => { + describe('#createElement', () => { + it('should return a style element with href and rel attributes', () => { + const strategy = new StyleLoadingStrategy(path); + const element = strategy.createElement(); + + expect(element.tagName).toBe('LINK'); + expect(element.href).toBe(path); + expect(element.rel).toBe('stylesheet'); + }); + }); + + describe('#createStream', () => { + it('should use given dom and cross-origin strategies', done => { + const domStrategy = DOM_STRATEGY.PrependToHead(); + const crossOriginStrategy = CROSS_ORIGIN_STRATEGY.UseCredentials(); + + domStrategy.insertElement = jest.fn((el: HTMLLinkElement) => { + setTimeout(() => { + el.onload(new CustomEvent('success', { detail: el.crossOrigin })); + }, 0); + }) as any; + + const strategy = new StyleLoadingStrategy(path, domStrategy, crossOriginStrategy); + + strategy.createStream().subscribe(event => { + expect(event.detail).toBe('use-credentials'); + done(); + }); + }); + }); +}); + +describe('LOADING_STRATEGY', () => { + test.each` + name | Strategy | domStrategy + ${'AppendAnonymousScriptToBody'} | ${ScriptLoadingStrategy} | ${'AppendToBody'} + ${'AppendAnonymousScriptToHead'} | ${ScriptLoadingStrategy} | ${'AppendToHead'} + ${'AppendAnonymousStyleToHead'} | ${StyleLoadingStrategy} | ${'AppendToHead'} + ${'PrependAnonymousScriptToHead'} | ${ScriptLoadingStrategy} | ${'PrependToHead'} + ${'PrependAnonymousStyleToHead'} | ${StyleLoadingStrategy} | ${'PrependToHead'} + `( + 'should successfully map $name to $Strategy.name with $domStrategy dom strategy', + ({ name, Strategy, domStrategy }) => { + expect(LOADING_STRATEGY[name](path)).toEqual(new Strategy(path, DOM_STRATEGY[domStrategy]())); + }, + ); +}); From f192fcda494b500a9908275d13dbeb22f9d1fbfb Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 2 Apr 2020 07:04:18 +0300 Subject: [PATCH 086/182] fix(theme-shared): fix overflow problem in collapse animation --- .../src/lib/animations/collapse.animations.ts | 27 +++++++++++++++---- 1 file changed, 22 insertions(+), 5 deletions(-) diff --git a/npm/ng-packs/packages/theme-shared/src/lib/animations/collapse.animations.ts b/npm/ng-packs/packages/theme-shared/src/lib/animations/collapse.animations.ts index e2125c4ea6..945ca6ab08 100644 --- a/npm/ng-packs/packages/theme-shared/src/lib/animations/collapse.animations.ts +++ b/npm/ng-packs/packages/theme-shared/src/lib/animations/collapse.animations.ts @@ -1,4 +1,12 @@ -import { animate, animation, trigger, state, style, transition, useAnimation } from '@angular/animations'; +import { + animate, + animation, + trigger, + state, + style, + transition, + useAnimation, +} from '@angular/animations'; export const collapseY = animation( [ @@ -9,7 +17,10 @@ export const collapseY = animation( ); export const collapseYWithMargin = animation( - [style({ 'margin-top': '0' }), animate('{{ time }} {{ easing }}', style({ 'margin-top': '-100%' }))], + [ + style({ 'margin-top': '0' }), + animate('{{ time }} {{ easing }}', style({ 'margin-left': '-100%' })), + ], { params: { time: '500ms', easing: 'ease' }, }, @@ -32,7 +43,10 @@ export const expandY = animation( ); export const expandYWithMargin = animation( - [style({ 'margin-top': '-100%' }), animate('{{ time }} {{ easing }}', style({ 'margin-top': '0' }))], + [ + style({ 'margin-top': '-100%' }), + animate('{{ time }} {{ easing }}', style({ 'margin-top': '0' })), + ], { params: { time: '500ms', easing: 'ease' }, }, @@ -63,11 +77,14 @@ export const collapseWithMargin = trigger('collapseWithMargin', [ ]); export const collapseLinearWithMargin = trigger('collapseLinearWithMargin', [ - state('collapsed', style({ 'margin-top': '-100%' })), + state('collapsed', style({ 'margin-top': '-100vh' })), state('expanded', style({ 'margin-top': '0' })), transition( 'expanded => collapsed', useAnimation(collapseYWithMargin, { params: { time: '200ms', easing: 'linear' } }), ), - transition('collapsed => expanded', useAnimation(expandYWithMargin, { params: { time: '250ms', easing: 'linear' } })), + transition( + 'collapsed => expanded', + useAnimation(expandYWithMargin, { params: { time: '250ms', easing: 'linear' } }), + ), ]); From ad177e651f9e25148648c8775b57da26dd2fd081 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 2 Apr 2020 12:33:15 +0300 Subject: [PATCH 087/182] docs: add angular and react native startup template documents --- docs/en/Startup-Templates/Application.md | 177 +++++++++++++++++- docs/en/images/angular-folder-structure.png | Bin 0 -> 52691 bytes .../angular-template-structure-diagram.png | Bin 0 -> 123222 bytes .../images/react-native-folder-structure.png | Bin 0 -> 77277 bytes .../react-native-navigation-structure.png | Bin 0 -> 28891 bytes docs/en/images/react-native-store-folder.png | Bin 0 -> 90366 bytes 6 files changed, 172 insertions(+), 5 deletions(-) create mode 100644 docs/en/images/angular-folder-structure.png create mode 100644 docs/en/images/angular-template-structure-diagram.png create mode 100644 docs/en/images/react-native-folder-structure.png create mode 100644 docs/en/images/react-native-navigation-structure.png create mode 100644 docs/en/images/react-native-store-folder.png diff --git a/docs/en/Startup-Templates/Application.md b/docs/en/Startup-Templates/Application.md index 8298c01f1b..af76bb14ff 100644 --- a/docs/en/Startup-Templates/Application.md +++ b/docs/en/Startup-Templates/Application.md @@ -261,14 +261,181 @@ You should run the application with the given order: ### Angular UI -If you choose Angular as the UI framework (using the `-u angular` option), the solution is separated into two folders: +If you choose `Angular` as the UI framework (using the `-u angular` option), the solution is being separated into three folders: -* `angular` folder contains the Angular UI solution, the client side. -* `aspnet-core` folder contains the ASP.NET Core solution, the server side. +* `angular` folder contains the Angular UI application, the client-side code. +* `aspnet-core` folder contains the ASP.NET Core solution, the server-side code. +* `react-native` folder contains the React Native UI application, the client-side code for mobile. -Server side is very similar to the solution described above. `.HttpApi.Host` project serves the API, so the Angular application can consume it. +The server-side is similar to the solution described above. `*.HttpApi.Host` project serves the API, so the `Angular` application consumes it. -The files under the `angular/src/environments` folder has the essential configuration of the application. +Angular application folder structure looks like below: + +![angular-folder-structure](../images/angular-folder-structure.png) + + +Each of ABP Commercial modules is an NPM package. Some ABP modules are added as a dependency in `package.json`. These modules install with their dependencies. To see all ABP packages, you can run the following command in the `angular` folder: + +```bash +yarn list --pattern abp +``` + +Angular application module structure: + +![Angular template structure diagram](../images/angular-template-structure-diagram.png) + +#### AppModule + +`AppModule` is the root module of the application. Some of ABP modules and some essential modules imported to the `AppModule`. + +ABP Config modules also have imported to `AppModule`  for initially requirements of lazy-loadable ABP modules. + +#### AppRoutingModule + +There are lazy-loadable ABP modules in the `AppRoutingModule` as routes. + +> Paths of ABP Modules should not be changed. + +You should add `routes` property in the `data` object to add a link on the menu to redirect to your custom pages. + +```js +{ + path: 'dashboard', + loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule), + canActivate: [AuthGuard, PermissionGuard], + data: { + routes: { + name: 'ProjectName::Menu:Dashboard', + order: 2, + iconClass: 'fa fa-dashboard', + requiredPolicy: 'ProjectName.Dashboard.Host' + } as ABP.Route + } +} +``` +In the above example; +* If the user is not logged in, AuthGuard blocks access and redirects to the login page. +* PermissionGuard checks the user's permission with `requiredPolicy` property of the `rotues` object. If the user is not authorized to access the page, the 403 page appears. +* `name` property of `routes` is the menu link label. A localization key can be defined . +* `iconClass` property of `routes` object is the menu link icon class. +* `requiredPolicy` property of `routes` object is the required policy key to access the page. + +After the above `routes` definition, if the user is authorized, the dashboard link will appear on the menu. + +#### Shared Module + +The modules that may be required for all modules have imported to the `SharedModule`. You should import the `SharedModule` to all modules. + +See the [Sharing Modules](https://angular.io/guide/sharing-ngmodules) document. + +#### Environments + +The files under the `src/environments` folder has the essential configuration of the application. + +#### Home Module + +Home module is an example lazy-loadable module that loads on the root address of the application. + +#### Styles + +The required style files added to `styles` array in the `angular.json`. `AppComponent` loads some style files lazily via `LazyLoadService` after the main bundle is loaded to shorten the first rendering time. + +#### Testing + +You should create your tests in the same folder as the file file you want to test. + +See the [testing document](https://angular.io/guide/testing). + +#### Depended Packages + +* [NG Bootstrap](https://ng-bootstrap.github.io/) is used as UI component library. +* [NGXS](https://www.ngxs.io/) is used as state management library. +* [angular-oauth2-oidc](https://github.com/manfredsteyer/angular-oauth2-oidc) is used to support for OAuth 2 and OpenId Connect (OIDC). +* [Chart.js](https://www.chartjs.org/) is used to create widgets. +* [ngx-validate](https://github.com/ng-turkey/ngx-validate) is used for dynamic validation of reactive forms. + +### React Native + +The solution includes the [React Native](https://reactnative.dev/) application in the `react-native` folder as default. + +The server-side is similar to the solution described above. `*.HttpApi.Host` project serves the API, so the React Native application consumes it. + +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. + +React Native application folder structure as like below: + +![react-native-folder-structure](../images/react-native-folder-structure.png) + +* `App.js` is bootstrap component of the application. +* `Environment.js` file has the essential configuration of the application. `prod` and `dev` configurations defined in this file. +* [Contexts](https://reactjs.org/docs/context.html) are created in the `src/contexts` folder. +* [Higher order components](https://reactjs.org/docs/higher-order-components.html) are created in the`src/hocs` folder. +* [Custom hooks](https://reactjs.org/docs/hooks-custom.html#extracting-a-custom-hook) are created in the`src/hooks`. +* [Axios interceptors](https://github.com/axios/axios#interceptors) are created in the `src/interceptors` folder. +* Utility functions are exported from `src/utils` folder. + +#### Components + +Components that can be used on all screens are created in the `src/components` folder. All components have created as a function that able to use [hooks](https://reactjs.org/docs/hooks-intro.html). + +#### Screens + +![react-native-navigation-structure](../images/react-native-navigation-structure.png) + +Screens are created by creating folders that separate their names in the `src/screens` folder. Certain parts of some screens can be split into components. + +Each screen is used in a navigator in the `src/navigators` folder. + +#### Navigation + +[React Navigation](https://reactnavigation.org/) is used as a navigation library. Navigators are created in the `src/navigators`. A [drawer](https://reactnavigation.org/docs/drawer-based-navigation/) navigator and several [stack](https://reactnavigation.org/docs/hello-react-navigation/#installing-the-stack-navigator-library) navigators have created in this folder. See the [above diagram](#screens) for navigation structure. + +#### State Management + +[Redux](https://redux.js.org/) is used as state management library. [Redux Toolkit](https://redux-toolkit.js.org/) library is used as a toolset for efficient Redux development. + +Actions, reducers, sagas, selectors are created in the `src/store` folder. Store folder as like below: + +![react-native-store-folder](../images/react-native-store-folder.png) + +* [**Store**](https://redux.js.org/basics/store) is defined in the `src/store/index.js` file. +* [**Actions**](https://redux.js.org/basics/actions/) are payloads of information that send data from your application to your store. +* [**Reducers**](https://redux.js.org/basics/reducers) specify how the application's state changes in response to actions sent to the store. +* [**Redux-Saga**](https://redux-saga.js.org/) is a library that aims to make application side effects (i.e. asynchronous things like data fetching and impure things like accessing the browser cache) easier to manage. Sagas are created in the `src/store/sagas` folder. +* [**Reselect**](https://github.com/reduxjs/reselect) library is used to create memoized selectors. Selectors are created in the `src/store/selectors` folder. + +#### APIs + +[Axios](https://github.com/axios/axios) is used as an HTTP client library. An Axios instance has exported from `src/api/API.js` file to make HTTP calls with the same config. `src/api` folder also has the API files that have been created for API calls. + +#### Theming + +[Native Base](https://nativebase.io/) is used as UI components library. Native Base components can customize easily. See the [Native Base customize](https://docs.nativebase.io/Customize.html#Customize) documentation. We followed the same way. + +* Native Base theme variables are in the `src/theme/variables` folder. +* Native Base component styles are in the `src/theme/components` folder. These files have been generated with Native Base's `ejectTheme` script. +* Styles of components override with the files under the `src/theme/overrides` folder. + +#### Testing + +Unit tests will be created. + +See the [Testing Overview](https://reactjs.org/docs/testing.html) document. + +#### Depended Libraries + +* [Native Base](https://nativebase.io/) is used as UI components library. +* [React Navigation](https://reactnavigation.org/) is used as navigation library. +* [Axios](https://github.com/axios/axios) is used as HTTP client library. +* [Redux](https://redux.js.org/) is used as state management library. +* [Redux Toolkit](https://redux-toolkit.js.org/) library is used as a toolset for efficient Redux development. +* [Redux-Saga](https://redux-saga.js.org/) is used to manage asynchronous processes. +* [Redux Persist](https://github.com/rt2zz/redux-persist) is used as state persistance. +* [Reselect](https://github.com/reduxjs/reselect) is used to create memoized selectors. +* [i18n-js](https://github.com/fnando/i18n-js) is used as i18n library. +* [expo-font](https://docs.expo.io/versions/latest/sdk/font/) library allows loading fonts easily. +* [Formik](https://github.com/jaredpalmer/formik) is used to build forms. +* [Yup](https://github.com/jquense/yup) is used for form validations. ## What's Next? diff --git a/docs/en/images/angular-folder-structure.png b/docs/en/images/angular-folder-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..e17eb135ce2d6fa52343fb7a67e08580cbc9859e GIT binary patch literal 52691 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

w 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 literal 0 HcmV?d00001 diff --git a/docs/en/images/react-native-folder-structure.png b/docs/en/images/react-native-folder-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..cf703ea0614a58b99436dcddceccbc0ff3caebef GIT binary patch literal 77277 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≫re0z;$m-%<(+RGlZ>8Aa*1?dOxv9G&7TuZ6GQ6q4P-zsc{d`N;emZUuAK#nk8O=OC=!cSW#dzCCH$`Kuic{p;m70UayV{xS7`zJEL= zArS|Fc6xEh^x^3&j&O@)daA6#_3-Okl&n3qcbvuuaXb$p?Ki(LW@)r^vLaQTR&YqC zr^jXE1u%%H8PG)BW&oS_RgnHxQW=Ors#YKo2EhVl>X{M=8WBh;f(PNudUbXbMZai` zr>$ZaN)5Da{u4W$(oR=$?f$@4yl8DY){OTSi;zQ$f>bCdLRsx6zjZTv&g>e$%}B(4 z+$1Kb-lUkI|0pAbWyJU&;wu7{^6`t%?_M!-BC|PiZh;a*GLAOo#JJCc6ks-LFC*JB z8Nf62-@WJwMl$ZXEFJxzZ`IrWO?{n6Y0iv|w!?|vu(1i3w&|;((P~2{9jAek+!l=( zQsgoFtI|9qVjuFsKSqs+6=;adkxS|ytX2J2R1`MoaMu7idSx|Lrh9)VE#8sQK8KkJ=b)+#0ZWg_hlRv5i9AK z5*;%{HHY&VWnCmOA1D5Vgyv-caE5NzzGz4aNUA(Q5vYiL%TE!0_DMD6@Q9X*vvTuT zaQ@wZP8C;RsZ$+I!NTtsD*M|L_U?o##7QLX-|9cEQpGSxs+mhSH)e;%4*N(gSFBG2z&ifK)x;g8=Fx5xs(lV>je;n=Ah$ zw2)PI#YyX`z3*EoYB}HF!HnzwQG*m|D9>wcrZ zDz2Tu*CutW>O4YG;O~zHTFv=+AscYUzB)39wJlsOt#qR5Ic<*nohys^lqufekZ}1I zmJ2Pr=c;rAoR0Eeli#Hgi7e_zp4i^KRg50GS!JMDI*P@m1_CLvqMqT>#BPlzyz39J zpT)WIXX@|}AcT{S4q6VIVet zsn`|J2bTVK@EACfv$Z-_J*O$hAI=lK`+4wXmH)24*#Gt-P!RRq%}pYycOBa4;r~r- zoi}jqw{-9SSarqR--*{ z&AQ%!Fcg0X^zyNmFHm%v(r4W(Z4<*R8J~VkAYodl8ldMO{HZi67+3ug%}j&&VIUzltey|7Cb;KGUMCno%;Tcm+_q%}Gx`JYe4iFLQttwD;+$LUT5{dK%9}<~l&N#PgPX zf#~!TS~cpR`-X`AB7ZR#ubJD9cv>~Moi~L>QX>!M($4IHntp_D4*deCdBz_ANVz3} zFo-6bh3G6!d)1=Ne2Yj^n3D7_MdN2ii3wp4ctlOE*akQL5hr4ZxvBa0xFYq7b&){A z-fw&RM!Z%#&2PHJ$ri)>f{Wp^DT|HqU(1w+t)2_9-Z?RIX36FE*oX5ZQ#)87_#1_^ zcrk_C`eD5^gR0&f<~Oi)iVtXSzM*S4ue7G;(H$1|$NVs{Fpq%=IMd70Lzc{~-UGn_ zdY6MFLwluFQX(033sT~W4xVY8vYqrIqn+lz@SjL2sc1cmvFhudRslit0C`#nXW@5d z)Ua{#HcbE7t6jCXc#lLqU+(3j`+A^NhtjsjeSR^&D1g|oda@vNyv;<8i_Kc7H9-Us zg37D1RGB{!?2luJ{@-VY;=djil_W{N*nd&AXt#0g6s6`Ze+5-my5 zL|c9Q3h*ixcUtnSl#9r5;OtPl4M0H47m({V$FxVdi-<4;29XX@D@H=6a8O(+R=3?R zf`Ws@3YXj`T}%?xK3Vlwl0S_#ACa!slnCs)`NM+ryt7~y)k?HZ1He>2@ggeHl-+v{ zzK>uV^t9>YD*j;TLp9wqk$A+V23J34iq+@E98|e}d-vt;rO+xJ>uGEDEY_)@&P|io zf3WS#&Q)(e9Y{t@$C`1GSdYQDeAmrU(^F#W33<&0KR5{jtPJ!RT^&w)9gMQ$+rD_F z>DbYZnACM^5^IZQwm!{YPL{W*)QCP57x0O8pHC1 z$n0+i+%_DS?L;;bz-}PJ9vj57A1#L?BoNnN2D2TR zu=-(wOcwsz8V3&g0oY1VGz(OtWvT*%KF$OrhG4DSc7ZujYEl; zQeWj{a@qwKVojkR;TxWX*l9OKT)?xH(;+pVgU*9{Y3wx1y0F9rH>;kJ=ikLphL63b z(PNzm*m{}zU&QI6eof_@kftV)-F{lU2$Ml zutccujdfjntTU_p_pTDguslHeHR`ld*-@qRhirRAKHTP@VPW{GVRFtTU;j$(XNfQ( zVqkuC^OE+QSbO`=h*XWtak2hX^UsCwr~UM z=n=z68js80x8Jy+5Fmolwdnnc%&7@mv%n$7Rqz)PTYEyR!{Net^l0n}vwmYu*s=g) zgR?Ro)Vve7F>y|C;8tsi$nvnqryS6P_l*{YZ1o5td^NaNny6Zw9}INapj6SbHU_n5 z*A^7Tg%#3^sEjt|W|i@V@s}Bx&gGm_0#KWJQfAKL9U>AfUdp(#C%WGMb?4KIaEGQ4 z+GAQBFa&*2Z&6`1!-amO5ut=cSlf@s`7M4F=HD zwL#q26}n?57giQJuFmHzn^m^X4>#=!pXde6I=?O;E=v=GxQ!bXGc&aZ%8MQS3Li?I2LnVWCS&&v6H8tf#{Aw-GoF56G*(zdKup1aSO{^VeQ_uwJGP{|0bku!mK%V+_yL7Fd z?9{x)3C?Q$>eS4JFnyDrST1BYHK%*Jv?%XbF{F23uM(``;; z2(Qy1QC?Zxl&h`wse{EwC*Q3AMH6xh2Sl-u07h0kdeCz{XCFEIBVWa4w^*{gPejb3_koQwa}S7)-R*Ub zi{+=*L;uIePD_5%~Og}`T`cvGHTOA_h2HxhH% zGSKu?2C}=b+Pm9y*}eLe7sL!aLE;;6GIYixfj@rGUfi10&!ZKO7m~k1yggs6$UP>% z180b6j?1Lkw=rf+@~-<4lc?v?*x>p&9+>o)7(}iEFlKa|qVZ%fj_2E43b(g;uKle9 z+aD~{qPy_kQ=WgCZ2y7o3NiEmhi==jEf$uiOF_*$-s{dMl9s1sQ6`__zP6Jhu($f< zs(yI1pj5GRxpbaS{iPC{J;*3bemsAyhyauYVlNLWQho^jm1N+Ev#XAji22mIA?ag= ztdDC<#3@TqtV2Z)Ef-Z6&f4qlZU%h%@-khOV^3Hf4A(aH=)n_@zujAk0gC#uslT3R zin`CKkMS*i^4j+epDmG(L756kX9BgNt|oDc_l@P@4$!rN-$i7gT9mG^_RD`Biw4pk zhtRX7Xx|$+o97iXJBQG5mL{bLey@>rwd6l(FvksN{}Tq01^y!nrE>+rv0u%CwLjEF zr(qKhCO#)Ti0SgDd{5lkuc*pw##)Bg`l3B?F*t`c$WZS-{FGeCCaw4}0mNz`LCk)J zvm>ENFk+MCw|O|LR7eKJknYg?HOH=yi(>Uigu+w^z*bDW7bsqvI*BO)7a^ zv$4WQUPkW7_HL*}G24CP**ZtODM^T>_?vRY5CpXVc^#Pt(8;R1(woJ8+|5ZMGoqYj z47gz8t&i)rRMh*eaM<`utz|uwHb1fgDN6h~%Lqn9GJ)dKXdDIpEx5-ylsG*i?+z4V z;)0x1={{QqIV_G$fA01;qj=!-0Vfk8ckdBR$}_t-40|jBevKtJB&j_D9~tehpg#?A z5u_{VeWmo<%8JuZs*3XnkM(tytuE+AN#1I%#c+-fjePY-dKi+T9B|pJIqkdL;TWny zB^r_tKQu{fw5l)9Z0$1r|3;+f#k$~g%I6Fwvg{ONB1}J|wyuZnF0aXK1TjC?OG-G# zOs8M75ZFp5M-TSl?u0UmD=Ch|Y1Jxx>JbZnR?MA+8J*TM7;*xJbZnU4DUgo-e+OBv zg1Yb5NA^J%n$|3a=LgH;-#8yW$TE-vUK@-FpImuW{{s`jx>5uf>z}t6j{emF$`=3U z5#e~*{NXl{rpoU49VOE zp=KGmv+hSJQ(GFcdQeyE!XZso{4|d0cl378R|70w)ifLU1Sk7gFwQu}hZaUre+_>z z?4J-c%6SLHdhe6H^_`c^>TZBEN@4o))Se30c9Y5f5e^a~-!%d7y8F3J-A5>y5ZQq62oq zbr#l4G@G7K)px{1f}jBs`9m-nvJv$s7g`n-|C z$Lv9jK1_46eT0vU1sjS2sdnbCb>iseE2QZA+Fzj>adPM7>?7iVsu?6F zSSC^K1*$nG9gFBk7>4gK1RF(_r}>W(@W=)j1>}tJ!m%&FgxO2b>*Ps!Dj?f82`u94nB7Y?C$^1pX=5&!@I literal 0 HcmV?d00001 diff --git a/docs/en/images/react-native-navigation-structure.png b/docs/en/images/react-native-navigation-structure.png new file mode 100644 index 0000000000000000000000000000000000000000..9f17375b68077f0e42d40de7f6074acf15dd33c1 GIT binary patch literal 28891 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 VO2v{pa{CMZDP2{QFOt0z_& Date: Thu, 2 Apr 2020 13:20:08 +0300 Subject: [PATCH 088/182] feat(core): add content security strategy --- .../strategies/content-security.strategy.ts | 32 +++++++++++++ .../packages/core/src/lib/strategies/index.ts | 1 + .../src/lib/strategies/loading.strategy.ts | 27 ++++++++--- .../tests/content-security.strategy.spec.ts | 41 +++++++++++++++++ .../src/lib/tests/lazy-load-utils.spec.ts | 45 +++++++++++++++++-- .../src/lib/tests/loading.strategy.spec.ts | 43 +++++++++++++++--- .../core/src/lib/utils/lazy-load-utils.ts | 4 ++ 7 files changed, 178 insertions(+), 15 deletions(-) create mode 100644 npm/ng-packs/packages/core/src/lib/strategies/content-security.strategy.ts create mode 100644 npm/ng-packs/packages/core/src/lib/tests/content-security.strategy.spec.ts diff --git a/npm/ng-packs/packages/core/src/lib/strategies/content-security.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/content-security.strategy.ts new file mode 100644 index 0000000000..54016b5836 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/strategies/content-security.strategy.ts @@ -0,0 +1,32 @@ +export abstract class ContentSecurityStrategy { + constructor(public nonce?: string) {} + + abstract applyCSP(element: HTMLScriptElement | HTMLStyleElement): void; +} + +export class StrictContentSecurityStrategy extends ContentSecurityStrategy { + constructor(nonce: string) { + super(nonce); + } + + applyCSP(element: HTMLScriptElement | HTMLStyleElement) { + element.setAttribute('nonce', this.nonce); + } +} + +export class LooseContentSecurityStrategy extends ContentSecurityStrategy { + constructor() { + super(); + } + + applyCSP(_: HTMLScriptElement | HTMLStyleElement) {} +} + +export const CONTENT_SECURITY_STRATEGY = { + Loose() { + return new LooseContentSecurityStrategy(); + }, + Strict(nonce: string) { + return new StrictContentSecurityStrategy(nonce); + }, +}; diff --git a/npm/ng-packs/packages/core/src/lib/strategies/index.ts b/npm/ng-packs/packages/core/src/lib/strategies/index.ts index 915887f92a..93904af549 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/index.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/index.ts @@ -1,3 +1,4 @@ +export * from './content-security.strategy'; export * from './cross-origin.strategy'; export * from './dom.strategy'; export * from './loading.strategy'; diff --git a/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts index eae23a0c7f..5c8bd485ca 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts @@ -1,6 +1,7 @@ import { Observable, of } from 'rxjs'; import { switchMap } from 'rxjs/operators'; import { fromLazyLoad } from '../utils'; +import { ContentSecurityStrategy, CONTENT_SECURITY_STRATEGY } from './content-security.strategy'; import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from './cross-origin.strategy'; import { DomStrategy, DOM_STRATEGY } from './dom.strategy'; @@ -9,6 +10,7 @@ export abstract class LoadingStrategy(): Observable { return of(null).pipe( switchMap(() => - fromLazyLoad(this.createElement(), this.domStrategy, this.crossOriginStrategy), + fromLazyLoad( + this.createElement(), + this.domStrategy, + this.crossOriginStrategy, + this.contentSecurityStrategy, + ), ), ); } } export class ScriptLoadingStrategy extends LoadingStrategy { - constructor(src: string, domStrategy?: DomStrategy, crossOriginStrategy?: CrossOriginStrategy) { - super(src, domStrategy, crossOriginStrategy); + constructor( + src: string, + domStrategy?: DomStrategy, + crossOriginStrategy?: CrossOriginStrategy, + contentSecurityStrategy?: ContentSecurityStrategy, + ) { + super(src, domStrategy, crossOriginStrategy, contentSecurityStrategy); } createElement(): HTMLScriptElement { @@ -36,8 +48,13 @@ export class ScriptLoadingStrategy extends LoadingStrategy { } export class StyleLoadingStrategy extends LoadingStrategy { - constructor(href: string, domStrategy?: DomStrategy, crossOriginStrategy?: CrossOriginStrategy) { - super(href, domStrategy, crossOriginStrategy); + constructor( + href: string, + domStrategy?: DomStrategy, + crossOriginStrategy?: CrossOriginStrategy, + contentSecurityStrategy?: ContentSecurityStrategy, + ) { + super(href, domStrategy, crossOriginStrategy, contentSecurityStrategy); } createElement(): HTMLLinkElement { diff --git a/npm/ng-packs/packages/core/src/lib/tests/content-security.strategy.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/content-security.strategy.spec.ts new file mode 100644 index 0000000000..06db799ca0 --- /dev/null +++ b/npm/ng-packs/packages/core/src/lib/tests/content-security.strategy.spec.ts @@ -0,0 +1,41 @@ +import { + CONTENT_SECURITY_STRATEGY, + LooseContentSecurityStrategy, + StrictContentSecurityStrategy, +} from '../strategies'; +import { uuid } from '../utils'; + +describe('LooseContentSecurityStrategy', () => { + describe('#applyCSP', () => { + it('should not set nonce attribute', () => { + const strategy = new LooseContentSecurityStrategy(); + const element = document.createElement('link'); + strategy.applyCSP(element); + + expect(element.getAttribute('nonce')).toBeNull(); + }); + }); +}); + +describe('StrictContentSecurityStrategy', () => { + describe('#applyCSP', () => { + it('should set nonce attribute', () => { + const nonce = uuid(); + const strategy = new StrictContentSecurityStrategy(nonce); + const element = document.createElement('link'); + strategy.applyCSP(element); + + expect(element.getAttribute('nonce')).toBe(nonce); + }); + }); +}); + +describe('CONTENT_SECURITY_STRATEGY', () => { + test.each` + name | Strategy | nonce + ${'Loose'} | ${LooseContentSecurityStrategy} | ${undefined} + ${'Strict'} | ${StrictContentSecurityStrategy} | ${uuid()} + `('should successfully map $name to $Strategy.name', ({ name, Strategy, nonce }) => { + expect(CONTENT_SECURITY_STRATEGY[name](nonce)).toEqual(new Strategy(nonce)); + }); +}); diff --git a/npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts index 657afeead1..9f1212b78c 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts @@ -1,4 +1,9 @@ -import { DomStrategy, DOM_STRATEGY } from '../strategies'; +import { + ContentSecurityStrategy, + CONTENT_SECURITY_STRATEGY, + DomStrategy, + DOM_STRATEGY, +} from '../strategies'; import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from '../strategies/cross-origin.strategy'; import { uuid } from '../utils'; import { fromLazyLoad } from '../utils/lazy-load-utils'; @@ -33,7 +38,15 @@ describe('Lazy Load Utils', () => { expect(element.crossOrigin).toBe('anonymous'); }); - it('should allow setting a crossorigin strategy', () => { + it('should not set integrity by default', () => { + const element = document.createElement('link'); + + fromLazyLoad(element); + + expect(element.getAttribute('integrity')).toBeNull(); + }); + + it('should allow setting a cross-origin strategy', () => { const element = document.createElement('link'); const integrity = uuid(); @@ -44,6 +57,24 @@ describe('Lazy Load Utils', () => { expect(element.getAttribute('integrity')).toBe(integrity); }); + it('should not set nonce by default', () => { + const element = document.createElement('link'); + + fromLazyLoad(element); + + expect(element.getAttribute('nonce')).toBeNull(); + }); + + it('should allow setting a content security strategy', () => { + const element = document.createElement('link'); + + const nonce = uuid(); + + fromLazyLoad(element, undefined, undefined, CONTENT_SECURITY_STRATEGY.Strict(nonce)); + + expect(element.getAttribute('nonce')).toBe(nonce); + }); + it('should emit error event on fail and clear callbacks', done => { const error = new CustomEvent('error'); const parentNode = { removeChild: jest.fn() }; @@ -61,8 +92,11 @@ describe('Lazy Load Utils', () => { }, } as DomStrategy, { - setCrossOrigin(el: HTMLLinkElement) {}, + setCrossOrigin(_: HTMLLinkElement) {}, } as CrossOriginStrategy, + { + applyCSP(_: HTMLLinkElement) {}, + } as ContentSecurityStrategy, ).subscribe({ error: value => { expect(value).toBe(error); @@ -90,8 +124,11 @@ describe('Lazy Load Utils', () => { }, } as DomStrategy, { - setCrossOrigin(el: HTMLLinkElement) {}, + setCrossOrigin(_: HTMLLinkElement) {}, } as CrossOriginStrategy, + { + applyCSP(_: HTMLLinkElement) {}, + } as ContentSecurityStrategy, ).subscribe({ next: value => { expect(value).toBe(success); diff --git a/npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts index 9260cd8948..745b858ff3 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts @@ -1,12 +1,15 @@ import { + CONTENT_SECURITY_STRATEGY, CROSS_ORIGIN_STRATEGY, DOM_STRATEGY, LOADING_STRATEGY, ScriptLoadingStrategy, StyleLoadingStrategy, } from '../strategies'; +import { uuid } from '../utils'; const path = 'http://example.com/'; +const nonce = uuid(); describe('ScriptLoadingStrategy', () => { describe('#createElement', () => { @@ -23,17 +26,31 @@ describe('ScriptLoadingStrategy', () => { it('should use given dom and cross-origin strategies', done => { const domStrategy = DOM_STRATEGY.PrependToHead(); const crossOriginStrategy = CROSS_ORIGIN_STRATEGY.UseCredentials(); + const contentSecurityStrategy = CONTENT_SECURITY_STRATEGY.Strict(nonce); domStrategy.insertElement = jest.fn((el: HTMLScriptElement) => { setTimeout(() => { - el.onload(new CustomEvent('success', { detail: el.crossOrigin })); + el.onload( + new CustomEvent('success', { + detail: { + crossOrigin: el.crossOrigin, + nonce: el.getAttribute('nonce'), + }, + }), + ); }, 0); }) as any; - const strategy = new ScriptLoadingStrategy(path, domStrategy, crossOriginStrategy); + const strategy = new ScriptLoadingStrategy( + path, + domStrategy, + crossOriginStrategy, + contentSecurityStrategy, + ); strategy.createStream().subscribe(event => { - expect(event.detail).toBe('use-credentials'); + expect(event.detail.crossOrigin).toBe('use-credentials'); + expect(event.detail.nonce).toBe(nonce); done(); }); }); @@ -56,17 +73,31 @@ describe('StyleLoadingStrategy', () => { it('should use given dom and cross-origin strategies', done => { const domStrategy = DOM_STRATEGY.PrependToHead(); const crossOriginStrategy = CROSS_ORIGIN_STRATEGY.UseCredentials(); + const contentSecurityStrategy = CONTENT_SECURITY_STRATEGY.Strict(nonce); domStrategy.insertElement = jest.fn((el: HTMLLinkElement) => { setTimeout(() => { - el.onload(new CustomEvent('success', { detail: el.crossOrigin })); + el.onload( + new CustomEvent('success', { + detail: { + crossOrigin: el.crossOrigin, + nonce: el.getAttribute('nonce'), + }, + }), + ); }, 0); }) as any; - const strategy = new StyleLoadingStrategy(path, domStrategy, crossOriginStrategy); + const strategy = new StyleLoadingStrategy( + path, + domStrategy, + crossOriginStrategy, + contentSecurityStrategy, + ); strategy.createStream().subscribe(event => { - expect(event.detail).toBe('use-credentials'); + expect(event.detail.crossOrigin).toBe('use-credentials'); + expect(event.detail.nonce).toBe(nonce); done(); }); }); diff --git a/npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts index 5aee3bc715..598db332f8 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts @@ -1,5 +1,7 @@ import { Observable, Observer } from 'rxjs'; import { + ContentSecurityStrategy, + CONTENT_SECURITY_STRATEGY, CrossOriginStrategy, CROSS_ORIGIN_STRATEGY, DomStrategy, @@ -10,8 +12,10 @@ export function fromLazyLoad( element: HTMLScriptElement | HTMLLinkElement, domStrategy: DomStrategy = DOM_STRATEGY.AppendToHead(), crossOriginStrategy: CrossOriginStrategy = CROSS_ORIGIN_STRATEGY.Anonymous(), + contentSecurityStrategy: ContentSecurityStrategy = CONTENT_SECURITY_STRATEGY.Loose(), ): Observable { crossOriginStrategy.setCrossOrigin(element); + contentSecurityStrategy.applyCSP(element); domStrategy.insertElement(element); return Observable.create((observer: Observer) => { From 82f6a65a89fd1455071dfef6eb8b1e0dbcfd58ff Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Thu, 2 Apr 2020 13:30:02 +0300 Subject: [PATCH 089/182] description max length updated to 1000. --- .../Volo/Blogging/Posts/PostConsts.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Posts/PostConsts.cs b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Posts/PostConsts.cs index 898de49943..c489158704 100644 --- a/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Posts/PostConsts.cs +++ b/modules/blogging/src/Volo.Blogging.Domain.Shared/Volo/Blogging/Posts/PostConsts.cs @@ -8,7 +8,7 @@ public const int MaxContentLength = 1024 * 1024; //1MB - public const int MaxDescriptionLength = 200; + public const int MaxDescriptionLength = 1000; } } From 12f4b53e8dec8b9e74cee5d77ace44be1c0009a5 Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Thu, 2 Apr 2020 13:34:59 +0300 Subject: [PATCH 090/182] feat(theme-basic): add login button to the header resolves #3448 --- .../application-layout.component.html | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html index 9d953dbf5e..ecb3509ce2 100644 --- a/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html +++ b/npm/ng-packs/packages/theme-basic/src/lib/components/application-layout/application-layout.component.html @@ -195,8 +195,19 @@ -

+ diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml.cs b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml.cs index 614d4cdc93..353e469590 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml.cs +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/New.cshtml.cs @@ -55,12 +55,12 @@ namespace Volo.Blogging.Pages.Blog.Posts { var blog = await _blogAppService.GetAsync(Post.BlogId); - if (Post.Description == null) + if (string.IsNullOrEmpty(Post.Description)) { - Post.Description = Post.Content.Substring(0, 200); + Post.Description = Post.Content.Truncate(PostConsts.MaxSeoFriendlyDescriptionLength); } - var postWithDetailsDto = await _postAppService.CreateAsync(ObjectMapper.Map(Post)); + var postWithDetailsDto = await _postAppService.CreateAsync(ObjectMapper.Map(Post)); //TODO: Try Url.Page(...) var urlPrefix = _blogOptions.RoutePrefix; diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js index 76d4b6d6db..e02ec975fe 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/edit.js @@ -5,11 +5,18 @@ var $submitButton = $container.find("button[type=submit]"); var $form = $container.find("form#edit-post-form"); var editorDataKey = "tuiEditor"; - var maxTitleLength = 60; + var $titleLengthWarning = $("#title-length-warning"); + var maxTitleLength = parseInt($titleLengthWarning.data("max-length")); + + var $title = $('#Post_Title'); + var $coverImage = $("#CoverImage"); + var $postCoverImage = $('#Post_CoverImage'); + var $coverImageFile = $('#CoverImageFile'); + var setCoverImage = function (file) { - $('#Post_CoverImage').val(file.fileUrl); - $("#CoverImage").attr("src", file.fileUrl); + $postCoverImage.val(file.fileUrl); + $coverImage.attr("src", file.fileUrl); }; var uploadCoverImage = function (file) { @@ -29,26 +36,27 @@ }; var checkTitleLength = function () { - var title = $('#Post_Title').val(); + var title = $title.val(); if (title.length > maxTitleLength) { - $("#title-length-warning").css("display", "block"); + $titleLengthWarning.show(); } else { - $("#title-length-warning").css("display", "none"); + $titleLengthWarning.hide(); } }; checkTitleLength(); - $('#Post_Title').on("change paste keyup", function () { + $title.on("change paste keyup", function () { checkTitleLength(); }); - $('#CoverImageFile').change(function () { - if (!$('#CoverImageFile').prop('files').length) { + $coverImageFile.change(function () { + if (!$coverImageFile.prop('files').length) { return; } - var file = $('#CoverImageFile').prop('files')[0]; + + var file = $coverImageFile.prop('files')[0]; uploadCoverImage(file); }); @@ -110,6 +118,7 @@ $submitButton.buttonBusy(); $(this).off('submit').submit(); + return true; }); }); diff --git a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js index aa8cfdcf6f..3edacd49b5 100644 --- a/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js +++ b/modules/blogging/src/Volo.Blogging.Web/Pages/Blogs/Posts/new.js @@ -5,12 +5,18 @@ var $submitButton = $container.find("button[type=submit]"); var $form = $container.find("form#new-post-form"); var editorDataKey = "tuiEditor"; - var maxTitleLength = 60; + var $titleLengthWarning = $("#title-length-warning"); + var maxTitleLength = parseInt($titleLengthWarning.data("max-length")); + var $title = $('#Post_Title'); + var $url = $('#Post_Url'); + var $coverImage = $("#CoverImage"); + var $postCoverImage = $('#Post_CoverImage'); + var $coverImageFile = $('#CoverImageFile'); var setCoverImage = function (file) { - $('#Post_CoverImage').val(file.fileUrl); - $("#CoverImage").attr("src", file.fileUrl); - $("#CoverImage").show(); + $postCoverImage.val(file.fileUrl); + $coverImage.attr("src", file.fileUrl); + $coverImage.show(); }; var uploadCoverImage = function (file) { @@ -29,11 +35,11 @@ }); }; - $('#CoverImageFile').change(function () { - if (!$('#CoverImageFile').prop('files').length) { + $coverImageFile.change(function () { + if (!$coverImageFile.prop('files').length) { return; } - var file = $('#CoverImageFile').prop('files')[0]; + var file = $coverImageFile.prop('files')[0]; uploadCoverImage(file); }); @@ -41,7 +47,7 @@ var formData = new FormData(); formData.append('file', file); - $.ajax({ + $.ajax({ type: "POST", url: "/api/blogging/files/images/upload", data: formData, @@ -93,35 +99,36 @@ $submitButton.buttonBusy(); $(this).off('submit').submit(); + return true; }); var urlEdited = false; var reflectedChange = false; - $('#Post_Title').on("change paste keyup", function () { + $title.on("change paste keyup", function () { if (urlEdited) { return; } - var title = $('#Post_Title').val(); + var title = $title.val(); if (title.length > maxTitleLength) { - $("#title-length-warning").css("display", "block"); + $titleLengthWarning.show(); } else { - $("#title-length-warning").css("display", "none"); + $titleLengthWarning.hide(); } title = title.replace(' ', '-'); title = title.replace(new RegExp(' ', 'g'), '-'); reflectedChange = true; - $('#Post_Url').val(title); + $url.val(title); reflectedChange = false; }); - $('#Post_Url').change(function () { + $url.change(function () { if (!reflectedChange) { urlEdited = true; } }); -}); +}); \ No newline at end of file From 54428be03f9a7958b6c77ec991c7f2c0922eacfe Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 2 Apr 2020 15:33:55 +0300 Subject: [PATCH 097/182] fix(core): add default values to load method --- .../packages/core/src/lib/services/lazy-load.service.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/services/lazy-load.service.ts b/npm/ng-packs/packages/core/src/lib/services/lazy-load.service.ts index f9c3cbeb55..b7400c3193 100644 --- a/npm/ng-packs/packages/core/src/lib/services/lazy-load.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/lazy-load.service.ts @@ -29,8 +29,8 @@ export class LazyLoadService { ): Observable { if (strategyOrUrl instanceof LoadingStrategy) { const strategy = strategyOrUrl; - const retryTimes = retryTimesOrType as number; - const retryDelay = retryDelayOrContent as number; + const retryTimes = (retryTimesOrType as number) || 2; + const retryDelay = (retryDelayOrContent as number) || 1000; if (this.loaded.has(strategy.path)) return of(new CustomEvent('load')); @@ -48,7 +48,7 @@ export class LazyLoadService { } let urlOrUrls = strategyOrUrl; - const content = retryDelayOrContent as string; + const content = (retryDelayOrContent as string) || ''; const type = retryTimesOrType as 'script' | 'style'; if (!urlOrUrls && !content) { From ae6475eb4b819c4955424ada3edae1aaf84abdaa Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 2 Apr 2020 15:43:54 +0300 Subject: [PATCH 098/182] feat(core): enable 0 retries and 0 delay retries --- .../packages/core/src/lib/services/lazy-load.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/services/lazy-load.service.ts b/npm/ng-packs/packages/core/src/lib/services/lazy-load.service.ts index b7400c3193..5e605d8c5d 100644 --- a/npm/ng-packs/packages/core/src/lib/services/lazy-load.service.ts +++ b/npm/ng-packs/packages/core/src/lib/services/lazy-load.service.ts @@ -29,8 +29,8 @@ export class LazyLoadService { ): Observable { if (strategyOrUrl instanceof LoadingStrategy) { const strategy = strategyOrUrl; - const retryTimes = (retryTimesOrType as number) || 2; - const retryDelay = (retryDelayOrContent as number) || 1000; + const retryTimes = typeof retryTimesOrType === 'number' ? retryTimesOrType : 2; + const retryDelay = typeof retryDelayOrContent === 'number' ? retryDelayOrContent : 1000; if (this.loaded.has(strategy.path)) return of(new CustomEvent('load')); From 21095025a97f6db9d8344a774d322ab600c3c1c7 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 2 Apr 2020 16:11:57 +0300 Subject: [PATCH 099/182] feat(core): add optional integrity in loading strategies --- .../src/lib/strategies/loading.strategy.ts | 40 ++++++++++++++----- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts index 113ab9a853..2882c3f0a6 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts @@ -67,19 +67,39 @@ export class StyleLoadingStrategy extends LoadingStrategy { } export const LOADING_STRATEGY = { - AppendAnonymousScriptToBody(src: string) { - return new ScriptLoadingStrategy(src, DOM_STRATEGY.AppendToBody()); + AppendAnonymousScriptToBody(src: string, integrity?: string) { + return new ScriptLoadingStrategy( + src, + DOM_STRATEGY.AppendToBody(), + CROSS_ORIGIN_STRATEGY.Anonymous(integrity), + ); }, - AppendAnonymousScriptToHead(src: string) { - return new ScriptLoadingStrategy(src); + AppendAnonymousScriptToHead(src: string, integrity?: string) { + return new ScriptLoadingStrategy( + src, + DOM_STRATEGY.AppendToHead(), + CROSS_ORIGIN_STRATEGY.Anonymous(integrity), + ); }, - AppendAnonymousStyleToHead(src: string) { - return new StyleLoadingStrategy(src); + AppendAnonymousStyleToHead(src: string, integrity?: string) { + return new StyleLoadingStrategy( + src, + DOM_STRATEGY.AppendToHead(), + CROSS_ORIGIN_STRATEGY.Anonymous(integrity), + ); }, - PrependAnonymousScriptToHead(src: string) { - return new ScriptLoadingStrategy(src, DOM_STRATEGY.PrependToHead()); + PrependAnonymousScriptToHead(src: string, integrity?: string) { + return new ScriptLoadingStrategy( + src, + DOM_STRATEGY.PrependToHead(), + CROSS_ORIGIN_STRATEGY.Anonymous(integrity), + ); }, - PrependAnonymousStyleToHead(src: string) { - return new StyleLoadingStrategy(src, DOM_STRATEGY.PrependToHead()); + PrependAnonymousStyleToHead(src: string, integrity?: string) { + return new StyleLoadingStrategy( + src, + DOM_STRATEGY.PrependToHead(), + CROSS_ORIGIN_STRATEGY.Anonymous(integrity), + ); }, }; From 7da8011eeeeed041bdef9c25e591fefe3ff759cd Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 2 Apr 2020 19:59:20 +0300 Subject: [PATCH 100/182] refactor(core): separate lazy load & content insertion --- .../src/lib/strategies/loading.strategy.ts | 27 +++------------- .../src/lib/tests/lazy-load-utils.spec.ts | 31 +------------------ .../src/lib/tests/loading.strategy.spec.ts | 23 ++------------ .../core/src/lib/utils/lazy-load-utils.ts | 6 ---- 4 files changed, 8 insertions(+), 79 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts index 2882c3f0a6..be89a751ed 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/loading.strategy.ts @@ -1,7 +1,6 @@ import { Observable, of } from 'rxjs'; import { switchMap } from 'rxjs/operators'; import { fromLazyLoad } from '../utils'; -import { ContentSecurityStrategy, CONTENT_SECURITY_STRATEGY } from './content-security.strategy'; import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from './cross-origin.strategy'; import { DomStrategy, DOM_STRATEGY } from './dom.strategy'; @@ -10,7 +9,6 @@ export abstract class LoadingStrategy(): Observable { return of(null).pipe( switchMap(() => - fromLazyLoad( - this.createElement(), - this.domStrategy, - this.crossOriginStrategy, - this.contentSecurityStrategy, - ), + fromLazyLoad(this.createElement(), this.domStrategy, this.crossOriginStrategy), ), ); } } export class ScriptLoadingStrategy extends LoadingStrategy { - constructor( - src: string, - domStrategy?: DomStrategy, - crossOriginStrategy?: CrossOriginStrategy, - contentSecurityStrategy?: ContentSecurityStrategy, - ) { - super(src, domStrategy, crossOriginStrategy, contentSecurityStrategy); + constructor(src: string, domStrategy?: DomStrategy, crossOriginStrategy?: CrossOriginStrategy) { + super(src, domStrategy, crossOriginStrategy); } createElement(): HTMLScriptElement { @@ -48,13 +36,8 @@ export class ScriptLoadingStrategy extends LoadingStrategy { } export class StyleLoadingStrategy extends LoadingStrategy { - constructor( - href: string, - domStrategy?: DomStrategy, - crossOriginStrategy?: CrossOriginStrategy, - contentSecurityStrategy?: ContentSecurityStrategy, - ) { - super(href, domStrategy, crossOriginStrategy, contentSecurityStrategy); + constructor(href: string, domStrategy?: DomStrategy, crossOriginStrategy?: CrossOriginStrategy) { + super(href, domStrategy, crossOriginStrategy); } createElement(): HTMLLinkElement { diff --git a/npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts index 9f1212b78c..7afb343e80 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/lazy-load-utils.spec.ts @@ -1,9 +1,4 @@ -import { - ContentSecurityStrategy, - CONTENT_SECURITY_STRATEGY, - DomStrategy, - DOM_STRATEGY, -} from '../strategies'; +import { DomStrategy, DOM_STRATEGY } from '../strategies'; import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from '../strategies/cross-origin.strategy'; import { uuid } from '../utils'; import { fromLazyLoad } from '../utils/lazy-load-utils'; @@ -57,24 +52,6 @@ describe('Lazy Load Utils', () => { expect(element.getAttribute('integrity')).toBe(integrity); }); - it('should not set nonce by default', () => { - const element = document.createElement('link'); - - fromLazyLoad(element); - - expect(element.getAttribute('nonce')).toBeNull(); - }); - - it('should allow setting a content security strategy', () => { - const element = document.createElement('link'); - - const nonce = uuid(); - - fromLazyLoad(element, undefined, undefined, CONTENT_SECURITY_STRATEGY.Strict(nonce)); - - expect(element.getAttribute('nonce')).toBe(nonce); - }); - it('should emit error event on fail and clear callbacks', done => { const error = new CustomEvent('error'); const parentNode = { removeChild: jest.fn() }; @@ -94,9 +71,6 @@ describe('Lazy Load Utils', () => { { setCrossOrigin(_: HTMLLinkElement) {}, } as CrossOriginStrategy, - { - applyCSP(_: HTMLLinkElement) {}, - } as ContentSecurityStrategy, ).subscribe({ error: value => { expect(value).toBe(error); @@ -126,9 +100,6 @@ describe('Lazy Load Utils', () => { { setCrossOrigin(_: HTMLLinkElement) {}, } as CrossOriginStrategy, - { - applyCSP(_: HTMLLinkElement) {}, - } as ContentSecurityStrategy, ).subscribe({ next: value => { expect(value).toBe(success); diff --git a/npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts index 745b858ff3..4b950cf533 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/loading.strategy.spec.ts @@ -1,15 +1,12 @@ import { - CONTENT_SECURITY_STRATEGY, CROSS_ORIGIN_STRATEGY, DOM_STRATEGY, LOADING_STRATEGY, ScriptLoadingStrategy, StyleLoadingStrategy, } from '../strategies'; -import { uuid } from '../utils'; const path = 'http://example.com/'; -const nonce = uuid(); describe('ScriptLoadingStrategy', () => { describe('#createElement', () => { @@ -26,7 +23,6 @@ describe('ScriptLoadingStrategy', () => { it('should use given dom and cross-origin strategies', done => { const domStrategy = DOM_STRATEGY.PrependToHead(); const crossOriginStrategy = CROSS_ORIGIN_STRATEGY.UseCredentials(); - const contentSecurityStrategy = CONTENT_SECURITY_STRATEGY.Strict(nonce); domStrategy.insertElement = jest.fn((el: HTMLScriptElement) => { setTimeout(() => { @@ -34,23 +30,16 @@ describe('ScriptLoadingStrategy', () => { new CustomEvent('success', { detail: { crossOrigin: el.crossOrigin, - nonce: el.getAttribute('nonce'), }, }), ); }, 0); }) as any; - const strategy = new ScriptLoadingStrategy( - path, - domStrategy, - crossOriginStrategy, - contentSecurityStrategy, - ); + const strategy = new ScriptLoadingStrategy(path, domStrategy, crossOriginStrategy); strategy.createStream().subscribe(event => { expect(event.detail.crossOrigin).toBe('use-credentials'); - expect(event.detail.nonce).toBe(nonce); done(); }); }); @@ -73,7 +62,6 @@ describe('StyleLoadingStrategy', () => { it('should use given dom and cross-origin strategies', done => { const domStrategy = DOM_STRATEGY.PrependToHead(); const crossOriginStrategy = CROSS_ORIGIN_STRATEGY.UseCredentials(); - const contentSecurityStrategy = CONTENT_SECURITY_STRATEGY.Strict(nonce); domStrategy.insertElement = jest.fn((el: HTMLLinkElement) => { setTimeout(() => { @@ -81,23 +69,16 @@ describe('StyleLoadingStrategy', () => { new CustomEvent('success', { detail: { crossOrigin: el.crossOrigin, - nonce: el.getAttribute('nonce'), }, }), ); }, 0); }) as any; - const strategy = new StyleLoadingStrategy( - path, - domStrategy, - crossOriginStrategy, - contentSecurityStrategy, - ); + const strategy = new StyleLoadingStrategy(path, domStrategy, crossOriginStrategy); strategy.createStream().subscribe(event => { expect(event.detail.crossOrigin).toBe('use-credentials'); - expect(event.detail.nonce).toBe(nonce); done(); }); }); diff --git a/npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts b/npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts index 09b4ec4e4f..f602bf06ef 100644 --- a/npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts +++ b/npm/ng-packs/packages/core/src/lib/utils/lazy-load-utils.ts @@ -1,8 +1,4 @@ import { Observable, Observer } from 'rxjs'; -import { - ContentSecurityStrategy, - CONTENT_SECURITY_STRATEGY, -} from '../strategies/content-security.strategy'; import { CrossOriginStrategy, CROSS_ORIGIN_STRATEGY } from '../strategies/cross-origin.strategy'; import { DomStrategy, DOM_STRATEGY } from '../strategies/dom.strategy'; @@ -10,10 +6,8 @@ export function fromLazyLoad( element: HTMLScriptElement | HTMLLinkElement, domStrategy: DomStrategy = DOM_STRATEGY.AppendToHead(), crossOriginStrategy: CrossOriginStrategy = CROSS_ORIGIN_STRATEGY.Anonymous(), - contentSecurityStrategy: ContentSecurityStrategy = CONTENT_SECURITY_STRATEGY.Loose(), ): Observable { crossOriginStrategy.setCrossOrigin(element); - contentSecurityStrategy.applyCSP(element); domStrategy.insertElement(element); return new Observable((observer: Observer) => { From 2b50598a9163bfcc7dac72d464c859f8ec70a9ff Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 2 Apr 2020 20:00:19 +0300 Subject: [PATCH 101/182] feat(core): rename strategies based on security perspective --- .../strategies/content-security.strategy.ts | 12 ++++++------ .../tests/content-security.strategy.spec.ts | 18 +++++++++--------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/strategies/content-security.strategy.ts b/npm/ng-packs/packages/core/src/lib/strategies/content-security.strategy.ts index 54016b5836..2875916ef2 100644 --- a/npm/ng-packs/packages/core/src/lib/strategies/content-security.strategy.ts +++ b/npm/ng-packs/packages/core/src/lib/strategies/content-security.strategy.ts @@ -4,7 +4,7 @@ export abstract class ContentSecurityStrategy { abstract applyCSP(element: HTMLScriptElement | HTMLStyleElement): void; } -export class StrictContentSecurityStrategy extends ContentSecurityStrategy { +export class LooseContentSecurityStrategy extends ContentSecurityStrategy { constructor(nonce: string) { super(nonce); } @@ -14,7 +14,7 @@ export class StrictContentSecurityStrategy extends ContentSecurityStrategy { } } -export class LooseContentSecurityStrategy extends ContentSecurityStrategy { +export class StrictContentSecurityStrategy extends ContentSecurityStrategy { constructor() { super(); } @@ -23,10 +23,10 @@ export class LooseContentSecurityStrategy extends ContentSecurityStrategy { } export const CONTENT_SECURITY_STRATEGY = { - Loose() { - return new LooseContentSecurityStrategy(); + Loose(nonce: string) { + return new LooseContentSecurityStrategy(nonce); }, - Strict(nonce: string) { - return new StrictContentSecurityStrategy(nonce); + Strict() { + return new StrictContentSecurityStrategy(); }, }; diff --git a/npm/ng-packs/packages/core/src/lib/tests/content-security.strategy.spec.ts b/npm/ng-packs/packages/core/src/lib/tests/content-security.strategy.spec.ts index 06db799ca0..c617e35893 100644 --- a/npm/ng-packs/packages/core/src/lib/tests/content-security.strategy.spec.ts +++ b/npm/ng-packs/packages/core/src/lib/tests/content-security.strategy.spec.ts @@ -7,25 +7,25 @@ import { uuid } from '../utils'; describe('LooseContentSecurityStrategy', () => { describe('#applyCSP', () => { - it('should not set nonce attribute', () => { - const strategy = new LooseContentSecurityStrategy(); + it('should set nonce attribute', () => { + const nonce = uuid(); + const strategy = new LooseContentSecurityStrategy(nonce); const element = document.createElement('link'); strategy.applyCSP(element); - expect(element.getAttribute('nonce')).toBeNull(); + expect(element.getAttribute('nonce')).toBe(nonce); }); }); }); describe('StrictContentSecurityStrategy', () => { describe('#applyCSP', () => { - it('should set nonce attribute', () => { - const nonce = uuid(); - const strategy = new StrictContentSecurityStrategy(nonce); + it('should not set nonce attribute', () => { + const strategy = new StrictContentSecurityStrategy(); const element = document.createElement('link'); strategy.applyCSP(element); - expect(element.getAttribute('nonce')).toBe(nonce); + expect(element.getAttribute('nonce')).toBeNull(); }); }); }); @@ -33,8 +33,8 @@ describe('StrictContentSecurityStrategy', () => { describe('CONTENT_SECURITY_STRATEGY', () => { test.each` name | Strategy | nonce - ${'Loose'} | ${LooseContentSecurityStrategy} | ${undefined} - ${'Strict'} | ${StrictContentSecurityStrategy} | ${uuid()} + ${'Loose'} | ${LooseContentSecurityStrategy} | ${uuid()} + ${'Strict'} | ${StrictContentSecurityStrategy} | ${undefined} `('should successfully map $name to $Strategy.name', ({ name, Strategy, nonce }) => { expect(CONTENT_SECURITY_STRATEGY[name](nonce)).toEqual(new Strategy(nonce)); }); From b15ea010a9c183fff29737e77d7ef8480829cea0 Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Thu, 2 Apr 2020 20:01:15 +0300 Subject: [PATCH 102/182] docs(core): add how content security strategies work --- .../UI/Angular/Content-Security-Strategy.md | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 docs/en/UI/Angular/Content-Security-Strategy.md diff --git a/docs/en/UI/Angular/Content-Security-Strategy.md b/docs/en/UI/Angular/Content-Security-Strategy.md new file mode 100644 index 0000000000..96418a04cb --- /dev/null +++ b/docs/en/UI/Angular/Content-Security-Strategy.md @@ -0,0 +1,53 @@ +# ContentSecurityStrategy + +`ContentSecurityStrategy` is an abstract class exposed by @abp/ng.core package. Its instances help you mark inline script or styles as safe in terms of [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy). + + + + +## API + + +### constructor(public nonce?: string) + +`nonce` enables whitelisting inline script or styles in order to avoid using `unsafe-inline` in [script-src](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/script-src#Unsafe_inline_script) and [style-src](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/style-src#Unsafe_inline_styles) directives. + + +### applyCSP(element: HTMLScriptElement | HTMLStyleElement): void + +This method maps the aforementioned properties to the given `element`. + + + +## LooseContentSecurityPolicy + +`LooseContentSecurityPolicy` is a class that extends `ContentSecurityStrategy`. It required `nonce` and marks given `` element will place at the **end** of ``. + +Please refer to [ContentStrategy](./Content-Strategy.md) to see all available content strategies and how you can build your own content strategy. + + +### How to Insert Styles + +If you pass a `StyleContentStrategy` instance as the first parameter of `insertContent` method, the `DomInsertionService` will create a `` element will place at the **end** of ``. + +Please refer to [ContentStrategy](./Content-Strategy.md) to see all available content strategies and how you can build your own content strategy. + + +## API + + +### inserted + +```js +inserted: Set +``` + +All previously inserted contents are stored via this property as hashes. It is a simple [JavaScript Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set). + + + +### insertContent + +```js +insertContent(strategy: ContentStrategy): void +``` + +`strategy` parameter is the primary focus here and is explained above. + + +## What's Next? + +- [TrackByService](./Track-By-Service.md) diff --git a/docs/en/UI/Angular/Lazy-Load-Service.md b/docs/en/UI/Angular/Lazy-Load-Service.md index 43ee7bc6b8..a03381869e 100644 --- a/docs/en/UI/Angular/Lazy-Load-Service.md +++ b/docs/en/UI/Angular/Lazy-Load-Service.md @@ -210,4 +210,4 @@ load(strategy: LoadingStrategy, retryTimes?: number, retryDelay?: number): Obser ## What's Next? -- [TrackByService](./Track-By-Service.md) +- [DomInsertionService](./Dom-Insertion-Service.md) diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index 8034913c4c..471e215e3a 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -349,6 +349,10 @@ "text": "Lazy Loading Scripts & Styles", "path": "UI/Angular/Lazy-Load-Service.md" }, + { + "text": "DomInsertionService", + "path": "UI/Angular/Dom-Insertion-Service.md" + }, { "text": "TrackByService", "path": "UI/Angular/Track-By-Service.md" From c62897a3d9a9567df7a58ec6f51048c31aa84a1a Mon Sep 17 00:00:00 2001 From: Alper Ebicoglu Date: Tue, 7 Apr 2020 11:56:37 +0300 Subject: [PATCH 178/182] add RegexOptions.IgnoreCase to Docs description get method --- .../src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs index b3eceffdef..56f9dac913 100644 --- a/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs +++ b/modules/docs/src/Volo.Docs.Web/Pages/Documents/Project/Index.cshtml.cs @@ -597,7 +597,7 @@ namespace Volo.Docs.Pages.Documents.Project public string GetDescription() { - var firstParagraph = new Regex(@"

(.*?)

"); + var firstParagraph = new Regex(@"

(.*?)

", RegexOptions.IgnoreCase); var match = firstParagraph.Match(Document.Content); if (!match.Success) { From 6966224a89c9dc16fab93a3d62a311e4550f1ffb Mon Sep 17 00:00:00 2001 From: mehmet-erim Date: Tue, 7 Apr 2020 12:08:42 +0300 Subject: [PATCH 179/182] docs: refactor strategy docs --- .../UI/Angular/Content-Security-Strategy.md | 4 +-- docs/en/UI/Angular/Content-Strategy.md | 10 +++--- docs/en/UI/Angular/Cross-Origin-Strategy.md | 4 +-- docs/en/UI/Angular/Dom-Strategy.md | 32 ++++++++++++++++--- docs/en/UI/Angular/Loading-Strategy.md | 10 +++--- 5 files changed, 41 insertions(+), 19 deletions(-) diff --git a/docs/en/UI/Angular/Content-Security-Strategy.md b/docs/en/UI/Angular/Content-Security-Strategy.md index c45cf23c58..f32317c9ca 100644 --- a/docs/en/UI/Angular/Content-Security-Strategy.md +++ b/docs/en/UI/Angular/Content-Security-Strategy.md @@ -50,7 +50,7 @@ Predefined content security strategies are accessible via `CONTENT_SECURITY_STRA ### Loose ```js -Loose(nonce: string) +CONTENT_SECURITY_STRATEGY.Loose(nonce: string) ``` `nonce` will be set. @@ -59,7 +59,7 @@ Loose(nonce: string) ### None ```js -None() +CONTENT_SECURITY_STRATEGY.None() ``` Nothing will be done. diff --git a/docs/en/UI/Angular/Content-Strategy.md b/docs/en/UI/Angular/Content-Strategy.md index e3d3ca9849..8544042c32 100644 --- a/docs/en/UI/Angular/Content-Strategy.md +++ b/docs/en/UI/Angular/Content-Strategy.md @@ -57,7 +57,7 @@ Predefined content strategies are accessible via `CONTENT_STRATEGY` constant. ### AppendScriptToBody ```js -AppendScriptToBody(content: string) +CONTENT_STRATEGY.AppendScriptToBody(content: string) ``` Creates a `