From 7129342827637941440795c67f773368c6f525f3 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Tue, 25 Jun 2024 09:53:46 -0400
Subject: [PATCH 01/40] [deps] Platform: Update dotnet monorepo to v6.0.31
(#4027)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
src/Core/Core.csproj | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/Core/Core.csproj b/src/Core/Core.csproj
index a521cbdb2..1eca173c9 100644
--- a/src/Core/Core.csproj
+++ b/src/Core/Core.csproj
@@ -34,14 +34,14 @@
-
+
-
+
@@ -56,7 +56,7 @@
-
+
From 8147aca0fd9610b4ce5f9e97b3d5b3ab11cbec6b Mon Sep 17 00:00:00 2001
From: Todd Martin <106564991+trmartin4@users.noreply.github.com>
Date: Tue, 25 Jun 2024 12:16:53 -0400
Subject: [PATCH 02/40] [PM-7084] Add feature flag for 2FA component refactor
(#4229)
---
src/Core/Constants.cs | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/Core/Constants.cs b/src/Core/Constants.cs
index fa3948198..a5cc7b0cd 100644
--- a/src/Core/Constants.cs
+++ b/src/Core/Constants.cs
@@ -132,6 +132,7 @@ public static class FeatureFlagKeys
public const string MemberAccessReport = "ac-2059-member-access-report";
public const string BlockLegacyUsers = "block-legacy-users";
public const string InlineMenuFieldQualification = "inline-menu-field-qualification";
+ public const string TwoFactorComponentRefactor = "two-factor-component-refactor";
public static List GetAllKeys()
{
From 6646d110741614125f2bf08f98ab1d74ba27ab7d Mon Sep 17 00:00:00 2001
From: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Date: Wed, 26 Jun 2024 06:10:35 +1000
Subject: [PATCH 03/40] Turn on Flexible Collections v1 for self-host (#4253)
---
src/Core/Constants.cs | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/Core/Constants.cs b/src/Core/Constants.cs
index a5cc7b0cd..bfeca3c2c 100644
--- a/src/Core/Constants.cs
+++ b/src/Core/Constants.cs
@@ -148,7 +148,8 @@ public static class FeatureFlagKeys
return new Dictionary()
{
{ DuoRedirect, "true" },
- { UnassignedItemsBanner, "true"}
+ { UnassignedItemsBanner, "true"},
+ { FlexibleCollectionsV1, "true" }
};
}
}
From e8e725c389b4f5c43c13f8e760c5c54a925263ee Mon Sep 17 00:00:00 2001
From: Alex Morask <144709477+amorask-bitwarden@users.noreply.github.com>
Date: Wed, 26 Jun 2024 09:08:18 -0400
Subject: [PATCH 04/40] [AC-2795] Add account credit & tax information to
provider subscription (#4276)
* Add account credit, suspension and tax information to subscription response
* Run dotnet format'
---
.../Billing/ProviderBillingService.cs | 29 +----
.../Billing/ProviderBillingServiceTests.cs | 103 ++++++++++++++++--
...ConsolidatedBillingSubscriptionResponse.cs | 22 ++--
.../ConsolidatedBillingSubscriptionDTO.cs | 4 +-
.../Models/SubscriptionSuspensionDTO.cs | 6 +
src/Core/Billing/Utilities.cs | 69 +++++++++++-
.../ProviderBillingControllerTests.cs | 48 +++++---
7 files changed, 220 insertions(+), 61 deletions(-)
create mode 100644 src/Core/Billing/Models/SubscriptionSuspensionDTO.cs
diff --git a/bitwarden_license/src/Commercial.Core/Billing/ProviderBillingService.cs b/bitwarden_license/src/Commercial.Core/Billing/ProviderBillingService.cs
index 0fae9e8b2..6f52f59de 100644
--- a/bitwarden_license/src/Commercial.Core/Billing/ProviderBillingService.cs
+++ b/bitwarden_license/src/Commercial.Core/Billing/ProviderBillingService.cs
@@ -1,6 +1,5 @@
using System.Globalization;
using Bit.Commercial.Core.Billing.Models;
-using Bit.Core;
using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Entities.Provider;
using Bit.Core.AdminConsole.Enums.Provider;
@@ -29,7 +28,6 @@ namespace Bit.Commercial.Core.Billing;
public class ProviderBillingService(
ICurrentContext currentContext,
- IFeatureService featureService,
IGlobalSettings globalSettings,
ILogger logger,
IOrganizationRepository organizationRepository,
@@ -272,13 +270,6 @@ public class ProviderBillingService(
{
ArgumentNullException.ThrowIfNull(provider);
- if (provider.Type == ProviderType.Reseller)
- {
- logger.LogError("Consolidated billing subscription cannot be retrieved for reseller-type provider ({ID})", provider.Id);
-
- throw ContactSupport("Consolidated billing does not support reseller-type providers");
- }
-
var subscription = await subscriberService.GetSubscription(provider, new SubscriptionGetOptions
{
Expand = ["customer", "test_clock"]
@@ -289,18 +280,6 @@ public class ProviderBillingService(
return null;
}
- DateTime? subscriptionSuspensionDate = null;
- DateTime? subscriptionUnpaidPeriodEndDate = null;
- if (featureService.IsEnabled(FeatureFlagKeys.AC1795_UpdatedSubscriptionStatusSection))
- {
- var (suspensionDate, unpaidPeriodEndDate) = await paymentService.GetSuspensionDateAsync(subscription);
- if (suspensionDate.HasValue && unpaidPeriodEndDate.HasValue)
- {
- subscriptionSuspensionDate = suspensionDate;
- subscriptionUnpaidPeriodEndDate = unpaidPeriodEndDate;
- }
- }
-
var providerPlans = await providerPlanRepository.GetByProviderId(provider.Id);
var configuredProviderPlans = providerPlans
@@ -308,11 +287,15 @@ public class ProviderBillingService(
.Select(ConfiguredProviderPlanDTO.From)
.ToList();
+ var taxInformation = await subscriberService.GetTaxInformation(provider);
+
+ var suspension = await GetSuspensionAsync(stripeAdapter, subscription);
+
return new ConsolidatedBillingSubscriptionDTO(
configuredProviderPlans,
subscription,
- subscriptionSuspensionDate,
- subscriptionUnpaidPeriodEndDate);
+ taxInformation,
+ suspension);
}
public async Task ScaleSeats(
diff --git a/bitwarden_license/test/Commercial.Core.Test/Billing/ProviderBillingServiceTests.cs b/bitwarden_license/test/Commercial.Core.Test/Billing/ProviderBillingServiceTests.cs
index d91553cab..caebde363 100644
--- a/bitwarden_license/test/Commercial.Core.Test/Billing/ProviderBillingServiceTests.cs
+++ b/bitwarden_license/test/Commercial.Core.Test/Billing/ProviderBillingServiceTests.cs
@@ -857,13 +857,16 @@ public class ProviderBillingServiceTests
}
[Theory, BitAutoData]
- public async Task GetConsolidatedBillingSubscription_Success(
+ public async Task GetConsolidatedBillingSubscription_Active_NoSuspension_Success(
SutProvider sutProvider,
Provider provider)
{
var subscriberService = sutProvider.GetDependency();
- var subscription = new Subscription();
+ var subscription = new Subscription
+ {
+ Status = "active"
+ };
subscriberService.GetSubscription(provider, Arg.Is(
options => options.Expand.Count == 2 && options.Expand.First() == "customer" && options.Expand.Last() == "test_clock")).Returns(subscription);
@@ -894,26 +897,33 @@ public class ProviderBillingServiceTests
providerPlanRepository.GetByProviderId(provider.Id).Returns(providerPlans);
- var consolidatedBillingSubscription = await sutProvider.Sut.GetConsolidatedBillingSubscription(provider);
+ var taxInformation =
+ new TaxInformationDTO("US", "12345", "123456789", "123 Example St.", null, "Example Town", "NY");
- Assert.NotNull(consolidatedBillingSubscription);
+ subscriberService.GetTaxInformation(provider).Returns(taxInformation);
- Assert.Equivalent(consolidatedBillingSubscription.Subscription, subscription);
+ var (gotProviderPlans, gotSubscription, gotTaxInformation, gotSuspension) = await sutProvider.Sut.GetConsolidatedBillingSubscription(provider);
- Assert.Equal(2, consolidatedBillingSubscription.ProviderPlans.Count);
+ Assert.Equal(2, gotProviderPlans.Count);
var configuredEnterprisePlan =
- consolidatedBillingSubscription.ProviderPlans.FirstOrDefault(configuredPlan =>
+ gotProviderPlans.FirstOrDefault(configuredPlan =>
configuredPlan.PlanType == PlanType.EnterpriseMonthly);
var configuredTeamsPlan =
- consolidatedBillingSubscription.ProviderPlans.FirstOrDefault(configuredPlan =>
+ gotProviderPlans.FirstOrDefault(configuredPlan =>
configuredPlan.PlanType == PlanType.TeamsMonthly);
Compare(enterprisePlan, configuredEnterprisePlan);
Compare(teamsPlan, configuredTeamsPlan);
+ Assert.Equivalent(subscription, gotSubscription);
+
+ Assert.Equivalent(taxInformation, gotTaxInformation);
+
+ Assert.Null(gotSuspension);
+
return;
void Compare(ProviderPlan providerPlan, ConfiguredProviderPlanDTO configuredProviderPlan)
@@ -927,6 +937,83 @@ public class ProviderBillingServiceTests
}
}
+ [Theory, BitAutoData]
+ public async Task GetConsolidatedBillingSubscription_PastDue_HasSuspension_Success(
+ SutProvider sutProvider,
+ Provider provider)
+ {
+ var subscriberService = sutProvider.GetDependency();
+
+ var subscription = new Subscription
+ {
+ Id = "subscription_id",
+ Status = "past_due",
+ CollectionMethod = "send_invoice"
+ };
+
+ subscriberService.GetSubscription(provider, Arg.Is(
+ options => options.Expand.Count == 2 && options.Expand.First() == "customer" && options.Expand.Last() == "test_clock")).Returns(subscription);
+
+ var providerPlanRepository = sutProvider.GetDependency();
+
+ var enterprisePlan = new ProviderPlan
+ {
+ Id = Guid.NewGuid(),
+ ProviderId = provider.Id,
+ PlanType = PlanType.EnterpriseMonthly,
+ SeatMinimum = 100,
+ PurchasedSeats = 0,
+ AllocatedSeats = 0
+ };
+
+ var teamsPlan = new ProviderPlan
+ {
+ Id = Guid.NewGuid(),
+ ProviderId = provider.Id,
+ PlanType = PlanType.TeamsMonthly,
+ SeatMinimum = 50,
+ PurchasedSeats = 10,
+ AllocatedSeats = 60
+ };
+
+ var providerPlans = new List { enterprisePlan, teamsPlan, };
+
+ providerPlanRepository.GetByProviderId(provider.Id).Returns(providerPlans);
+
+ var taxInformation =
+ new TaxInformationDTO("US", "12345", "123456789", "123 Example St.", null, "Example Town", "NY");
+
+ subscriberService.GetTaxInformation(provider).Returns(taxInformation);
+
+ var stripeAdapter = sutProvider.GetDependency();
+
+ var openInvoice = new Invoice
+ {
+ Id = "invoice_id",
+ Status = "open",
+ DueDate = new DateTime(2024, 6, 1),
+ Created = new DateTime(2024, 5, 1),
+ PeriodEnd = new DateTime(2024, 6, 1)
+ };
+
+ stripeAdapter.InvoiceSearchAsync(Arg.Is(options =>
+ options.Query == $"subscription:'{subscription.Id}' status:'open'"))
+ .Returns([openInvoice]);
+
+ var (gotProviderPlans, gotSubscription, gotTaxInformation, gotSuspension) = await sutProvider.Sut.GetConsolidatedBillingSubscription(provider);
+
+ Assert.Equal(2, gotProviderPlans.Count);
+
+ Assert.Equivalent(subscription, gotSubscription);
+
+ Assert.Equivalent(taxInformation, gotTaxInformation);
+
+ Assert.NotNull(gotSuspension);
+ Assert.Equal(openInvoice.DueDate.Value.AddDays(30), gotSuspension.SuspensionDate);
+ Assert.Equal(openInvoice.PeriodEnd, gotSuspension.UnpaidPeriodEndDate);
+ Assert.Equal(30, gotSuspension.GracePeriod);
+ }
+
#endregion
#region StartSubscription
diff --git a/src/Api/Billing/Models/Responses/ConsolidatedBillingSubscriptionResponse.cs b/src/Api/Billing/Models/Responses/ConsolidatedBillingSubscriptionResponse.cs
index ddfef1a3a..0e1656913 100644
--- a/src/Api/Billing/Models/Responses/ConsolidatedBillingSubscriptionResponse.cs
+++ b/src/Api/Billing/Models/Responses/ConsolidatedBillingSubscriptionResponse.cs
@@ -8,11 +8,11 @@ public record ConsolidatedBillingSubscriptionResponse(
DateTime CurrentPeriodEndDate,
decimal? DiscountPercentage,
string CollectionMethod,
- DateTime? UnpaidPeriodEndDate,
- int? GracePeriod,
- DateTime? SuspensionDate,
+ IEnumerable Plans,
+ long AccountCredit,
+ TaxInformationDTO TaxInformation,
DateTime? CancelAt,
- IEnumerable Plans)
+ SubscriptionSuspensionDTO Suspension)
{
private const string _annualCadence = "Annual";
private const string _monthlyCadence = "Monthly";
@@ -20,9 +20,9 @@ public record ConsolidatedBillingSubscriptionResponse(
public static ConsolidatedBillingSubscriptionResponse From(
ConsolidatedBillingSubscriptionDTO consolidatedBillingSubscription)
{
- var (providerPlans, subscription, suspensionDate, unpaidPeriodEndDate) = consolidatedBillingSubscription;
+ var (providerPlans, subscription, taxInformation, suspension) = consolidatedBillingSubscription;
- var providerPlansDTO = providerPlans
+ var providerPlanResponses = providerPlans
.Select(providerPlan =>
{
var plan = StaticStore.GetPlan(providerPlan.PlanType);
@@ -37,18 +37,16 @@ public record ConsolidatedBillingSubscriptionResponse(
cadence);
});
- var gracePeriod = subscription.CollectionMethod == "charge_automatically" ? 14 : 30;
-
return new ConsolidatedBillingSubscriptionResponse(
subscription.Status,
subscription.CurrentPeriodEnd,
subscription.Customer?.Discount?.Coupon?.PercentOff,
subscription.CollectionMethod,
- unpaidPeriodEndDate,
- gracePeriod,
- suspensionDate,
+ providerPlanResponses,
+ subscription.Customer?.Balance ?? 0,
+ taxInformation,
subscription.CancelAt,
- providerPlansDTO);
+ suspension);
}
}
diff --git a/src/Core/Billing/Models/ConsolidatedBillingSubscriptionDTO.cs b/src/Core/Billing/Models/ConsolidatedBillingSubscriptionDTO.cs
index b378c3210..4b2f46adc 100644
--- a/src/Core/Billing/Models/ConsolidatedBillingSubscriptionDTO.cs
+++ b/src/Core/Billing/Models/ConsolidatedBillingSubscriptionDTO.cs
@@ -5,5 +5,5 @@ namespace Bit.Core.Billing.Models;
public record ConsolidatedBillingSubscriptionDTO(
List ProviderPlans,
Subscription Subscription,
- DateTime? SuspensionDate,
- DateTime? UnpaidPeriodEndDate);
+ TaxInformationDTO TaxInformation,
+ SubscriptionSuspensionDTO Suspension);
diff --git a/src/Core/Billing/Models/SubscriptionSuspensionDTO.cs b/src/Core/Billing/Models/SubscriptionSuspensionDTO.cs
new file mode 100644
index 000000000..ac0261f2c
--- /dev/null
+++ b/src/Core/Billing/Models/SubscriptionSuspensionDTO.cs
@@ -0,0 +1,6 @@
+namespace Bit.Core.Billing.Models;
+
+public record SubscriptionSuspensionDTO(
+ DateTime SuspensionDate,
+ DateTime UnpaidPeriodEndDate,
+ int GracePeriod);
diff --git a/src/Core/Billing/Utilities.cs b/src/Core/Billing/Utilities.cs
index 2b06f1ea6..2c5ad8547 100644
--- a/src/Core/Billing/Utilities.cs
+++ b/src/Core/Billing/Utilities.cs
@@ -1,4 +1,8 @@
-namespace Bit.Core.Billing;
+using Bit.Core.Billing.Models;
+using Bit.Core.Services;
+using Stripe;
+
+namespace Bit.Core.Billing;
public static class Utilities
{
@@ -8,4 +12,67 @@ public static class Utilities
string internalMessage = null,
Exception innerException = null) => new("Something went wrong with your request. Please contact support.",
internalMessage, innerException);
+
+ public static async Task GetSuspensionAsync(
+ IStripeAdapter stripeAdapter,
+ Subscription subscription)
+ {
+ if (subscription.Status is not "past_due" && subscription.Status is not "unpaid")
+ {
+ return null;
+ }
+
+ var openInvoices = await stripeAdapter.InvoiceSearchAsync(new InvoiceSearchOptions
+ {
+ Query = $"subscription:'{subscription.Id}' status:'open'"
+ });
+
+ if (openInvoices.Count == 0)
+ {
+ return null;
+ }
+
+ var currentDate = subscription.TestClock?.FrozenTime ?? DateTime.UtcNow;
+
+ switch (subscription.CollectionMethod)
+ {
+ case "charge_automatically":
+ {
+ var firstOverdueInvoice = openInvoices
+ .Where(invoice => invoice.PeriodEnd < currentDate && invoice.Attempted)
+ .MinBy(invoice => invoice.Created);
+
+ if (firstOverdueInvoice == null)
+ {
+ return null;
+ }
+
+ const int gracePeriod = 14;
+
+ return new SubscriptionSuspensionDTO(
+ firstOverdueInvoice.Created.AddDays(gracePeriod),
+ firstOverdueInvoice.PeriodEnd,
+ gracePeriod);
+ }
+ case "send_invoice":
+ {
+ var firstOverdueInvoice = openInvoices
+ .Where(invoice => invoice.DueDate < currentDate)
+ .MinBy(invoice => invoice.Created);
+
+ if (firstOverdueInvoice?.DueDate == null)
+ {
+ return null;
+ }
+
+ const int gracePeriod = 30;
+
+ return new SubscriptionSuspensionDTO(
+ firstOverdueInvoice.DueDate.Value.AddDays(gracePeriod),
+ firstOverdueInvoice.PeriodEnd,
+ gracePeriod);
+ }
+ default: return null;
+ }
+ }
}
diff --git a/test/Api.Test/Billing/Controllers/ProviderBillingControllerTests.cs b/test/Api.Test/Billing/Controllers/ProviderBillingControllerTests.cs
index c39b058b6..2c4245bd6 100644
--- a/test/Api.Test/Billing/Controllers/ProviderBillingControllerTests.cs
+++ b/test/Api.Test/Billing/Controllers/ProviderBillingControllerTests.cs
@@ -385,19 +385,34 @@ public class ProviderBillingControllerTests
var subscription = new Subscription
{
- Status = "active",
- CurrentPeriodEnd = new DateTime(2025, 1, 1),
- Customer = new Customer { Discount = new Discount { Coupon = new Coupon { PercentOff = 10 } } }
+ Status = "unpaid",
+ CurrentPeriodEnd = new DateTime(2024, 6, 30),
+ Customer = new Customer
+ {
+ Balance = 100000,
+ Discount = new Discount
+ {
+ Coupon = new Coupon
+ {
+ PercentOff = 10
+ }
+ }
+ }
};
- DateTime? SuspensionDate = new DateTime();
- DateTime? UnpaidPeriodEndDate = new DateTime();
- var gracePeriod = 30;
+ var taxInformation =
+ new TaxInformationDTO("US", "12345", "123456789", "123 Example St.", null, "Example Town", "NY");
+
+ var suspension = new SubscriptionSuspensionDTO(
+ new DateTime(2024, 7, 30),
+ new DateTime(2024, 5, 30),
+ 30);
+
var consolidatedBillingSubscription = new ConsolidatedBillingSubscriptionDTO(
configuredProviderPlans,
subscription,
- SuspensionDate,
- UnpaidPeriodEndDate);
+ taxInformation,
+ suspension);
sutProvider.GetDependency().GetConsolidatedBillingSubscription(provider)
.Returns(consolidatedBillingSubscription);
@@ -408,13 +423,10 @@ public class ProviderBillingControllerTests
var response = ((Ok)result).Value;
- Assert.Equal(response.Status, subscription.Status);
- Assert.Equal(response.CurrentPeriodEndDate, subscription.CurrentPeriodEnd);
- Assert.Equal(response.DiscountPercentage, subscription.Customer!.Discount!.Coupon!.PercentOff);
- Assert.Equal(response.CollectionMethod, subscription.CollectionMethod);
- Assert.Equal(response.UnpaidPeriodEndDate, UnpaidPeriodEndDate);
- Assert.Equal(response.GracePeriod, gracePeriod);
- Assert.Equal(response.SuspensionDate, SuspensionDate);
+ Assert.Equal(subscription.Status, response.Status);
+ Assert.Equal(subscription.CurrentPeriodEnd, response.CurrentPeriodEndDate);
+ Assert.Equal(subscription.Customer!.Discount!.Coupon!.PercentOff, response.DiscountPercentage);
+ Assert.Equal(subscription.CollectionMethod, response.CollectionMethod);
var teamsPlan = StaticStore.GetPlan(PlanType.TeamsMonthly);
var providerTeamsPlan = response.Plans.FirstOrDefault(plan => plan.PlanName == teamsPlan.Name);
@@ -433,7 +445,13 @@ public class ProviderBillingControllerTests
Assert.Equal(90, providerEnterprisePlan.AssignedSeats);
Assert.Equal(100 * enterprisePlan.PasswordManager.ProviderPortalSeatPrice, providerEnterprisePlan.Cost);
Assert.Equal("Monthly", providerEnterprisePlan.Cadence);
+
+ Assert.Equal(100000, response.AccountCredit);
+ Assert.Equal(taxInformation, response.TaxInformation);
+ Assert.Null(response.CancelAt);
+ Assert.Equal(suspension, response.Suspension);
}
+
#endregion
#region GetTaxInformationAsync
From 750321afaa4175e695bc6ed822634fb4cab62818 Mon Sep 17 00:00:00 2001
From: Alex Morask <144709477+amorask-bitwarden@users.noreply.github.com>
Date: Wed, 26 Jun 2024 09:30:30 -0400
Subject: [PATCH 05/40] Updated CSV column header, removed invoice PDF URL
(#4212)
---
.../Billing/Models/ProviderClientInvoiceReportRow.cs | 2 ++
src/Api/Billing/Models/Responses/InvoicesResponse.cs | 6 ++----
.../Billing/Controllers/ProviderBillingControllerTests.cs | 2 --
3 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/bitwarden_license/src/Commercial.Core/Billing/Models/ProviderClientInvoiceReportRow.cs b/bitwarden_license/src/Commercial.Core/Billing/Models/ProviderClientInvoiceReportRow.cs
index 5256d11a6..aaf04f603 100644
--- a/bitwarden_license/src/Commercial.Core/Billing/Models/ProviderClientInvoiceReportRow.cs
+++ b/bitwarden_license/src/Commercial.Core/Billing/Models/ProviderClientInvoiceReportRow.cs
@@ -1,5 +1,6 @@
using System.Globalization;
using Bit.Core.Billing.Entities;
+using CsvHelper.Configuration.Attributes;
namespace Bit.Commercial.Core.Billing.Models;
@@ -10,6 +11,7 @@ public class ProviderClientInvoiceReportRow
public int Used { get; set; }
public int Remaining { get; set; }
public string Plan { get; set; }
+ [Name("Estimated total")]
public string Total { get; set; }
public static ProviderClientInvoiceReportRow From(ProviderInvoiceItem providerInvoiceItem)
diff --git a/src/Api/Billing/Models/Responses/InvoicesResponse.cs b/src/Api/Billing/Models/Responses/InvoicesResponse.cs
index f9ab2a4ae..384b2fdd7 100644
--- a/src/Api/Billing/Models/Responses/InvoicesResponse.cs
+++ b/src/Api/Billing/Models/Responses/InvoicesResponse.cs
@@ -19,8 +19,7 @@ public record InvoiceDTO(
decimal Total,
string Status,
DateTime? DueDate,
- string Url,
- string PdfUrl)
+ string Url)
{
public static InvoiceDTO From(Invoice invoice) => new(
invoice.Id,
@@ -29,6 +28,5 @@ public record InvoiceDTO(
invoice.Total / 100M,
invoice.Status,
invoice.DueDate,
- invoice.HostedInvoiceUrl,
- invoice.InvoicePdf);
+ invoice.HostedInvoiceUrl);
}
diff --git a/test/Api.Test/Billing/Controllers/ProviderBillingControllerTests.cs b/test/Api.Test/Billing/Controllers/ProviderBillingControllerTests.cs
index 2c4245bd6..acd6721a5 100644
--- a/test/Api.Test/Billing/Controllers/ProviderBillingControllerTests.cs
+++ b/test/Api.Test/Billing/Controllers/ProviderBillingControllerTests.cs
@@ -92,7 +92,6 @@ public class ProviderBillingControllerTests
Assert.Equal(1000, openInvoice.Total);
Assert.Equal(new DateTime(2024, 7, 1), openInvoice.DueDate);
Assert.Equal("https://example.com/invoice/2", openInvoice.Url);
- Assert.Equal("https://example.com/invoice/2/pdf", openInvoice.PdfUrl);
var paidInvoice = response.Invoices.FirstOrDefault(i => i.Status == "paid");
@@ -103,7 +102,6 @@ public class ProviderBillingControllerTests
Assert.Equal(1000, paidInvoice.Total);
Assert.Equal(new DateTime(2024, 6, 1), paidInvoice.DueDate);
Assert.Equal("https://example.com/invoice/1", paidInvoice.Url);
- Assert.Equal("https://example.com/invoice/1/pdf", paidInvoice.PdfUrl);
}
#endregion
From 26575856e6b9dc2feffdae5384c5c541f7e221bf Mon Sep 17 00:00:00 2001
From: Alex Morask <144709477+amorask-bitwarden@users.noreply.github.com>
Date: Wed, 26 Jun 2024 09:33:22 -0400
Subject: [PATCH 06/40] Remove provider discount for CB (#4277)
---
.../Billing/ProviderBillingService.cs | 22 +++-----
.../Billing/ProviderBillingServiceTests.cs | 52 +++++++++++++------
.../Services/IProviderBillingService.cs | 7 +++
3 files changed, 50 insertions(+), 31 deletions(-)
diff --git a/bitwarden_license/src/Commercial.Core/Billing/ProviderBillingService.cs b/bitwarden_license/src/Commercial.Core/Billing/ProviderBillingService.cs
index 6f52f59de..2ee7f606d 100644
--- a/bitwarden_license/src/Commercial.Core/Billing/ProviderBillingService.cs
+++ b/bitwarden_license/src/Commercial.Core/Billing/ProviderBillingService.cs
@@ -79,7 +79,7 @@ public class ProviderBillingService(
if (string.IsNullOrEmpty(taxInfo.BillingAddressCountry) ||
string.IsNullOrEmpty(taxInfo.BillingAddressPostalCode))
{
- logger.LogError("Cannot create Stripe customer for provider ({ID}) - Both the provider's country and postal code are required", provider.Id);
+ logger.LogError("Cannot create customer for provider ({ProviderID}) without both a country and postal code", provider.Id);
throw ContactSupport();
}
@@ -97,7 +97,6 @@ public class ProviderBillingService(
City = taxInfo.BillingAddressCity,
State = taxInfo.BillingAddressState
},
- Coupon = "msp-discount-35",
Description = provider.DisplayBusinessName(),
Email = provider.BillingEmail,
InvoiceSettings = new CustomerInvoiceSettingsOptions
@@ -399,20 +398,13 @@ public class ProviderBillingService(
{
ArgumentNullException.ThrowIfNull(provider);
- if (!string.IsNullOrEmpty(provider.GatewaySubscriptionId))
- {
- logger.LogWarning("Cannot start Provider subscription - Provider ({ID}) already has a {FieldName}", provider.Id, nameof(provider.GatewaySubscriptionId));
-
- throw ContactSupport();
- }
-
var customer = await subscriberService.GetCustomerOrThrow(provider);
var providerPlans = await providerPlanRepository.GetByProviderId(provider.Id);
if (providerPlans == null || providerPlans.Count == 0)
{
- logger.LogError("Cannot start Provider subscription - Provider ({ID}) has no configured plans", provider.Id);
+ logger.LogError("Cannot start subscription for provider ({ProviderID}) that has no configured plans", provider.Id);
throw ContactSupport();
}
@@ -422,9 +414,9 @@ public class ProviderBillingService(
var teamsProviderPlan =
providerPlans.SingleOrDefault(providerPlan => providerPlan.PlanType == PlanType.TeamsMonthly);
- if (teamsProviderPlan == null)
+ if (teamsProviderPlan == null || !teamsProviderPlan.IsConfigured())
{
- logger.LogError("Cannot start Provider subscription - Provider ({ID}) has no configured Teams Monthly plan", provider.Id);
+ logger.LogError("Cannot start subscription for provider ({ProviderID}) that has no configured Teams plan", provider.Id);
throw ContactSupport();
}
@@ -440,9 +432,9 @@ public class ProviderBillingService(
var enterpriseProviderPlan =
providerPlans.SingleOrDefault(providerPlan => providerPlan.PlanType == PlanType.EnterpriseMonthly);
- if (enterpriseProviderPlan == null)
+ if (enterpriseProviderPlan == null || !enterpriseProviderPlan.IsConfigured())
{
- logger.LogError("Cannot start Provider subscription - Provider ({ID}) has no configured Enterprise Monthly plan", provider.Id);
+ logger.LogError("Cannot start subscription for provider ({ProviderID}) that has no configured Enterprise plan", provider.Id);
throw ContactSupport();
}
@@ -481,7 +473,7 @@ public class ProviderBillingService(
{
await providerRepository.ReplaceAsync(provider);
- logger.LogError("Started incomplete Provider ({ProviderID}) subscription ({SubscriptionID})", provider.Id, subscription.Id);
+ logger.LogError("Started incomplete provider ({ProviderID}) subscription ({SubscriptionID})", provider.Id, subscription.Id);
throw ContactSupport();
}
diff --git a/bitwarden_license/test/Commercial.Core.Test/Billing/ProviderBillingServiceTests.cs b/bitwarden_license/test/Commercial.Core.Test/Billing/ProviderBillingServiceTests.cs
index caebde363..a176187f0 100644
--- a/bitwarden_license/test/Commercial.Core.Test/Billing/ProviderBillingServiceTests.cs
+++ b/bitwarden_license/test/Commercial.Core.Test/Billing/ProviderBillingServiceTests.cs
@@ -556,7 +556,6 @@ public class ProviderBillingServiceTests
o.Address.Line2 == taxInfo.BillingAddressLine2 &&
o.Address.City == taxInfo.BillingAddressCity &&
o.Address.State == taxInfo.BillingAddressState &&
- o.Coupon == "msp-discount-35" &&
o.Description == WebUtility.HtmlDecode(provider.BusinessName) &&
o.Email == provider.BillingEmail &&
o.InvoiceSettings.CustomFields.FirstOrDefault().Name == "Provider" &&
@@ -579,7 +578,6 @@ public class ProviderBillingServiceTests
o.Address.Line2 == taxInfo.BillingAddressLine2 &&
o.Address.City == taxInfo.BillingAddressCity &&
o.Address.State == taxInfo.BillingAddressState &&
- o.Coupon == "msp-discount-35" &&
o.Description == WebUtility.HtmlDecode(provider.BusinessName) &&
o.Email == provider.BillingEmail &&
o.InvoiceSettings.CustomFields.FirstOrDefault().Name == "Provider" &&
@@ -1023,16 +1021,6 @@ public class ProviderBillingServiceTests
SutProvider sutProvider) =>
await Assert.ThrowsAsync(() => sutProvider.Sut.StartSubscription(null));
- [Theory, BitAutoData]
- public async Task StartSubscription_AlreadyHasGatewaySubscriptionId_ContactSupport(
- SutProvider sutProvider,
- Provider provider)
- {
- provider.GatewaySubscriptionId = "subscription_id";
-
- await ThrowsContactSupportAsync(() => sutProvider.Sut.StartSubscription(provider));
- }
-
[Theory, BitAutoData]
public async Task StartSubscription_NoProviderPlans_ContactSupport(
SutProvider sutProvider,
@@ -1121,8 +1109,24 @@ public class ProviderBillingServiceTests
var providerPlans = new List
{
- new() { PlanType = PlanType.TeamsMonthly, SeatMinimum = 100 },
- new() { PlanType = PlanType.EnterpriseMonthly, SeatMinimum = 100 }
+ new()
+ {
+ Id = Guid.NewGuid(),
+ ProviderId = provider.Id,
+ PlanType = PlanType.TeamsMonthly,
+ SeatMinimum = 100,
+ PurchasedSeats = 0,
+ AllocatedSeats = 0
+ },
+ new()
+ {
+ Id = Guid.NewGuid(),
+ ProviderId = provider.Id,
+ PlanType = PlanType.EnterpriseMonthly,
+ SeatMinimum = 100,
+ PurchasedSeats = 0,
+ AllocatedSeats = 0
+ }
};
sutProvider.GetDependency().GetByProviderId(provider.Id)
@@ -1153,8 +1157,24 @@ public class ProviderBillingServiceTests
var providerPlans = new List
{
- new() { PlanType = PlanType.TeamsMonthly, SeatMinimum = 100 },
- new() { PlanType = PlanType.EnterpriseMonthly, SeatMinimum = 100 }
+ new()
+ {
+ Id = Guid.NewGuid(),
+ ProviderId = provider.Id,
+ PlanType = PlanType.TeamsMonthly,
+ SeatMinimum = 100,
+ PurchasedSeats = 0,
+ AllocatedSeats = 0
+ },
+ new()
+ {
+ Id = Guid.NewGuid(),
+ ProviderId = provider.Id,
+ PlanType = PlanType.EnterpriseMonthly,
+ SeatMinimum = 100,
+ PurchasedSeats = 0,
+ AllocatedSeats = 0
+ }
};
sutProvider.GetDependency().GetByProviderId(provider.Id)
diff --git a/src/Core/Billing/Services/IProviderBillingService.cs b/src/Core/Billing/Services/IProviderBillingService.cs
index fbed616a6..5c215bd71 100644
--- a/src/Core/Billing/Services/IProviderBillingService.cs
+++ b/src/Core/Billing/Services/IProviderBillingService.cs
@@ -1,6 +1,7 @@
using Bit.Core.AdminConsole.Entities;
using Bit.Core.AdminConsole.Entities.Provider;
using Bit.Core.AdminConsole.Enums.Provider;
+using Bit.Core.Billing.Entities;
using Bit.Core.Billing.Enums;
using Bit.Core.Billing.Models;
using Bit.Core.Models.Business;
@@ -43,6 +44,12 @@ public interface IProviderBillingService
Provider provider,
Organization organization);
+ ///
+ /// Generate a provider's client invoice report in CSV format for the specified . Utilizes the
+ /// records saved for the as part of our webhook processing for the "invoice.created" and "invoice.finalized" Stripe events.
+ ///
+ /// The ID of the Stripe to generate the report for.
+ /// The provider's client invoice report as a byte array.
Task GenerateClientInvoiceReport(
string invoiceId);
From f045d06a9c26eb890136bbafa01b6973d076d7ac Mon Sep 17 00:00:00 2001
From: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
Date: Wed, 26 Jun 2024 16:34:16 +0100
Subject: [PATCH 07/40] [AC-2361] Refactor StripeController (#4136)
* Changes ensures provider_id is handled and stored for Braintree.
Signed-off-by: Cy Okeke
* refactoring of the stripeController class
Signed-off-by: Cy Okeke
* Move the constant variables to utility class
Signed-off-by: Cy Okeke
* Adding comments to the methods
Signed-off-by: Cy Okeke
* Add more comments to describe the method
Signed-off-by: Cy Okeke
* Add the providerId changes
Signed-off-by: Cy Okeke
* Add the missing providerId
Signed-off-by: Cy Okeke
* Fix the IsSponsoredSubscription bug
Signed-off-by: Cy Okeke
---------
Signed-off-by: Cy Okeke
---
src/Billing/Controllers/StripeController.cs | 1193 +----------------
src/Billing/Services/IStripeEventProcessor.cs | 12 +
.../Services/IStripeEventUtilityService.cs | 67 +
src/Billing/Services/IStripeWebhookHandler.cs | 67 +
.../Implementations/ChargeRefundedHandler.cs | 98 ++
.../Implementations/ChargeSucceededHandler.cs | 67 +
.../Implementations/CustomerUpdatedHandler.cs | 60 +
.../Implementations/InvoiceCreatedHandler.cs | 35 +
.../InvoiceFinalizedHandler.cs | 23 +
.../Implementations/PaymentFailedHandler.cs | 52 +
.../PaymentMethodAttachedHandler.cs | 96 ++
.../PaymentSucceededHandler.cs | 171 +++
.../Implementations/StripeEventProcessor.cs | 89 ++
.../StripeEventUtilityService.cs | 401 ++++++
.../SubscriptionDeletedHandler.cs | 49 +
.../SubscriptionUpdatedHandler.cs | 176 +++
.../Implementations/UpcomingInvoiceHandler.cs | 215 +++
src/Billing/Startup.cs | 15 +
18 files changed, 1705 insertions(+), 1181 deletions(-)
create mode 100644 src/Billing/Services/IStripeEventProcessor.cs
create mode 100644 src/Billing/Services/IStripeEventUtilityService.cs
create mode 100644 src/Billing/Services/IStripeWebhookHandler.cs
create mode 100644 src/Billing/Services/Implementations/ChargeRefundedHandler.cs
create mode 100644 src/Billing/Services/Implementations/ChargeSucceededHandler.cs
create mode 100644 src/Billing/Services/Implementations/CustomerUpdatedHandler.cs
create mode 100644 src/Billing/Services/Implementations/InvoiceCreatedHandler.cs
create mode 100644 src/Billing/Services/Implementations/InvoiceFinalizedHandler.cs
create mode 100644 src/Billing/Services/Implementations/PaymentFailedHandler.cs
create mode 100644 src/Billing/Services/Implementations/PaymentMethodAttachedHandler.cs
create mode 100644 src/Billing/Services/Implementations/PaymentSucceededHandler.cs
create mode 100644 src/Billing/Services/Implementations/StripeEventProcessor.cs
create mode 100644 src/Billing/Services/Implementations/StripeEventUtilityService.cs
create mode 100644 src/Billing/Services/Implementations/SubscriptionDeletedHandler.cs
create mode 100644 src/Billing/Services/Implementations/SubscriptionUpdatedHandler.cs
create mode 100644 src/Billing/Services/Implementations/UpcomingInvoiceHandler.cs
diff --git a/src/Billing/Controllers/StripeController.cs b/src/Billing/Controllers/StripeController.cs
index b03f6633d..9bca9f024 100644
--- a/src/Billing/Controllers/StripeController.cs
+++ b/src/Billing/Controllers/StripeController.cs
@@ -1,115 +1,35 @@
-using Bit.Billing.Constants;
-using Bit.Billing.Models;
+using Bit.Billing.Models;
using Bit.Billing.Services;
-using Bit.Core;
-using Bit.Core.AdminConsole.Entities;
-using Bit.Core.AdminConsole.Repositories;
-using Bit.Core.Billing.Constants;
-using Bit.Core.Billing.Enums;
-using Bit.Core.Context;
-using Bit.Core.Enums;
-using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;
-using Bit.Core.Repositories;
-using Bit.Core.Services;
-using Bit.Core.Settings;
-using Bit.Core.Tools.Enums;
-using Bit.Core.Tools.Models.Business;
-using Bit.Core.Tools.Services;
using Bit.Core.Utilities;
-using Braintree;
-using Braintree.Exceptions;
using Microsoft.AspNetCore.Mvc;
-using Microsoft.Data.SqlClient;
using Microsoft.Extensions.Options;
using Stripe;
-using Customer = Stripe.Customer;
using Event = Stripe.Event;
using JsonSerializer = System.Text.Json.JsonSerializer;
-using Subscription = Stripe.Subscription;
-using TaxRate = Bit.Core.Entities.TaxRate;
-using Transaction = Bit.Core.Entities.Transaction;
-using TransactionType = Bit.Core.Enums.TransactionType;
namespace Bit.Billing.Controllers;
[Route("stripe")]
public class StripeController : Controller
{
- private const string PremiumPlanId = "premium-annually";
- private const string PremiumPlanIdAppStore = "premium-annually-app";
-
private readonly BillingSettings _billingSettings;
private readonly IWebHostEnvironment _hostingEnvironment;
- private readonly IOrganizationService _organizationService;
- private readonly IValidateSponsorshipCommand _validateSponsorshipCommand;
- private readonly IOrganizationSponsorshipRenewCommand _organizationSponsorshipRenewCommand;
- private readonly IOrganizationRepository _organizationRepository;
- private readonly ITransactionRepository _transactionRepository;
- private readonly IUserService _userService;
- private readonly IMailService _mailService;
private readonly ILogger _logger;
- private readonly BraintreeGateway _btGateway;
- private readonly IReferenceEventService _referenceEventService;
- private readonly ITaxRateRepository _taxRateRepository;
- private readonly IUserRepository _userRepository;
- private readonly ICurrentContext _currentContext;
- private readonly GlobalSettings _globalSettings;
private readonly IStripeEventService _stripeEventService;
- private readonly IStripeFacade _stripeFacade;
- private readonly IFeatureService _featureService;
- private readonly IProviderRepository _providerRepository;
- private readonly IProviderEventService _providerEventService;
+ private readonly IStripeEventProcessor _stripeEventProcessor;
public StripeController(
- GlobalSettings globalSettings,
IOptions billingSettings,
IWebHostEnvironment hostingEnvironment,
- IOrganizationService organizationService,
- IValidateSponsorshipCommand validateSponsorshipCommand,
- IOrganizationSponsorshipRenewCommand organizationSponsorshipRenewCommand,
- IOrganizationRepository organizationRepository,
- ITransactionRepository transactionRepository,
- IUserService userService,
- IMailService mailService,
- IReferenceEventService referenceEventService,
ILogger logger,
- ITaxRateRepository taxRateRepository,
- IUserRepository userRepository,
- ICurrentContext currentContext,
IStripeEventService stripeEventService,
- IStripeFacade stripeFacade,
- IFeatureService featureService,
- IProviderRepository providerRepository,
- IProviderEventService providerEventService)
+ IStripeEventProcessor stripeEventProcessor)
{
_billingSettings = billingSettings?.Value;
_hostingEnvironment = hostingEnvironment;
- _organizationService = organizationService;
- _validateSponsorshipCommand = validateSponsorshipCommand;
- _organizationSponsorshipRenewCommand = organizationSponsorshipRenewCommand;
- _organizationRepository = organizationRepository;
- _transactionRepository = transactionRepository;
- _userService = userService;
- _mailService = mailService;
- _referenceEventService = referenceEventService;
- _taxRateRepository = taxRateRepository;
- _userRepository = userRepository;
_logger = logger;
- _btGateway = new BraintreeGateway
- {
- Environment = globalSettings.Braintree.Production ?
- Braintree.Environment.PRODUCTION : Braintree.Environment.SANDBOX,
- MerchantId = globalSettings.Braintree.MerchantId,
- PublicKey = globalSettings.Braintree.PublicKey,
- PrivateKey = globalSettings.Braintree.PrivateKey
- };
- _currentContext = currentContext;
- _globalSettings = globalSettings;
_stripeEventService = stripeEventService;
- _stripeFacade = stripeFacade;
- _featureService = featureService;
- _providerRepository = providerRepository;
- _providerEventService = providerEventService;
+ _stripeEventProcessor = stripeEventProcessor;
}
[HttpPost("webhook")]
@@ -155,1107 +75,18 @@ public class StripeController : Controller
return new OkResult();
}
- switch (parsedEvent.Type)
- {
- case HandledStripeWebhook.SubscriptionDeleted:
- {
- await HandleCustomerSubscriptionDeletedEventAsync(parsedEvent);
- return Ok();
- }
- case HandledStripeWebhook.SubscriptionUpdated:
- {
- await HandleCustomerSubscriptionUpdatedEventAsync(parsedEvent);
- return Ok();
- }
- case HandledStripeWebhook.UpcomingInvoice:
- {
- await HandleUpcomingInvoiceEventAsync(parsedEvent);
- return Ok();
- }
- case HandledStripeWebhook.ChargeSucceeded:
- {
- await HandleChargeSucceededEventAsync(parsedEvent);
- return Ok();
- }
- case HandledStripeWebhook.ChargeRefunded:
- {
- await HandleChargeRefundedEventAsync(parsedEvent);
- return Ok();
- }
- case HandledStripeWebhook.PaymentSucceeded:
- {
- await HandlePaymentSucceededEventAsync(parsedEvent);
- return Ok();
- }
- case HandledStripeWebhook.PaymentFailed:
- {
- await HandlePaymentFailedEventAsync(parsedEvent);
- return Ok();
- }
- case HandledStripeWebhook.InvoiceCreated:
- {
- await HandleInvoiceCreatedEventAsync(parsedEvent);
- return Ok();
- }
- case HandledStripeWebhook.PaymentMethodAttached:
- {
- await HandlePaymentMethodAttachedAsync(parsedEvent);
- return Ok();
- }
- case HandledStripeWebhook.CustomerUpdated:
- {
- await HandleCustomerUpdatedEventAsync(parsedEvent);
- return Ok();
- }
- case HandledStripeWebhook.InvoiceFinalized:
- {
- await HandleInvoiceFinalizedEventAsync(parsedEvent);
- return Ok();
- }
- default:
- {
- _logger.LogWarning("Unsupported event received. {EventType}", parsedEvent.Type);
- return Ok();
- }
- }
+ await _stripeEventProcessor.ProcessEventAsync(parsedEvent);
+ return Ok();
}
///
- /// Handles the event type from Stripe.
+ /// Selects the appropriate Stripe webhook secret based on the API version specified in the webhook body.
///
- ///
- private async Task HandleCustomerSubscriptionUpdatedEventAsync(Event parsedEvent)
- {
- var subscription = await _stripeEventService.GetSubscription(parsedEvent, true, ["customer", "discounts"]);
- var (organizationId, userId, providerId) = GetIdsFromMetadata(subscription.Metadata);
-
- switch (subscription.Status)
- {
- case StripeSubscriptionStatus.Unpaid or StripeSubscriptionStatus.IncompleteExpired
- when organizationId.HasValue:
- {
- await _organizationService.DisableAsync(organizationId.Value, subscription.CurrentPeriodEnd);
- break;
- }
- case StripeSubscriptionStatus.Unpaid or StripeSubscriptionStatus.IncompleteExpired:
- {
- if (!userId.HasValue)
- {
- break;
- }
-
- if (subscription.Status is StripeSubscriptionStatus.Unpaid &&
- subscription.Items.Any(i => i.Price.Id is PremiumPlanId or PremiumPlanIdAppStore))
- {
- await CancelSubscription(subscription.Id);
- await VoidOpenInvoices(subscription.Id);
- }
-
- await _userService.DisablePremiumAsync(userId.Value, subscription.CurrentPeriodEnd);
-
- break;
- }
- case StripeSubscriptionStatus.Active when organizationId.HasValue:
- {
- await _organizationService.EnableAsync(organizationId.Value);
- break;
- }
- case StripeSubscriptionStatus.Active:
- {
- if (userId.HasValue)
- {
- await _userService.EnablePremiumAsync(userId.Value, subscription.CurrentPeriodEnd);
- }
-
- break;
- }
- }
-
- if (organizationId.HasValue)
- {
- await _organizationService.UpdateExpirationDateAsync(organizationId.Value, subscription.CurrentPeriodEnd);
- if (IsSponsoredSubscription(subscription))
- {
- await _organizationSponsorshipRenewCommand.UpdateExpirationDateAsync(organizationId.Value, subscription.CurrentPeriodEnd);
- }
-
- await RemovePasswordManagerCouponIfRemovingSecretsManagerTrialAsync(parsedEvent, subscription);
- }
- else if (userId.HasValue)
- {
- await _userService.UpdatePremiumExpirationAsync(userId.Value, subscription.CurrentPeriodEnd);
- }
- }
-
- ///
- /// Removes the Password Manager coupon if the organization is removing the Secrets Manager trial.
- /// Only applies to organizations that have a subscription from the Secrets Manager trial.
- ///
- ///
- ///
- private async Task RemovePasswordManagerCouponIfRemovingSecretsManagerTrialAsync(Event parsedEvent,
- Subscription subscription)
- {
- if (parsedEvent.Data.PreviousAttributes?.items is null)
- {
- return;
- }
-
- var previousSubscription = parsedEvent.Data
- .PreviousAttributes
- .ToObject() as Subscription;
-
- // This being false doesn't necessarily mean that the organization doesn't subscribe to Secrets Manager.
- // If there are changes to any subscription item, Stripe sends every item in the subscription, both
- // changed and unchanged.
- var previousSubscriptionHasSecretsManager = previousSubscription?.Items is not null &&
- previousSubscription.Items.Any(previousItem =>
- StaticStore.Plans.Any(p =>
- p.SecretsManager is not null &&
- p.SecretsManager.StripeSeatPlanId ==
- previousItem.Plan.Id));
-
- var currentSubscriptionHasSecretsManager = subscription.Items.Any(i =>
- StaticStore.Plans.Any(p =>
- p.SecretsManager is not null &&
- p.SecretsManager.StripeSeatPlanId == i.Plan.Id));
-
- if (!previousSubscriptionHasSecretsManager || currentSubscriptionHasSecretsManager)
- {
- return;
- }
-
- var customerHasSecretsManagerTrial = subscription.Customer
- ?.Discount
- ?.Coupon
- ?.Id == "sm-standalone";
-
- var subscriptionHasSecretsManagerTrial = subscription.Discount
- ?.Coupon
- ?.Id == "sm-standalone";
-
- if (customerHasSecretsManagerTrial)
- {
- await _stripeFacade.DeleteCustomerDiscount(subscription.CustomerId);
- }
-
- if (subscriptionHasSecretsManagerTrial)
- {
- await _stripeFacade.DeleteSubscriptionDiscount(subscription.Id);
- }
- }
-
- ///
- /// Handles the event type from Stripe.
- ///
- ///
- private async Task HandleCustomerSubscriptionDeletedEventAsync(Event parsedEvent)
- {
- var subscription = await _stripeEventService.GetSubscription(parsedEvent, true);
- var (organizationId, userId, providerId) = GetIdsFromMetadata(subscription.Metadata);
- var subCanceled = subscription.Status == StripeSubscriptionStatus.Canceled;
-
- if (!subCanceled)
- {
- return;
- }
-
- if (organizationId.HasValue)
- {
- await _organizationService.DisableAsync(organizationId.Value, subscription.CurrentPeriodEnd);
- }
- else if (userId.HasValue)
- {
- await _userService.DisablePremiumAsync(userId.Value, subscription.CurrentPeriodEnd);
- }
- }
-
- ///
- /// Handles the event type from Stripe.
- ///
- ///
- private async Task HandleCustomerUpdatedEventAsync(Event parsedEvent)
- {
- var customer = await _stripeEventService.GetCustomer(parsedEvent, true, ["subscriptions"]);
- if (customer.Subscriptions == null || !customer.Subscriptions.Any())
- {
- return;
- }
-
- var subscription = customer.Subscriptions.First();
-
- var (organizationId, _, providerId) = GetIdsFromMetadata(subscription.Metadata);
-
- if (!organizationId.HasValue)
- {
- return;
- }
-
- var organization = await _organizationRepository.GetByIdAsync(organizationId.Value);
- organization.BillingEmail = customer.Email;
- await _organizationRepository.ReplaceAsync(organization);
-
- await _referenceEventService.RaiseEventAsync(
- new ReferenceEvent(ReferenceEventType.OrganizationEditedInStripe, organization, _currentContext));
- }
-
- ///
- /// Handles the event type from Stripe.
- ///
- ///
- private async Task HandleInvoiceCreatedEventAsync(Event parsedEvent)
- {
- var invoice = await _stripeEventService.GetInvoice(parsedEvent, true);
-
- if (ShouldAttemptToPayInvoice(invoice))
- {
- await AttemptToPayInvoiceAsync(invoice);
- }
-
- await _providerEventService.TryRecordInvoiceLineItems(parsedEvent);
- }
-
- private async Task HandleInvoiceFinalizedEventAsync(Event parsedEvent)
- {
- await _providerEventService.TryRecordInvoiceLineItems(parsedEvent);
- }
-
- ///
- /// Handles the event type from Stripe.
- ///
- ///
- private async Task HandlePaymentSucceededEventAsync(Event parsedEvent)
- {
- var invoice = await _stripeEventService.GetInvoice(parsedEvent, true);
- if (!invoice.Paid || invoice.BillingReason != "subscription_create")
- {
- return;
- }
-
- var subscription = await _stripeFacade.GetSubscription(invoice.SubscriptionId);
- if (subscription?.Status != StripeSubscriptionStatus.Active)
- {
- return;
- }
-
- if (DateTime.UtcNow - invoice.Created < TimeSpan.FromMinutes(1))
- {
- await Task.Delay(5000);
- }
-
- var (organizationId, userId, providerId) = GetIdsFromMetadata(subscription.Metadata);
-
- if (providerId.HasValue)
- {
- var provider = await _providerRepository.GetByIdAsync(providerId.Value);
-
- if (provider == null)
- {
- _logger.LogError(
- "Received invoice.payment_succeeded webhook ({EventID}) for Provider ({ProviderID}) that does not exist",
- parsedEvent.Id,
- providerId.Value);
-
- return;
- }
-
- var teamsMonthly = StaticStore.GetPlan(PlanType.TeamsMonthly);
-
- var enterpriseMonthly = StaticStore.GetPlan(PlanType.EnterpriseMonthly);
-
- var teamsMonthlyLineItem =
- subscription.Items.Data.FirstOrDefault(item =>
- item.Plan.Id == teamsMonthly.PasswordManager.StripeSeatPlanId);
-
- var enterpriseMonthlyLineItem =
- subscription.Items.Data.FirstOrDefault(item =>
- item.Plan.Id == enterpriseMonthly.PasswordManager.StripeSeatPlanId);
-
- if (teamsMonthlyLineItem == null || enterpriseMonthlyLineItem == null)
- {
- _logger.LogError("invoice.payment_succeeded webhook ({EventID}) for Provider ({ProviderID}) indicates missing subscription line items",
- parsedEvent.Id,
- provider.Id);
-
- return;
- }
-
- await _referenceEventService.RaiseEventAsync(new ReferenceEvent
- {
- Type = ReferenceEventType.Rebilled,
- Source = ReferenceEventSource.Provider,
- Id = provider.Id,
- PlanType = PlanType.TeamsMonthly,
- Seats = (int)teamsMonthlyLineItem.Quantity
- });
-
- await _referenceEventService.RaiseEventAsync(new ReferenceEvent
- {
- Type = ReferenceEventType.Rebilled,
- Source = ReferenceEventSource.Provider,
- Id = provider.Id,
- PlanType = PlanType.EnterpriseMonthly,
- Seats = (int)enterpriseMonthlyLineItem.Quantity
- });
- }
- else if (organizationId.HasValue)
- {
- if (!subscription.Items.Any(i =>
- StaticStore.Plans.Any(p => p.PasswordManager.StripePlanId == i.Plan.Id)))
- {
- return;
- }
-
- await _organizationService.EnableAsync(organizationId.Value, subscription.CurrentPeriodEnd);
- var organization = await _organizationRepository.GetByIdAsync(organizationId.Value);
-
- await _referenceEventService.RaiseEventAsync(
- new ReferenceEvent(ReferenceEventType.Rebilled, organization, _currentContext)
- {
- PlanName = organization?.Plan,
- PlanType = organization?.PlanType,
- Seats = organization?.Seats,
- Storage = organization?.MaxStorageGb,
- });
- }
- else if (userId.HasValue)
- {
- if (subscription.Items.All(i => i.Plan.Id != PremiumPlanId))
- {
- return;
- }
-
- await _userService.EnablePremiumAsync(userId.Value, subscription.CurrentPeriodEnd);
-
- var user = await _userRepository.GetByIdAsync(userId.Value);
- await _referenceEventService.RaiseEventAsync(
- new ReferenceEvent(ReferenceEventType.Rebilled, user, _currentContext)
- {
- PlanName = PremiumPlanId,
- Storage = user?.MaxStorageGb,
- });
- }
- }
-
- ///
- /// Handles the event type from Stripe.
- ///
- ///
- private async Task HandleChargeRefundedEventAsync(Event parsedEvent)
- {
- var charge = await _stripeEventService.GetCharge(parsedEvent, true, ["refunds"]);
- var parentTransaction = await _transactionRepository.GetByGatewayIdAsync(GatewayType.Stripe, charge.Id);
- if (parentTransaction == null)
- {
- // Attempt to create a transaction for the charge if it doesn't exist
- var (organizationId, userId, providerId) = await GetEntityIdsFromChargeAsync(charge);
- var tx = FromChargeToTransaction(charge, organizationId, userId, providerId);
- try
- {
- parentTransaction = await _transactionRepository.CreateAsync(tx);
- }
- catch (SqlException e) when (e.Number == 547) // FK constraint violation
- {
- _logger.LogWarning(
- "Charge refund could not create transaction as entity may have been deleted. {ChargeId}",
- charge.Id);
- return;
- }
- }
-
- var amountRefunded = charge.AmountRefunded / 100M;
-
- if (parentTransaction.Refunded.GetValueOrDefault() ||
- parentTransaction.RefundedAmount.GetValueOrDefault() >= amountRefunded)
- {
- _logger.LogWarning(
- "Charge refund amount doesn't match parent transaction's amount or parent has already been refunded. {ChargeId}",
- charge.Id);
- return;
- }
-
- parentTransaction.RefundedAmount = amountRefunded;
- if (charge.Refunded)
- {
- parentTransaction.Refunded = true;
- }
-
- await _transactionRepository.ReplaceAsync(parentTransaction);
-
- foreach (var refund in charge.Refunds)
- {
- var refundTransaction = await _transactionRepository.GetByGatewayIdAsync(
- GatewayType.Stripe, refund.Id);
- if (refundTransaction != null)
- {
- continue;
- }
-
- await _transactionRepository.CreateAsync(new Transaction
- {
- Amount = refund.Amount / 100M,
- CreationDate = refund.Created,
- OrganizationId = parentTransaction.OrganizationId,
- UserId = parentTransaction.UserId,
- ProviderId = parentTransaction.ProviderId,
- Type = TransactionType.Refund,
- Gateway = GatewayType.Stripe,
- GatewayId = refund.Id,
- PaymentMethodType = parentTransaction.PaymentMethodType,
- Details = parentTransaction.Details
- });
- }
- }
-
- ///
- /// Handles the event type from Stripe.
- ///
- ///
- private async Task HandleChargeSucceededEventAsync(Event parsedEvent)
- {
- var charge = await _stripeEventService.GetCharge(parsedEvent);
- var existingTransaction = await _transactionRepository.GetByGatewayIdAsync(GatewayType.Stripe, charge.Id);
- if (existingTransaction is not null)
- {
- _logger.LogInformation("Charge success already processed. {ChargeId}", charge.Id);
- return;
- }
-
- var (organizationId, userId, providerId) = await GetEntityIdsFromChargeAsync(charge);
- if (!organizationId.HasValue && !userId.HasValue && !providerId.HasValue)
- {
- _logger.LogWarning("Charge success has no subscriber ids. {ChargeId}", charge.Id);
- return;
- }
-
- var transaction = FromChargeToTransaction(charge, organizationId, userId, providerId);
- if (!transaction.PaymentMethodType.HasValue)
- {
- _logger.LogWarning("Charge success from unsupported source/method. {ChargeId}", charge.Id);
- return;
- }
-
- try
- {
- await _transactionRepository.CreateAsync(transaction);
- }
- catch (SqlException e) when (e.Number == 547)
- {
- _logger.LogWarning(
- "Charge success could not create transaction as entity may have been deleted. {ChargeId}",
- charge.Id);
- }
- }
-
- ///
- /// Handles the event type from Stripe.
- ///
- ///
- ///
- private async Task HandleUpcomingInvoiceEventAsync(Event parsedEvent)
- {
- var invoice = await _stripeEventService.GetInvoice(parsedEvent);
- if (string.IsNullOrEmpty(invoice.SubscriptionId))
- {
- _logger.LogWarning("Received 'invoice.upcoming' Event with ID '{eventId}' that did not include a Subscription ID", parsedEvent.Id);
- return;
- }
-
- var subscription = await _stripeFacade.GetSubscription(invoice.SubscriptionId);
-
- if (subscription == null)
- {
- throw new Exception(
- $"Received null Subscription from Stripe for ID '{invoice.SubscriptionId}' while processing Event with ID '{parsedEvent.Id}'");
- }
-
- var pm5766AutomaticTaxIsEnabled = _featureService.IsEnabled(FeatureFlagKeys.PM5766AutomaticTax);
- if (pm5766AutomaticTaxIsEnabled)
- {
- var customerGetOptions = new CustomerGetOptions();
- customerGetOptions.AddExpand("tax");
- var customer = await _stripeFacade.GetCustomer(subscription.CustomerId, customerGetOptions);
- if (!subscription.AutomaticTax.Enabled &&
- customer.Tax?.AutomaticTax == StripeConstants.AutomaticTaxStatus.Supported)
- {
- subscription = await _stripeFacade.UpdateSubscription(subscription.Id,
- new SubscriptionUpdateOptions
- {
- DefaultTaxRates = [],
- AutomaticTax = new SubscriptionAutomaticTaxOptions { Enabled = true }
- });
- }
- }
-
- var updatedSubscription = pm5766AutomaticTaxIsEnabled
- ? subscription
- : await VerifyCorrectTaxRateForCharge(invoice, subscription);
-
- var (organizationId, userId, providerId) = GetIdsFromMetadata(updatedSubscription.Metadata);
-
- var invoiceLineItemDescriptions = invoice.Lines.Select(i => i.Description).ToList();
-
- if (organizationId.HasValue)
- {
- if (IsSponsoredSubscription(updatedSubscription))
- {
- await _validateSponsorshipCommand.ValidateSponsorshipAsync(organizationId.Value);
- }
-
- var organization = await _organizationRepository.GetByIdAsync(organizationId.Value);
-
- if (organization == null || !OrgPlanForInvoiceNotifications(organization))
- {
- return;
- }
-
- await SendEmails(new List { organization.BillingEmail });
-
- /*
- * TODO: https://bitwarden.atlassian.net/browse/PM-4862
- * Disabling this as part of a hot fix. It needs to check whether the organization
- * belongs to a Reseller provider and only send an email to the organization owners if it does.
- * It also requires a new email template as the current one contains too much billing information.
- */
-
- // var ownerEmails = await _organizationRepository.GetOwnerEmailAddressesById(organization.Id);
-
- // await SendEmails(ownerEmails);
- }
- else if (userId.HasValue)
- {
- var user = await _userService.GetUserByIdAsync(userId.Value);
-
- if (user?.Premium == true)
- {
- await SendEmails(new List { user.Email });
- }
- }
- else if (providerId.HasValue)
- {
- var provider = await _providerRepository.GetByIdAsync(providerId.Value);
-
- if (provider == null)
- {
- _logger.LogError(
- "Received invoice.Upcoming webhook ({EventID}) for Provider ({ProviderID}) that does not exist",
- parsedEvent.Id,
- providerId.Value);
-
- return;
- }
-
- await SendEmails(new List { provider.BillingEmail });
-
- }
-
- return;
-
- /*
- * Sends emails to the given email addresses.
- */
- async Task SendEmails(IEnumerable emails)
- {
- var validEmails = emails.Where(e => !string.IsNullOrEmpty(e));
-
- if (invoice.NextPaymentAttempt.HasValue)
- {
- await _mailService.SendInvoiceUpcoming(
- validEmails,
- invoice.AmountDue / 100M,
- invoice.NextPaymentAttempt.Value,
- invoiceLineItemDescriptions,
- true);
- }
- }
- }
-
- ///
- /// Gets the organization or user ID from the metadata of a Stripe Charge object.
- ///
- ///
- ///
- private async Task<(Guid?, Guid?, Guid?)> GetEntityIdsFromChargeAsync(Charge charge)
- {
- Guid? organizationId = null;
- Guid? userId = null;
- Guid? providerId = null;
-
- if (charge.InvoiceId != null)
- {
- var invoice = await _stripeFacade.GetInvoice(charge.InvoiceId);
- if (invoice?.SubscriptionId != null)
- {
- var subscription = await _stripeFacade.GetSubscription(invoice.SubscriptionId);
- (organizationId, userId, providerId) = GetIdsFromMetadata(subscription?.Metadata);
- }
- }
-
- if (organizationId.HasValue || userId.HasValue || providerId.HasValue)
- {
- return (organizationId, userId, providerId);
- }
-
- var subscriptions = await _stripeFacade.ListSubscriptions(new SubscriptionListOptions
- {
- Customer = charge.CustomerId
- });
-
- foreach (var subscription in subscriptions)
- {
- if (subscription.Status is StripeSubscriptionStatus.Canceled or StripeSubscriptionStatus.IncompleteExpired)
- {
- continue;
- }
-
- (organizationId, userId, providerId) = GetIdsFromMetadata(subscription.Metadata);
-
- if (organizationId.HasValue || userId.HasValue || providerId.HasValue)
- {
- return (organizationId, userId, providerId);
- }
- }
-
- return (null, null, null);
- }
-
- ///
- /// Converts a Stripe Charge object to a Bitwarden Transaction object.
- ///
- ///
- ///
- ///
- /// ///
- ///
- private static Transaction FromChargeToTransaction(Charge charge, Guid? organizationId, Guid? userId, Guid? providerId)
- {
- var transaction = new Transaction
- {
- Amount = charge.Amount / 100M,
- CreationDate = charge.Created,
- OrganizationId = organizationId,
- UserId = userId,
- ProviderId = providerId,
- Type = TransactionType.Charge,
- Gateway = GatewayType.Stripe,
- GatewayId = charge.Id
- };
-
- switch (charge.Source)
- {
- case Card card:
- {
- transaction.PaymentMethodType = PaymentMethodType.Card;
- transaction.Details = $"{card.Brand}, *{card.Last4}";
- break;
- }
- case BankAccount bankAccount:
- {
- transaction.PaymentMethodType = PaymentMethodType.BankAccount;
- transaction.Details = $"{bankAccount.BankName}, *{bankAccount.Last4}";
- break;
- }
- case Source { Card: not null } source:
- {
- transaction.PaymentMethodType = PaymentMethodType.Card;
- transaction.Details = $"{source.Card.Brand}, *{source.Card.Last4}";
- break;
- }
- case Source { AchDebit: not null } source:
- {
- transaction.PaymentMethodType = PaymentMethodType.BankAccount;
- transaction.Details = $"{source.AchDebit.BankName}, *{source.AchDebit.Last4}";
- break;
- }
- case Source source:
- {
- if (source.AchCreditTransfer == null)
- {
- break;
- }
-
- var achCreditTransfer = source.AchCreditTransfer;
-
- transaction.PaymentMethodType = PaymentMethodType.BankAccount;
- transaction.Details = $"ACH => {achCreditTransfer.BankName}, {achCreditTransfer.AccountNumber}";
-
- break;
- }
- default:
- {
- if (charge.PaymentMethodDetails == null)
- {
- break;
- }
-
- if (charge.PaymentMethodDetails.Card != null)
- {
- var card = charge.PaymentMethodDetails.Card;
- transaction.PaymentMethodType = PaymentMethodType.Card;
- transaction.Details = $"{card.Brand?.ToUpperInvariant()}, *{card.Last4}";
- }
- else if (charge.PaymentMethodDetails.AchDebit != null)
- {
- var achDebit = charge.PaymentMethodDetails.AchDebit;
- transaction.PaymentMethodType = PaymentMethodType.BankAccount;
- transaction.Details = $"{achDebit.BankName}, *{achDebit.Last4}";
- }
- else if (charge.PaymentMethodDetails.AchCreditTransfer != null)
- {
- var achCreditTransfer = charge.PaymentMethodDetails.AchCreditTransfer;
- transaction.PaymentMethodType = PaymentMethodType.BankAccount;
- transaction.Details = $"ACH => {achCreditTransfer.BankName}, {achCreditTransfer.AccountNumber}";
- }
-
- break;
- }
- }
-
- return transaction;
- }
-
- ///
- /// Handles the event type from Stripe.
- ///
- ///
- private async Task HandlePaymentMethodAttachedAsync(Event parsedEvent)
- {
- var paymentMethod = await _stripeEventService.GetPaymentMethod(parsedEvent);
- if (paymentMethod is null)
- {
- _logger.LogWarning("Attempted to handle the event payment_method.attached but paymentMethod was null");
- return;
- }
-
- var subscriptionListOptions = new SubscriptionListOptions
- {
- Customer = paymentMethod.CustomerId,
- Status = StripeSubscriptionStatus.Unpaid,
- Expand = ["data.latest_invoice"]
- };
-
- StripeList unpaidSubscriptions;
- try
- {
- unpaidSubscriptions = await _stripeFacade.ListSubscriptions(subscriptionListOptions);
- }
- catch (Exception e)
- {
- _logger.LogError(e,
- "Attempted to get unpaid invoices for customer {CustomerId} but encountered an error while calling Stripe",
- paymentMethod.CustomerId);
-
- return;
- }
-
- foreach (var unpaidSubscription in unpaidSubscriptions)
- {
- await AttemptToPayOpenSubscriptionAsync(unpaidSubscription);
- }
- }
-
- private async Task AttemptToPayOpenSubscriptionAsync(Subscription unpaidSubscription)
- {
- var latestInvoice = unpaidSubscription.LatestInvoice;
-
- if (unpaidSubscription.LatestInvoice is null)
- {
- _logger.LogWarning(
- "Attempted to pay unpaid subscription {SubscriptionId} but latest invoice didn't exist",
- unpaidSubscription.Id);
-
- return;
- }
-
- if (latestInvoice.Status != StripeInvoiceStatus.Open)
- {
- _logger.LogWarning(
- "Attempted to pay unpaid subscription {SubscriptionId} but latest invoice wasn't \"open\"",
- unpaidSubscription.Id);
-
- return;
- }
-
- try
- {
- await AttemptToPayInvoiceAsync(latestInvoice, true);
- }
- catch (Exception e)
- {
- _logger.LogError(e,
- "Attempted to pay open invoice {InvoiceId} on unpaid subscription {SubscriptionId} but encountered an error",
- latestInvoice.Id, unpaidSubscription.Id);
- throw;
- }
- }
-
- ///
- /// Gets the organizationId, userId, or providerId from the metadata of a Stripe Subscription object.
- ///
- ///
- ///
- private static Tuple GetIdsFromMetadata(Dictionary metadata)
- {
- if (metadata == null || metadata.Count == 0)
- {
- return new Tuple(null, null, null);
- }
-
- metadata.TryGetValue("organizationId", out var orgIdString);
- metadata.TryGetValue("userId", out var userIdString);
- metadata.TryGetValue("providerId", out var providerIdString);
-
- orgIdString ??= metadata.FirstOrDefault(x =>
- x.Key.Equals("organizationId", StringComparison.OrdinalIgnoreCase)).Value;
-
- userIdString ??= metadata.FirstOrDefault(x =>
- x.Key.Equals("userId", StringComparison.OrdinalIgnoreCase)).Value;
-
- providerIdString ??= metadata.FirstOrDefault(x =>
- x.Key.Equals("providerId", StringComparison.OrdinalIgnoreCase)).Value;
-
- Guid? organizationId = string.IsNullOrWhiteSpace(orgIdString) ? null : new Guid(orgIdString);
- Guid? userId = string.IsNullOrWhiteSpace(userIdString) ? null : new Guid(userIdString);
- Guid? providerId = string.IsNullOrWhiteSpace(providerIdString) ? null : new Guid(providerIdString);
-
- return new Tuple(organizationId, userId, providerId);
- }
-
- private static bool OrgPlanForInvoiceNotifications(Organization org) => StaticStore.GetPlan(org.PlanType).IsAnnual;
-
- private async Task AttemptToPayInvoiceAsync(Invoice invoice, bool attemptToPayWithStripe = false)
- {
- var customer = await _stripeFacade.GetCustomer(invoice.CustomerId);
-
- if (customer?.Metadata?.ContainsKey("btCustomerId") ?? false)
- {
- return await AttemptToPayInvoiceWithBraintreeAsync(invoice, customer);
- }
-
- if (attemptToPayWithStripe)
- {
- return await AttemptToPayInvoiceWithStripeAsync(invoice);
- }
-
- return false;
- }
-
- private async Task AttemptToPayInvoiceWithBraintreeAsync(Invoice invoice, Customer customer)
- {
- _logger.LogDebug("Attempting to pay invoice with Braintree");
- if (!customer?.Metadata?.ContainsKey("btCustomerId") ?? true)
- {
- _logger.LogWarning(
- "Attempted to pay invoice with Braintree but btCustomerId wasn't on Stripe customer metadata");
- return false;
- }
-
- var subscription = await _stripeFacade.GetSubscription(invoice.SubscriptionId);
- var (organizationId, userId, providerId) = GetIdsFromMetadata(subscription?.Metadata);
- if (!organizationId.HasValue && !userId.HasValue)
- {
- _logger.LogWarning(
- "Attempted to pay invoice with Braintree but Stripe subscription metadata didn't contain either a organizationId or userId");
- return false;
- }
-
- var orgTransaction = organizationId.HasValue;
- var btObjIdField = orgTransaction ? "organization_id" : "user_id";
- var btObjId = organizationId ?? userId.Value;
- var btInvoiceAmount = invoice.AmountDue / 100M;
-
- var existingTransactions = orgTransaction ?
- await _transactionRepository.GetManyByOrganizationIdAsync(organizationId.Value) :
- await _transactionRepository.GetManyByUserIdAsync(userId.Value);
- var duplicateTimeSpan = TimeSpan.FromHours(24);
- var now = DateTime.UtcNow;
- var duplicateTransaction = existingTransactions?
- .FirstOrDefault(t => (now - t.CreationDate) < duplicateTimeSpan);
- if (duplicateTransaction != null)
- {
- _logger.LogWarning("There is already a recent PayPal transaction ({0}). " +
- "Do not charge again to prevent possible duplicate.", duplicateTransaction.GatewayId);
- return false;
- }
-
- Result transactionResult;
- try
- {
- transactionResult = await _btGateway.Transaction.SaleAsync(
- new Braintree.TransactionRequest
- {
- Amount = btInvoiceAmount,
- CustomerId = customer.Metadata["btCustomerId"],
- Options = new Braintree.TransactionOptionsRequest
- {
- SubmitForSettlement = true,
- PayPal = new Braintree.TransactionOptionsPayPalRequest
- {
- CustomField =
- $"{btObjIdField}:{btObjId},region:{_globalSettings.BaseServiceUri.CloudRegion}"
- }
- },
- CustomFields = new Dictionary
- {
- [btObjIdField] = btObjId.ToString(),
- ["region"] = _globalSettings.BaseServiceUri.CloudRegion
- }
- });
- }
- catch (NotFoundException e)
- {
- _logger.LogError(e,
- "Attempted to make a payment with Braintree, but customer did not exist for the given btCustomerId present on the Stripe metadata");
- throw;
- }
-
- if (!transactionResult.IsSuccess())
- {
- if (invoice.AttemptCount < 4)
- {
- await _mailService.SendPaymentFailedAsync(customer.Email, btInvoiceAmount, true);
- }
- return false;
- }
-
- try
- {
- await _stripeFacade.UpdateInvoice(invoice.Id, new InvoiceUpdateOptions
- {
- Metadata = new Dictionary
- {
- ["btTransactionId"] = transactionResult.Target.Id,
- ["btPayPalTransactionId"] =
- transactionResult.Target.PayPalDetails?.AuthorizationId
- }
- });
- await _stripeFacade.PayInvoice(invoice.Id, new InvoicePayOptions { PaidOutOfBand = true });
- }
- catch (Exception e)
- {
- await _btGateway.Transaction.RefundAsync(transactionResult.Target.Id);
- if (e.Message.Contains("Invoice is already paid"))
- {
- await _stripeFacade.UpdateInvoice(invoice.Id, new InvoiceUpdateOptions
- {
- Metadata = invoice.Metadata
- });
- }
- else
- {
- throw;
- }
- }
-
- return true;
- }
-
- private async Task AttemptToPayInvoiceWithStripeAsync(Invoice invoice)
- {
- try
- {
- await _stripeFacade.PayInvoice(invoice.Id);
- return true;
- }
- catch (Exception e)
- {
- _logger.LogWarning(
- e,
- "Exception occurred while trying to pay Stripe invoice with Id: {InvoiceId}",
- invoice.Id);
-
- throw;
- }
- }
-
- private static bool ShouldAttemptToPayInvoice(Invoice invoice) =>
- invoice is
- {
- AmountDue: > 0,
- Paid: false,
- CollectionMethod: "charge_automatically",
- BillingReason: "subscription_cycle" or "automatic_pending_invoice_item_invoice",
- SubscriptionId: not null
- };
-
- private async Task VerifyCorrectTaxRateForCharge(Invoice invoice, Subscription subscription)
- {
- if (string.IsNullOrWhiteSpace(invoice?.CustomerAddress?.Country) ||
- string.IsNullOrWhiteSpace(invoice?.CustomerAddress?.PostalCode))
- {
- return subscription;
- }
-
- var localBitwardenTaxRates = await _taxRateRepository.GetByLocationAsync(
- new TaxRate()
- {
- Country = invoice.CustomerAddress.Country,
- PostalCode = invoice.CustomerAddress.PostalCode
- }
- );
-
- if (!localBitwardenTaxRates.Any())
- {
- return subscription;
- }
-
- var stripeTaxRate = await _stripeFacade.GetTaxRate(localBitwardenTaxRates.First().Id);
- if (stripeTaxRate == null || subscription.DefaultTaxRates.Any(x => x == stripeTaxRate))
- {
- return subscription;
- }
-
- subscription.DefaultTaxRates = [stripeTaxRate];
-
- var subscriptionOptions = new SubscriptionUpdateOptions { DefaultTaxRates = [stripeTaxRate.Id] };
- subscription = await _stripeFacade.UpdateSubscription(subscription.Id, subscriptionOptions);
-
- return subscription;
- }
-
- private static bool IsSponsoredSubscription(Subscription subscription) =>
- StaticStore.SponsoredPlans
- .Any(p => subscription.Items
- .Any(i => i.Plan.Id == p.StripePlanId));
-
- ///
- /// Handles the event type from Stripe.
- ///
- ///
- private async Task HandlePaymentFailedEventAsync(Event parsedEvent)
- {
- var invoice = await _stripeEventService.GetInvoice(parsedEvent, true);
- if (invoice.Paid || invoice.AttemptCount <= 1 || !ShouldAttemptToPayInvoice(invoice))
- {
- return;
- }
-
- var subscription = await _stripeFacade.GetSubscription(invoice.SubscriptionId);
- // attempt count 4 = 11 days after initial failure
- if (invoice.AttemptCount <= 3 ||
- !subscription.Items.Any(i => i.Price.Id is PremiumPlanId or PremiumPlanIdAppStore))
- {
- await AttemptToPayInvoiceAsync(invoice);
- }
- }
-
- private async Task CancelSubscription(string subscriptionId) =>
- await _stripeFacade.CancelSubscription(subscriptionId, new SubscriptionCancelOptions());
-
- private async Task VoidOpenInvoices(string subscriptionId)
- {
- var options = new InvoiceListOptions
- {
- Status = StripeInvoiceStatus.Open,
- Subscription = subscriptionId
- };
- var invoices = await _stripeFacade.ListInvoices(options);
- foreach (var invoice in invoices)
- {
- await _stripeFacade.VoidInvoice(invoice.Id);
- }
- }
-
+ /// The body of the webhook request received from Stripe.
+ ///
+ /// The Stripe webhook secret corresponding to the API version found in the webhook body.
+ /// Returns null if the API version is unrecognized.
+ ///
private string PickStripeWebhookSecret(string webhookBody)
{
var versionContainer = JsonSerializer.Deserialize(webhookBody);
diff --git a/src/Billing/Services/IStripeEventProcessor.cs b/src/Billing/Services/IStripeEventProcessor.cs
new file mode 100644
index 000000000..6924585c0
--- /dev/null
+++ b/src/Billing/Services/IStripeEventProcessor.cs
@@ -0,0 +1,12 @@
+using Event = Stripe.Event;
+namespace Bit.Billing.Services;
+
+public interface IStripeEventProcessor
+{
+ ///
+ /// Processes the specified Stripe event asynchronously.
+ ///
+ /// The Stripe event to be processed.
+ /// A task representing the asynchronous operation.
+ Task ProcessEventAsync(Event parsedEvent);
+}
diff --git a/src/Billing/Services/IStripeEventUtilityService.cs b/src/Billing/Services/IStripeEventUtilityService.cs
new file mode 100644
index 000000000..a5f536ad1
--- /dev/null
+++ b/src/Billing/Services/IStripeEventUtilityService.cs
@@ -0,0 +1,67 @@
+using Stripe;
+using Transaction = Bit.Core.Entities.Transaction;
+namespace Bit.Billing.Services;
+
+public interface IStripeEventUtilityService
+{
+ ///
+ /// Gets the organization or user ID from the metadata of a Stripe Charge object.
+ ///
+ ///
+ ///
+ Task<(Guid?, Guid?, Guid?)> GetEntityIdsFromChargeAsync(Charge charge);
+
+ ///
+ /// Gets the organizationId, userId, or providerId from the metadata of a Stripe Subscription object.
+ ///
+ ///
+ ///
+ Tuple GetIdsFromMetadata(Dictionary metadata);
+
+ ///
+ /// Determines whether the specified subscription is a sponsored subscription.
+ ///
+ /// The subscription to be evaluated.
+ ///
+ /// A boolean value indicating whether the subscription is a sponsored subscription.
+ /// Returns true if the subscription matches any of the sponsored plans; otherwise, false.
+ ///
+ bool IsSponsoredSubscription(Subscription subscription);
+
+ ///
+ /// Converts a Stripe Charge object to a Bitwarden Transaction object.
+ ///
+ ///
+ ///
+ ///
+ /// ///
+ ///
+ Transaction FromChargeToTransaction(Charge charge, Guid? organizationId, Guid? userId, Guid? providerId);
+
+ ///
+ /// Attempts to pay the specified invoice. If a customer is eligible, the invoice is paid using Braintree or Stripe.
+ ///
+ /// The invoice to be paid.
+ /// Indicates whether to attempt payment with Stripe. Defaults to false.
+ /// A task representing the asynchronous operation. The task result contains a boolean value indicating whether the invoice payment attempt was successful.
+ Task AttemptToPayInvoiceAsync(Invoice invoice, bool attemptToPayWithStripe = false);
+
+
+ ///
+ /// Determines whether an invoice should be attempted to be paid based on certain criteria.
+ ///
+ /// The invoice to be evaluated.
+ /// A boolean value indicating whether the invoice should be attempted to be paid.
+ bool ShouldAttemptToPayInvoice(Invoice invoice);
+
+ ///
+ /// The ID for the premium annual plan.
+ ///
+ const string PremiumPlanId = "premium-annually";
+
+ ///
+ /// The ID for the premium annual plan via the App Store.
+ ///
+ const string PremiumPlanIdAppStore = "premium-annually-app";
+
+}
diff --git a/src/Billing/Services/IStripeWebhookHandler.cs b/src/Billing/Services/IStripeWebhookHandler.cs
new file mode 100644
index 000000000..59be43548
--- /dev/null
+++ b/src/Billing/Services/IStripeWebhookHandler.cs
@@ -0,0 +1,67 @@
+using Event = Stripe.Event;
+namespace Bit.Billing.Services;
+
+public interface IStripeWebhookHandler
+{
+ ///
+ /// Handles the specified Stripe event asynchronously.
+ ///
+ /// The Stripe event to be handled.
+ /// A task representing the asynchronous operation.
+ Task HandleAsync(Event parsedEvent);
+}
+
+///
+/// Defines the contract for handling Stripe subscription deleted events.
+///
+public interface ISubscriptionDeletedHandler : IStripeWebhookHandler;
+
+///
+/// Defines the contract for handling Stripe subscription updated events.
+///
+public interface ISubscriptionUpdatedHandler : IStripeWebhookHandler;
+
+///
+/// Defines the contract for handling Stripe upcoming invoice events.
+///
+public interface IUpcomingInvoiceHandler : IStripeWebhookHandler;
+
+///
+/// Defines the contract for handling Stripe charge succeeded events.
+///
+public interface IChargeSucceededHandler : IStripeWebhookHandler;
+
+///
+/// Defines the contract for handling Stripe charge refunded events.
+///
+public interface IChargeRefundedHandler : IStripeWebhookHandler;
+
+///
+/// Defines the contract for handling Stripe payment succeeded events.
+///
+public interface IPaymentSucceededHandler : IStripeWebhookHandler;
+
+///
+/// Defines the contract for handling Stripe payment failed events.
+///
+public interface IPaymentFailedHandler : IStripeWebhookHandler;
+
+///
+/// Defines the contract for handling Stripe invoice created events.
+///
+public interface IInvoiceCreatedHandler : IStripeWebhookHandler;
+
+///
+/// Defines the contract for handling Stripe payment method attached events.
+///
+public interface IPaymentMethodAttachedHandler : IStripeWebhookHandler;
+
+///
+/// Defines the contract for handling Stripe customer updated events.
+///
+public interface ICustomerUpdatedHandler : IStripeWebhookHandler;
+
+///
+/// Defines the contract for handling Stripe Invoice Finalized events.
+///
+public interface IInvoiceFinalizedHandler : IStripeWebhookHandler;
diff --git a/src/Billing/Services/Implementations/ChargeRefundedHandler.cs b/src/Billing/Services/Implementations/ChargeRefundedHandler.cs
new file mode 100644
index 000000000..905491b6c
--- /dev/null
+++ b/src/Billing/Services/Implementations/ChargeRefundedHandler.cs
@@ -0,0 +1,98 @@
+using Bit.Billing.Constants;
+using Bit.Core.Enums;
+using Bit.Core.Repositories;
+using Microsoft.Data.SqlClient;
+using Event = Stripe.Event;
+using Transaction = Bit.Core.Entities.Transaction;
+using TransactionType = Bit.Core.Enums.TransactionType;
+namespace Bit.Billing.Services.Implementations;
+
+public class ChargeRefundedHandler : IChargeRefundedHandler
+{
+ private readonly ILogger _logger;
+ private readonly IStripeEventService _stripeEventService;
+ private readonly ITransactionRepository _transactionRepository;
+ private readonly IStripeEventUtilityService _stripeEventUtilityService;
+
+ public ChargeRefundedHandler(
+ ILogger logger,
+ IStripeEventService stripeEventService,
+ ITransactionRepository transactionRepository,
+ IStripeEventUtilityService stripeEventUtilityService)
+ {
+ _logger = logger;
+ _stripeEventService = stripeEventService;
+ _transactionRepository = transactionRepository;
+ _stripeEventUtilityService = stripeEventUtilityService;
+ }
+
+ ///
+ /// Handles the event type from Stripe.
+ ///
+ ///
+ public async Task HandleAsync(Event parsedEvent)
+ {
+ var charge = await _stripeEventService.GetCharge(parsedEvent, true, ["refunds"]);
+ var parentTransaction = await _transactionRepository.GetByGatewayIdAsync(GatewayType.Stripe, charge.Id);
+ if (parentTransaction == null)
+ {
+ // Attempt to create a transaction for the charge if it doesn't exist
+ var (organizationId, userId, providerId) = await _stripeEventUtilityService.GetEntityIdsFromChargeAsync(charge);
+ var tx = _stripeEventUtilityService.FromChargeToTransaction(charge, organizationId, userId, providerId);
+ try
+ {
+ parentTransaction = await _transactionRepository.CreateAsync(tx);
+ }
+ catch (SqlException e) when (e.Number == 547) // FK constraint violation
+ {
+ _logger.LogWarning(
+ "Charge refund could not create transaction as entity may have been deleted. {ChargeId}",
+ charge.Id);
+ return;
+ }
+ }
+
+ var amountRefunded = charge.AmountRefunded / 100M;
+
+ if (parentTransaction.Refunded.GetValueOrDefault() ||
+ parentTransaction.RefundedAmount.GetValueOrDefault() >= amountRefunded)
+ {
+ _logger.LogWarning(
+ "Charge refund amount doesn't match parent transaction's amount or parent has already been refunded. {ChargeId}",
+ charge.Id);
+ return;
+ }
+
+ parentTransaction.RefundedAmount = amountRefunded;
+ if (charge.Refunded)
+ {
+ parentTransaction.Refunded = true;
+ }
+
+ await _transactionRepository.ReplaceAsync(parentTransaction);
+
+ foreach (var refund in charge.Refunds)
+ {
+ var refundTransaction = await _transactionRepository.GetByGatewayIdAsync(
+ GatewayType.Stripe, refund.Id);
+ if (refundTransaction != null)
+ {
+ continue;
+ }
+
+ await _transactionRepository.CreateAsync(new Transaction
+ {
+ Amount = refund.Amount / 100M,
+ CreationDate = refund.Created,
+ OrganizationId = parentTransaction.OrganizationId,
+ UserId = parentTransaction.UserId,
+ ProviderId = parentTransaction.ProviderId,
+ Type = TransactionType.Refund,
+ Gateway = GatewayType.Stripe,
+ GatewayId = refund.Id,
+ PaymentMethodType = parentTransaction.PaymentMethodType,
+ Details = parentTransaction.Details
+ });
+ }
+ }
+}
diff --git a/src/Billing/Services/Implementations/ChargeSucceededHandler.cs b/src/Billing/Services/Implementations/ChargeSucceededHandler.cs
new file mode 100644
index 000000000..bd8ea7def
--- /dev/null
+++ b/src/Billing/Services/Implementations/ChargeSucceededHandler.cs
@@ -0,0 +1,67 @@
+using Bit.Billing.Constants;
+using Bit.Core.Enums;
+using Bit.Core.Repositories;
+using Microsoft.Data.SqlClient;
+using Event = Stripe.Event;
+
+namespace Bit.Billing.Services.Implementations;
+
+public class ChargeSucceededHandler : IChargeSucceededHandler
+{
+ private readonly ILogger _logger;
+ private readonly IStripeEventService _stripeEventService;
+ private readonly ITransactionRepository _transactionRepository;
+ private readonly IStripeEventUtilityService _stripeEventUtilityService;
+
+ public ChargeSucceededHandler(
+ ILogger logger,
+ IStripeEventService stripeEventService,
+ ITransactionRepository transactionRepository,
+ IStripeEventUtilityService stripeEventUtilityService)
+ {
+ _logger = logger;
+ _stripeEventService = stripeEventService;
+ _transactionRepository = transactionRepository;
+ _stripeEventUtilityService = stripeEventUtilityService;
+ }
+
+ ///
+ /// Handles the event type from Stripe.
+ ///
+ ///
+ public async Task HandleAsync(Event parsedEvent)
+ {
+ var charge = await _stripeEventService.GetCharge(parsedEvent);
+ var existingTransaction = await _transactionRepository.GetByGatewayIdAsync(GatewayType.Stripe, charge.Id);
+ if (existingTransaction is not null)
+ {
+ _logger.LogInformation("Charge success already processed. {ChargeId}", charge.Id);
+ return;
+ }
+
+ var (organizationId, userId, providerId) = await _stripeEventUtilityService.GetEntityIdsFromChargeAsync(charge);
+ if (!organizationId.HasValue && !userId.HasValue && !providerId.HasValue)
+ {
+ _logger.LogWarning("Charge success has no subscriber ids. {ChargeId}", charge.Id);
+ return;
+ }
+
+ var transaction = _stripeEventUtilityService.FromChargeToTransaction(charge, organizationId, userId, providerId);
+ if (!transaction.PaymentMethodType.HasValue)
+ {
+ _logger.LogWarning("Charge success from unsupported source/method. {ChargeId}", charge.Id);
+ return;
+ }
+
+ try
+ {
+ await _transactionRepository.CreateAsync(transaction);
+ }
+ catch (SqlException e) when (e.Number == 547)
+ {
+ _logger.LogWarning(
+ "Charge success could not create transaction as entity may have been deleted. {ChargeId}",
+ charge.Id);
+ }
+ }
+}
diff --git a/src/Billing/Services/Implementations/CustomerUpdatedHandler.cs b/src/Billing/Services/Implementations/CustomerUpdatedHandler.cs
new file mode 100644
index 000000000..ec70697c0
--- /dev/null
+++ b/src/Billing/Services/Implementations/CustomerUpdatedHandler.cs
@@ -0,0 +1,60 @@
+using Bit.Core.Context;
+using Bit.Core.Repositories;
+using Bit.Core.Tools.Enums;
+using Bit.Core.Tools.Models.Business;
+using Bit.Core.Tools.Services;
+using Event = Stripe.Event;
+
+namespace Bit.Billing.Services.Implementations;
+
+public class CustomerUpdatedHandler : ICustomerUpdatedHandler
+{
+ private readonly IOrganizationRepository _organizationRepository;
+ private readonly IReferenceEventService _referenceEventService;
+ private readonly ICurrentContext _currentContext;
+ private readonly IStripeEventService _stripeEventService;
+ private readonly IStripeEventUtilityService _stripeEventUtilityService;
+
+ public CustomerUpdatedHandler(
+ IOrganizationRepository organizationRepository,
+ IReferenceEventService referenceEventService,
+ ICurrentContext currentContext,
+ IStripeEventService stripeEventService,
+ IStripeEventUtilityService stripeEventUtilityService)
+ {
+ _organizationRepository = organizationRepository;
+ _referenceEventService = referenceEventService;
+ _currentContext = currentContext;
+ _stripeEventService = stripeEventService;
+ _stripeEventUtilityService = stripeEventUtilityService;
+ }
+
+ ///
+ /// Handles the event type from Stripe.
+ ///
+ ///
+ public async Task HandleAsync(Event parsedEvent)
+ {
+ var customer = await _stripeEventService.GetCustomer(parsedEvent, true, ["subscriptions"]);
+ if (customer.Subscriptions == null || !customer.Subscriptions.Any())
+ {
+ return;
+ }
+
+ var subscription = customer.Subscriptions.First();
+
+ var (organizationId, _, providerId) = _stripeEventUtilityService.GetIdsFromMetadata(subscription.Metadata);
+
+ if (!organizationId.HasValue)
+ {
+ return;
+ }
+
+ var organization = await _organizationRepository.GetByIdAsync(organizationId.Value);
+ organization.BillingEmail = customer.Email;
+ await _organizationRepository.ReplaceAsync(organization);
+
+ await _referenceEventService.RaiseEventAsync(
+ new ReferenceEvent(ReferenceEventType.OrganizationEditedInStripe, organization, _currentContext));
+ }
+}
diff --git a/src/Billing/Services/Implementations/InvoiceCreatedHandler.cs b/src/Billing/Services/Implementations/InvoiceCreatedHandler.cs
new file mode 100644
index 000000000..4c84cca96
--- /dev/null
+++ b/src/Billing/Services/Implementations/InvoiceCreatedHandler.cs
@@ -0,0 +1,35 @@
+using Event = Stripe.Event;
+
+namespace Bit.Billing.Services.Implementations;
+
+public class InvoiceCreatedHandler : IInvoiceCreatedHandler
+{
+ private readonly IStripeEventService _stripeEventService;
+ private readonly IStripeEventUtilityService _stripeEventUtilityService;
+ private readonly IProviderEventService _providerEventService;
+
+ public InvoiceCreatedHandler(
+ IStripeEventService stripeEventService,
+ IStripeEventUtilityService stripeEventUtilityService,
+ IProviderEventService providerEventService)
+ {
+ _stripeEventService = stripeEventService;
+ _stripeEventUtilityService = stripeEventUtilityService;
+ _providerEventService = providerEventService;
+ }
+
+ ///
+ /// Handles the event type from Stripe.
+ ///
+ ///
+ public async Task HandleAsync(Event parsedEvent)
+ {
+ var invoice = await _stripeEventService.GetInvoice(parsedEvent, true);
+ if (_stripeEventUtilityService.ShouldAttemptToPayInvoice(invoice))
+ {
+ await _stripeEventUtilityService.AttemptToPayInvoiceAsync(invoice);
+ }
+
+ await _providerEventService.TryRecordInvoiceLineItems(parsedEvent);
+ }
+}
diff --git a/src/Billing/Services/Implementations/InvoiceFinalizedHandler.cs b/src/Billing/Services/Implementations/InvoiceFinalizedHandler.cs
new file mode 100644
index 000000000..a67d6d301
--- /dev/null
+++ b/src/Billing/Services/Implementations/InvoiceFinalizedHandler.cs
@@ -0,0 +1,23 @@
+using Event = Stripe.Event;
+
+namespace Bit.Billing.Services.Implementations;
+
+public class InvoiceFinalizedHandler : IInvoiceFinalizedHandler
+{
+
+ private readonly IProviderEventService _providerEventService;
+
+ public InvoiceFinalizedHandler(IProviderEventService providerEventService)
+ {
+ _providerEventService = providerEventService;
+ }
+
+ ///
+ /// Handles the event type from Stripe.
+ ///
+ ///
+ public async Task HandleAsync(Event parsedEvent)
+ {
+ await _providerEventService.TryRecordInvoiceLineItems(parsedEvent);
+ }
+}
diff --git a/src/Billing/Services/Implementations/PaymentFailedHandler.cs b/src/Billing/Services/Implementations/PaymentFailedHandler.cs
new file mode 100644
index 000000000..acf6ca70c
--- /dev/null
+++ b/src/Billing/Services/Implementations/PaymentFailedHandler.cs
@@ -0,0 +1,52 @@
+using Stripe;
+using Event = Stripe.Event;
+
+namespace Bit.Billing.Services.Implementations;
+
+public class PaymentFailedHandler : IPaymentFailedHandler
+{
+ private readonly IStripeEventService _stripeEventService;
+ private readonly IStripeFacade _stripeFacade;
+ private readonly IStripeEventUtilityService _stripeEventUtilityService;
+
+ public PaymentFailedHandler(
+ IStripeEventService stripeEventService,
+ IStripeFacade stripeFacade,
+ IStripeEventUtilityService stripeEventUtilityService)
+ {
+ _stripeEventService = stripeEventService;
+ _stripeFacade = stripeFacade;
+ _stripeEventUtilityService = stripeEventUtilityService;
+ }
+
+ ///
+ /// Handles the event type from Stripe.
+ ///
+ ///
+ public async Task HandleAsync(Event parsedEvent)
+ {
+ var invoice = await _stripeEventService.GetInvoice(parsedEvent, true);
+ if (invoice.Paid || invoice.AttemptCount <= 1 || !ShouldAttemptToPayInvoice(invoice))
+ {
+ return;
+ }
+
+ var subscription = await _stripeFacade.GetSubscription(invoice.SubscriptionId);
+ // attempt count 4 = 11 days after initial failure
+ if (invoice.AttemptCount <= 3 ||
+ !subscription.Items.Any(i => i.Price.Id is IStripeEventUtilityService.PremiumPlanId or IStripeEventUtilityService.PremiumPlanIdAppStore))
+ {
+ await _stripeEventUtilityService.AttemptToPayInvoiceAsync(invoice);
+ }
+ }
+
+ private static bool ShouldAttemptToPayInvoice(Invoice invoice) =>
+ invoice is
+ {
+ AmountDue: > 0,
+ Paid: false,
+ CollectionMethod: "charge_automatically",
+ BillingReason: "subscription_cycle" or "automatic_pending_invoice_item_invoice",
+ SubscriptionId: not null
+ };
+}
diff --git a/src/Billing/Services/Implementations/PaymentMethodAttachedHandler.cs b/src/Billing/Services/Implementations/PaymentMethodAttachedHandler.cs
new file mode 100644
index 000000000..6092e001c
--- /dev/null
+++ b/src/Billing/Services/Implementations/PaymentMethodAttachedHandler.cs
@@ -0,0 +1,96 @@
+using Bit.Billing.Constants;
+using Stripe;
+using Event = Stripe.Event;
+
+namespace Bit.Billing.Services.Implementations;
+
+public class PaymentMethodAttachedHandler : IPaymentMethodAttachedHandler
+{
+ private readonly ILogger _logger;
+ private readonly IStripeEventService _stripeEventService;
+ private readonly IStripeFacade _stripeFacade;
+ private readonly IStripeEventUtilityService _stripeEventUtilityService;
+
+ public PaymentMethodAttachedHandler(
+ ILogger logger,
+ IStripeEventService stripeEventService,
+ IStripeFacade stripeFacade,
+ IStripeEventUtilityService stripeEventUtilityService)
+ {
+ _logger = logger;
+ _stripeEventService = stripeEventService;
+ _stripeFacade = stripeFacade;
+ _stripeEventUtilityService = stripeEventUtilityService;
+ }
+
+ public async Task HandleAsync(Event parsedEvent)
+ {
+ var paymentMethod = await _stripeEventService.GetPaymentMethod(parsedEvent);
+ if (paymentMethod is null)
+ {
+ _logger.LogWarning("Attempted to handle the event payment_method.attached but paymentMethod was null");
+ return;
+ }
+
+ var subscriptionListOptions = new SubscriptionListOptions
+ {
+ Customer = paymentMethod.CustomerId,
+ Status = StripeSubscriptionStatus.Unpaid,
+ Expand = ["data.latest_invoice"]
+ };
+
+ StripeList unpaidSubscriptions;
+ try
+ {
+ unpaidSubscriptions = await _stripeFacade.ListSubscriptions(subscriptionListOptions);
+ }
+ catch (Exception e)
+ {
+ _logger.LogError(e,
+ "Attempted to get unpaid invoices for customer {CustomerId} but encountered an error while calling Stripe",
+ paymentMethod.CustomerId);
+
+ return;
+ }
+
+ foreach (var unpaidSubscription in unpaidSubscriptions)
+ {
+ await AttemptToPayOpenSubscriptionAsync(unpaidSubscription);
+ }
+ }
+
+ private async Task AttemptToPayOpenSubscriptionAsync(Subscription unpaidSubscription)
+ {
+ var latestInvoice = unpaidSubscription.LatestInvoice;
+
+ if (unpaidSubscription.LatestInvoice is null)
+ {
+ _logger.LogWarning(
+ "Attempted to pay unpaid subscription {SubscriptionId} but latest invoice didn't exist",
+ unpaidSubscription.Id);
+
+ return;
+ }
+
+ if (latestInvoice.Status != StripeInvoiceStatus.Open)
+ {
+ _logger.LogWarning(
+ "Attempted to pay unpaid subscription {SubscriptionId} but latest invoice wasn't \"open\"",
+ unpaidSubscription.Id);
+
+ return;
+ }
+
+ try
+ {
+ await _stripeEventUtilityService.AttemptToPayInvoiceAsync(latestInvoice, true);
+ }
+ catch (Exception e)
+ {
+ _logger.LogError(e,
+ "Attempted to pay open invoice {InvoiceId} on unpaid subscription {SubscriptionId} but encountered an error",
+ latestInvoice.Id, unpaidSubscription.Id);
+ throw;
+ }
+ }
+}
diff --git a/src/Billing/Services/Implementations/PaymentSucceededHandler.cs b/src/Billing/Services/Implementations/PaymentSucceededHandler.cs
new file mode 100644
index 000000000..6aa8aa2b9
--- /dev/null
+++ b/src/Billing/Services/Implementations/PaymentSucceededHandler.cs
@@ -0,0 +1,171 @@
+using Bit.Billing.Constants;
+using Bit.Core.AdminConsole.Repositories;
+using Bit.Core.Billing.Enums;
+using Bit.Core.Context;
+using Bit.Core.Repositories;
+using Bit.Core.Services;
+using Bit.Core.Tools.Enums;
+using Bit.Core.Tools.Models.Business;
+using Bit.Core.Tools.Services;
+using Bit.Core.Utilities;
+using Event = Stripe.Event;
+
+namespace Bit.Billing.Services.Implementations;
+
+public class PaymentSucceededHandler : IPaymentSucceededHandler
+{
+ private readonly ILogger _logger;
+ private readonly IStripeEventService _stripeEventService;
+ private readonly IOrganizationService _organizationService;
+ private readonly IUserService _userService;
+ private readonly IStripeFacade _stripeFacade;
+ private readonly IProviderRepository _providerRepository;
+ private readonly IOrganizationRepository _organizationRepository;
+ private readonly IReferenceEventService _referenceEventService;
+ private readonly ICurrentContext _currentContext;
+ private readonly IUserRepository _userRepository;
+ private readonly IStripeEventUtilityService _stripeEventUtilityService;
+
+ public PaymentSucceededHandler(
+ ILogger logger,
+ IStripeEventService stripeEventService,
+ IStripeFacade stripeFacade,
+ IProviderRepository providerRepository,
+ IOrganizationRepository organizationRepository,
+ IReferenceEventService referenceEventService,
+ ICurrentContext currentContext,
+ IUserRepository userRepository,
+ IStripeEventUtilityService stripeEventUtilityService,
+ IUserService userService,
+ IOrganizationService organizationService)
+ {
+ _logger = logger;
+ _stripeEventService = stripeEventService;
+ _stripeFacade = stripeFacade;
+ _providerRepository = providerRepository;
+ _organizationRepository = organizationRepository;
+ _referenceEventService = referenceEventService;
+ _currentContext = currentContext;
+ _userRepository = userRepository;
+ _stripeEventUtilityService = stripeEventUtilityService;
+ _userService = userService;
+ _organizationService = organizationService;
+ }
+
+ ///
+ /// Handles the event type from Stripe.
+ ///
+ ///
+ public async Task HandleAsync(Event parsedEvent)
+ {
+ var invoice = await _stripeEventService.GetInvoice(parsedEvent, true);
+ if (!invoice.Paid || invoice.BillingReason != "subscription_create")
+ {
+ return;
+ }
+
+ var subscription = await _stripeFacade.GetSubscription(invoice.SubscriptionId);
+ if (subscription?.Status != StripeSubscriptionStatus.Active)
+ {
+ return;
+ }
+
+ if (DateTime.UtcNow - invoice.Created < TimeSpan.FromMinutes(1))
+ {
+ await Task.Delay(5000);
+ }
+
+ var (organizationId, userId, providerId) = _stripeEventUtilityService.GetIdsFromMetadata(subscription.Metadata);
+
+ if (providerId.HasValue)
+ {
+ var provider = await _providerRepository.GetByIdAsync(providerId.Value);
+
+ if (provider == null)
+ {
+ _logger.LogError(
+ "Received invoice.payment_succeeded webhook ({EventID}) for Provider ({ProviderID}) that does not exist",
+ parsedEvent.Id,
+ providerId.Value);
+
+ return;
+ }
+
+ var teamsMonthly = StaticStore.GetPlan(PlanType.TeamsMonthly);
+
+ var enterpriseMonthly = StaticStore.GetPlan(PlanType.EnterpriseMonthly);
+
+ var teamsMonthlyLineItem =
+ subscription.Items.Data.FirstOrDefault(item =>
+ item.Plan.Id == teamsMonthly.PasswordManager.StripeSeatPlanId);
+
+ var enterpriseMonthlyLineItem =
+ subscription.Items.Data.FirstOrDefault(item =>
+ item.Plan.Id == enterpriseMonthly.PasswordManager.StripeSeatPlanId);
+
+ if (teamsMonthlyLineItem == null || enterpriseMonthlyLineItem == null)
+ {
+ _logger.LogError("invoice.payment_succeeded webhook ({EventID}) for Provider ({ProviderID}) indicates missing subscription line items",
+ parsedEvent.Id,
+ provider.Id);
+
+ return;
+ }
+
+ await _referenceEventService.RaiseEventAsync(new ReferenceEvent
+ {
+ Type = ReferenceEventType.Rebilled,
+ Source = ReferenceEventSource.Provider,
+ Id = provider.Id,
+ PlanType = PlanType.TeamsMonthly,
+ Seats = (int)teamsMonthlyLineItem.Quantity
+ });
+
+ await _referenceEventService.RaiseEventAsync(new ReferenceEvent
+ {
+ Type = ReferenceEventType.Rebilled,
+ Source = ReferenceEventSource.Provider,
+ Id = provider.Id,
+ PlanType = PlanType.EnterpriseMonthly,
+ Seats = (int)enterpriseMonthlyLineItem.Quantity
+ });
+ }
+ else if (organizationId.HasValue)
+ {
+ if (!subscription.Items.Any(i =>
+ StaticStore.Plans.Any(p => p.PasswordManager.StripePlanId == i.Plan.Id)))
+ {
+ return;
+ }
+
+ await _organizationService.EnableAsync(organizationId.Value, subscription.CurrentPeriodEnd);
+ var organization = await _organizationRepository.GetByIdAsync(organizationId.Value);
+
+ await _referenceEventService.RaiseEventAsync(
+ new ReferenceEvent(ReferenceEventType.Rebilled, organization, _currentContext)
+ {
+ PlanName = organization?.Plan,
+ PlanType = organization?.PlanType,
+ Seats = organization?.Seats,
+ Storage = organization?.MaxStorageGb,
+ });
+ }
+ else if (userId.HasValue)
+ {
+ if (subscription.Items.All(i => i.Plan.Id != IStripeEventUtilityService.PremiumPlanId))
+ {
+ return;
+ }
+
+ await _userService.EnablePremiumAsync(userId.Value, subscription.CurrentPeriodEnd);
+
+ var user = await _userRepository.GetByIdAsync(userId.Value);
+ await _referenceEventService.RaiseEventAsync(
+ new ReferenceEvent(ReferenceEventType.Rebilled, user, _currentContext)
+ {
+ PlanName = IStripeEventUtilityService.PremiumPlanId,
+ Storage = user?.MaxStorageGb,
+ });
+ }
+ }
+}
diff --git a/src/Billing/Services/Implementations/StripeEventProcessor.cs b/src/Billing/Services/Implementations/StripeEventProcessor.cs
new file mode 100644
index 000000000..db4e3929f
--- /dev/null
+++ b/src/Billing/Services/Implementations/StripeEventProcessor.cs
@@ -0,0 +1,89 @@
+using Bit.Billing.Constants;
+using Event = Stripe.Event;
+
+namespace Bit.Billing.Services.Implementations;
+
+public class StripeEventProcessor : IStripeEventProcessor
+{
+ private readonly ILogger _logger;
+ private readonly ISubscriptionDeletedHandler _subscriptionDeletedHandler;
+ private readonly ISubscriptionUpdatedHandler _subscriptionUpdatedHandler;
+ private readonly IUpcomingInvoiceHandler _upcomingInvoiceHandler;
+ private readonly IChargeSucceededHandler _chargeSucceededHandler;
+ private readonly IChargeRefundedHandler _chargeRefundedHandler;
+ private readonly IPaymentSucceededHandler _paymentSucceededHandler;
+ private readonly IPaymentFailedHandler _paymentFailedHandler;
+ private readonly IInvoiceCreatedHandler _invoiceCreatedHandler;
+ private readonly IPaymentMethodAttachedHandler _paymentMethodAttachedHandler;
+ private readonly ICustomerUpdatedHandler _customerUpdatedHandler;
+
+ public StripeEventProcessor(
+ ILogger logger,
+ ISubscriptionDeletedHandler subscriptionDeletedHandler,
+ ISubscriptionUpdatedHandler subscriptionUpdatedHandler,
+ IUpcomingInvoiceHandler upcomingInvoiceHandler,
+ IChargeSucceededHandler chargeSucceededHandler,
+ IChargeRefundedHandler chargeRefundedHandler,
+ IPaymentSucceededHandler paymentSucceededHandler,
+ IPaymentFailedHandler paymentFailedHandler,
+ IInvoiceCreatedHandler invoiceCreatedHandler,
+ IPaymentMethodAttachedHandler paymentMethodAttachedHandler,
+ ICustomerUpdatedHandler customerUpdatedHandler)
+ {
+ _logger = logger;
+ _subscriptionDeletedHandler = subscriptionDeletedHandler;
+ _subscriptionUpdatedHandler = subscriptionUpdatedHandler;
+ _upcomingInvoiceHandler = upcomingInvoiceHandler;
+ _chargeSucceededHandler = chargeSucceededHandler;
+ _chargeRefundedHandler = chargeRefundedHandler;
+ _paymentSucceededHandler = paymentSucceededHandler;
+ _paymentFailedHandler = paymentFailedHandler;
+ _invoiceCreatedHandler = invoiceCreatedHandler;
+ _paymentMethodAttachedHandler = paymentMethodAttachedHandler;
+ _customerUpdatedHandler = customerUpdatedHandler;
+ }
+
+ public async Task ProcessEventAsync(Event parsedEvent)
+ {
+ switch (parsedEvent.Type)
+ {
+ case HandledStripeWebhook.SubscriptionDeleted:
+ await _subscriptionDeletedHandler.HandleAsync(parsedEvent);
+ break;
+ case HandledStripeWebhook.SubscriptionUpdated:
+ await _subscriptionUpdatedHandler.HandleAsync(parsedEvent);
+ break;
+ case HandledStripeWebhook.UpcomingInvoice:
+ await _upcomingInvoiceHandler.HandleAsync(parsedEvent);
+ break;
+ case HandledStripeWebhook.ChargeSucceeded:
+ await _chargeSucceededHandler.HandleAsync(parsedEvent);
+ break;
+ case HandledStripeWebhook.ChargeRefunded:
+ await _chargeRefundedHandler.HandleAsync(parsedEvent);
+ break;
+ case HandledStripeWebhook.PaymentSucceeded:
+ await _paymentSucceededHandler.HandleAsync(parsedEvent);
+ break;
+ case HandledStripeWebhook.PaymentFailed:
+ await _paymentFailedHandler.HandleAsync(parsedEvent);
+ break;
+ case HandledStripeWebhook.InvoiceCreated:
+ await _invoiceCreatedHandler.HandleAsync(parsedEvent);
+ break;
+ case HandledStripeWebhook.PaymentMethodAttached:
+ await _paymentMethodAttachedHandler.HandleAsync(parsedEvent);
+ break;
+ case HandledStripeWebhook.CustomerUpdated:
+ await _customerUpdatedHandler.HandleAsync(parsedEvent);
+ break;
+ case HandledStripeWebhook.InvoiceFinalized:
+ await _customerUpdatedHandler.HandleAsync(parsedEvent);
+ break;
+ default:
+ _logger.LogWarning("Unsupported event received. {EventType}", parsedEvent.Type);
+ break;
+ }
+ }
+
+}
diff --git a/src/Billing/Services/Implementations/StripeEventUtilityService.cs b/src/Billing/Services/Implementations/StripeEventUtilityService.cs
new file mode 100644
index 000000000..f656dbcc1
--- /dev/null
+++ b/src/Billing/Services/Implementations/StripeEventUtilityService.cs
@@ -0,0 +1,401 @@
+using Bit.Billing.Constants;
+using Bit.Core.Enums;
+using Bit.Core.Exceptions;
+using Bit.Core.Repositories;
+using Bit.Core.Services;
+using Bit.Core.Settings;
+using Bit.Core.Utilities;
+using Braintree;
+using Stripe;
+using Customer = Stripe.Customer;
+using Subscription = Stripe.Subscription;
+using Transaction = Bit.Core.Entities.Transaction;
+using TransactionType = Bit.Core.Enums.TransactionType;
+
+namespace Bit.Billing.Services.Implementations;
+
+public class StripeEventUtilityService : IStripeEventUtilityService
+{
+ private readonly IStripeFacade _stripeFacade;
+ private readonly ILogger _logger;
+ private readonly ITransactionRepository _transactionRepository;
+ private readonly IMailService _mailService;
+ private readonly BraintreeGateway _btGateway;
+ private readonly GlobalSettings _globalSettings;
+
+ public StripeEventUtilityService(
+ IStripeFacade stripeFacade,
+ ILogger logger,
+ ITransactionRepository transactionRepository,
+ IMailService mailService,
+ GlobalSettings globalSettings)
+ {
+ _stripeFacade = stripeFacade;
+ _logger = logger;
+ _transactionRepository = transactionRepository;
+ _mailService = mailService;
+ _btGateway = new BraintreeGateway
+ {
+ Environment = globalSettings.Braintree.Production ?
+ Braintree.Environment.PRODUCTION : Braintree.Environment.SANDBOX,
+ MerchantId = globalSettings.Braintree.MerchantId,
+ PublicKey = globalSettings.Braintree.PublicKey,
+ PrivateKey = globalSettings.Braintree.PrivateKey
+ };
+ _globalSettings = globalSettings;
+ }
+
+ ///
+ /// Gets the organizationId, userId, or providerId from the metadata of a Stripe Subscription object.
+ ///
+ ///
+ ///
+ public Tuple GetIdsFromMetadata(Dictionary metadata)
+ {
+ if (metadata == null || metadata.Count == 0)
+ {
+ return new Tuple(null, null, null);
+ }
+
+ metadata.TryGetValue("organizationId", out var orgIdString);
+ metadata.TryGetValue("userId", out var userIdString);
+ metadata.TryGetValue("providerId", out var providerIdString);
+
+ orgIdString ??= metadata.FirstOrDefault(x =>
+ x.Key.Equals("organizationId", StringComparison.OrdinalIgnoreCase)).Value;
+
+ userIdString ??= metadata.FirstOrDefault(x =>
+ x.Key.Equals("userId", StringComparison.OrdinalIgnoreCase)).Value;
+
+ providerIdString ??= metadata.FirstOrDefault(x =>
+ x.Key.Equals("providerId", StringComparison.OrdinalIgnoreCase)).Value;
+
+ Guid? organizationId = string.IsNullOrWhiteSpace(orgIdString) ? null : new Guid(orgIdString);
+ Guid? userId = string.IsNullOrWhiteSpace(userIdString) ? null : new Guid(userIdString);
+ Guid? providerId = string.IsNullOrWhiteSpace(providerIdString) ? null : new Guid(providerIdString);
+
+ return new Tuple(organizationId, userId, providerId);
+ }
+
+ ///
+ /// Gets the organization or user ID from the metadata of a Stripe Charge object.
+ ///
+ ///
+ ///
+ public async Task<(Guid?, Guid?, Guid?)> GetEntityIdsFromChargeAsync(Charge charge)
+ {
+ Guid? organizationId = null;
+ Guid? userId = null;
+ Guid? providerId = null;
+
+ if (charge.InvoiceId != null)
+ {
+ var invoice = await _stripeFacade.GetInvoice(charge.InvoiceId);
+ if (invoice?.SubscriptionId != null)
+ {
+ var subscription = await _stripeFacade.GetSubscription(invoice.SubscriptionId);
+ (organizationId, userId, providerId) = GetIdsFromMetadata(subscription?.Metadata);
+ }
+ }
+
+ if (organizationId.HasValue || userId.HasValue || providerId.HasValue)
+ {
+ return (organizationId, userId, providerId);
+ }
+
+ var subscriptions = await _stripeFacade.ListSubscriptions(new SubscriptionListOptions
+ {
+ Customer = charge.CustomerId
+ });
+
+ foreach (var subscription in subscriptions)
+ {
+ if (subscription.Status is StripeSubscriptionStatus.Canceled or StripeSubscriptionStatus.IncompleteExpired)
+ {
+ continue;
+ }
+
+ (organizationId, userId, providerId) = GetIdsFromMetadata(subscription.Metadata);
+
+ if (organizationId.HasValue || userId.HasValue || providerId.HasValue)
+ {
+ return (organizationId, userId, providerId);
+ }
+ }
+
+ return (null, null, null);
+ }
+
+ public bool IsSponsoredSubscription(Subscription subscription) =>
+ StaticStore.SponsoredPlans
+ .Any(p => subscription.Items
+ .Any(i => i.Plan.Id == p.StripePlanId));
+
+ ///
+ /// Converts a Stripe Charge object to a Bitwarden Transaction object.
+ ///
+ ///
+ ///
+ ///
+ /// ///
+ ///
+ public Transaction FromChargeToTransaction(Charge charge, Guid? organizationId, Guid? userId, Guid? providerId)
+ {
+ var transaction = new Transaction
+ {
+ Amount = charge.Amount / 100M,
+ CreationDate = charge.Created,
+ OrganizationId = organizationId,
+ UserId = userId,
+ ProviderId = providerId,
+ Type = TransactionType.Charge,
+ Gateway = GatewayType.Stripe,
+ GatewayId = charge.Id
+ };
+
+ switch (charge.Source)
+ {
+ case Card card:
+ {
+ transaction.PaymentMethodType = PaymentMethodType.Card;
+ transaction.Details = $"{card.Brand}, *{card.Last4}";
+ break;
+ }
+ case BankAccount bankAccount:
+ {
+ transaction.PaymentMethodType = PaymentMethodType.BankAccount;
+ transaction.Details = $"{bankAccount.BankName}, *{bankAccount.Last4}";
+ break;
+ }
+ case Source { Card: not null } source:
+ {
+ transaction.PaymentMethodType = PaymentMethodType.Card;
+ transaction.Details = $"{source.Card.Brand}, *{source.Card.Last4}";
+ break;
+ }
+ case Source { AchDebit: not null } source:
+ {
+ transaction.PaymentMethodType = PaymentMethodType.BankAccount;
+ transaction.Details = $"{source.AchDebit.BankName}, *{source.AchDebit.Last4}";
+ break;
+ }
+ case Source source:
+ {
+ if (source.AchCreditTransfer == null)
+ {
+ break;
+ }
+
+ var achCreditTransfer = source.AchCreditTransfer;
+
+ transaction.PaymentMethodType = PaymentMethodType.BankAccount;
+ transaction.Details = $"ACH => {achCreditTransfer.BankName}, {achCreditTransfer.AccountNumber}";
+
+ break;
+ }
+ default:
+ {
+ if (charge.PaymentMethodDetails == null)
+ {
+ break;
+ }
+
+ if (charge.PaymentMethodDetails.Card != null)
+ {
+ var card = charge.PaymentMethodDetails.Card;
+ transaction.PaymentMethodType = PaymentMethodType.Card;
+ transaction.Details = $"{card.Brand?.ToUpperInvariant()}, *{card.Last4}";
+ }
+ else if (charge.PaymentMethodDetails.AchDebit != null)
+ {
+ var achDebit = charge.PaymentMethodDetails.AchDebit;
+ transaction.PaymentMethodType = PaymentMethodType.BankAccount;
+ transaction.Details = $"{achDebit.BankName}, *{achDebit.Last4}";
+ }
+ else if (charge.PaymentMethodDetails.AchCreditTransfer != null)
+ {
+ var achCreditTransfer = charge.PaymentMethodDetails.AchCreditTransfer;
+ transaction.PaymentMethodType = PaymentMethodType.BankAccount;
+ transaction.Details = $"ACH => {achCreditTransfer.BankName}, {achCreditTransfer.AccountNumber}";
+ }
+
+ break;
+ }
+ }
+
+ return transaction;
+ }
+
+ public async Task AttemptToPayInvoiceAsync(Invoice invoice, bool attemptToPayWithStripe = false)
+ {
+ var customer = await _stripeFacade.GetCustomer(invoice.CustomerId);
+
+ if (customer?.Metadata?.ContainsKey("btCustomerId") ?? false)
+ {
+ return await AttemptToPayInvoiceWithBraintreeAsync(invoice, customer);
+ }
+
+ if (attemptToPayWithStripe)
+ {
+ return await AttemptToPayInvoiceWithStripeAsync(invoice);
+ }
+
+ return false;
+ }
+
+ public bool ShouldAttemptToPayInvoice(Invoice invoice) =>
+ invoice is
+ {
+ AmountDue: > 0,
+ Paid: false,
+ CollectionMethod: "charge_automatically",
+ BillingReason: "subscription_cycle" or "automatic_pending_invoice_item_invoice",
+ SubscriptionId: not null
+ };
+
+ private async Task AttemptToPayInvoiceWithBraintreeAsync(Invoice invoice, Customer customer)
+ {
+ _logger.LogDebug("Attempting to pay invoice with Braintree");
+ if (!customer?.Metadata?.ContainsKey("btCustomerId") ?? true)
+ {
+ _logger.LogWarning(
+ "Attempted to pay invoice with Braintree but btCustomerId wasn't on Stripe customer metadata");
+ return false;
+ }
+
+ var subscription = await _stripeFacade.GetSubscription(invoice.SubscriptionId);
+ var (organizationId, userId, providerId) = GetIdsFromMetadata(subscription?.Metadata);
+ if (!organizationId.HasValue && !userId.HasValue && !providerId.HasValue)
+ {
+ _logger.LogWarning(
+ "Attempted to pay invoice with Braintree but Stripe subscription metadata didn't contain either a organizationId or userId or ");
+ return false;
+ }
+
+ var orgTransaction = organizationId.HasValue;
+ string btObjIdField;
+ Guid btObjId;
+ if (organizationId.HasValue)
+ {
+ btObjIdField = "organization_id";
+ btObjId = organizationId.Value;
+ }
+ else if (userId.HasValue)
+ {
+ btObjIdField = "user_id";
+ btObjId = userId.Value;
+ }
+ else
+ {
+ btObjIdField = "provider_id";
+ btObjId = providerId.Value;
+ }
+ var btInvoiceAmount = invoice.AmountDue / 100M;
+
+ var existingTransactions = organizationId.HasValue
+ ? await _transactionRepository.GetManyByOrganizationIdAsync(organizationId.Value)
+ : userId.HasValue
+ ? await _transactionRepository.GetManyByUserIdAsync(userId.Value)
+ : await _transactionRepository.GetManyByProviderIdAsync(providerId.Value);
+
+ var duplicateTimeSpan = TimeSpan.FromHours(24);
+ var now = DateTime.UtcNow;
+ var duplicateTransaction = existingTransactions?
+ .FirstOrDefault(t => (now - t.CreationDate) < duplicateTimeSpan);
+ if (duplicateTransaction != null)
+ {
+ _logger.LogWarning("There is already a recent PayPal transaction ({0}). " +
+ "Do not charge again to prevent possible duplicate.", duplicateTransaction.GatewayId);
+ return false;
+ }
+
+ Result transactionResult;
+ try
+ {
+ transactionResult = await _btGateway.Transaction.SaleAsync(
+ new Braintree.TransactionRequest
+ {
+ Amount = btInvoiceAmount,
+ CustomerId = customer.Metadata["btCustomerId"],
+ Options = new Braintree.TransactionOptionsRequest
+ {
+ SubmitForSettlement = true,
+ PayPal = new Braintree.TransactionOptionsPayPalRequest
+ {
+ CustomField =
+ $"{btObjIdField}:{btObjId},region:{_globalSettings.BaseServiceUri.CloudRegion}"
+ }
+ },
+ CustomFields = new Dictionary
+ {
+ [btObjIdField] = btObjId.ToString(),
+ ["region"] = _globalSettings.BaseServiceUri.CloudRegion
+ }
+ });
+ }
+ catch (NotFoundException e)
+ {
+ _logger.LogError(e,
+ "Attempted to make a payment with Braintree, but customer did not exist for the given btCustomerId present on the Stripe metadata");
+ throw;
+ }
+
+ if (!transactionResult.IsSuccess())
+ {
+ if (invoice.AttemptCount < 4)
+ {
+ await _mailService.SendPaymentFailedAsync(customer.Email, btInvoiceAmount, true);
+ }
+ return false;
+ }
+
+ try
+ {
+ await _stripeFacade.UpdateInvoice(invoice.Id, new InvoiceUpdateOptions
+ {
+ Metadata = new Dictionary
+ {
+ ["btTransactionId"] = transactionResult.Target.Id,
+ ["btPayPalTransactionId"] =
+ transactionResult.Target.PayPalDetails?.AuthorizationId
+ }
+ });
+ await _stripeFacade.PayInvoice(invoice.Id, new InvoicePayOptions { PaidOutOfBand = true });
+ }
+ catch (Exception e)
+ {
+ await _btGateway.Transaction.RefundAsync(transactionResult.Target.Id);
+ if (e.Message.Contains("Invoice is already paid"))
+ {
+ await _stripeFacade.UpdateInvoice(invoice.Id, new InvoiceUpdateOptions
+ {
+ Metadata = invoice.Metadata
+ });
+ }
+ else
+ {
+ throw;
+ }
+ }
+
+ return true;
+ }
+
+ private async Task AttemptToPayInvoiceWithStripeAsync(Invoice invoice)
+ {
+ try
+ {
+ await _stripeFacade.PayInvoice(invoice.Id);
+ return true;
+ }
+ catch (Exception e)
+ {
+ _logger.LogWarning(
+ e,
+ "Exception occurred while trying to pay Stripe invoice with Id: {InvoiceId}",
+ invoice.Id);
+
+ throw;
+ }
+ }
+}
diff --git a/src/Billing/Services/Implementations/SubscriptionDeletedHandler.cs b/src/Billing/Services/Implementations/SubscriptionDeletedHandler.cs
new file mode 100644
index 000000000..c495e8dd7
--- /dev/null
+++ b/src/Billing/Services/Implementations/SubscriptionDeletedHandler.cs
@@ -0,0 +1,49 @@
+using Bit.Billing.Constants;
+using Bit.Core.Services;
+using Event = Stripe.Event;
+namespace Bit.Billing.Services.Implementations;
+
+public class SubscriptionDeletedHandler : ISubscriptionDeletedHandler
+{
+ private readonly IStripeEventService _stripeEventService;
+ private readonly IOrganizationService _organizationService;
+ private readonly IUserService _userService;
+ private readonly IStripeEventUtilityService _stripeEventUtilityService;
+
+ public SubscriptionDeletedHandler(
+ IStripeEventService stripeEventService,
+ IOrganizationService organizationService,
+ IUserService userService,
+ IStripeEventUtilityService stripeEventUtilityService)
+ {
+ _stripeEventService = stripeEventService;
+ _organizationService = organizationService;
+ _userService = userService;
+ _stripeEventUtilityService = stripeEventUtilityService;
+ }
+
+ ///
+ /// Handles the event type from Stripe.
+ ///
+ ///
+ public async Task HandleAsync(Event parsedEvent)
+ {
+ var subscription = await _stripeEventService.GetSubscription(parsedEvent, true);
+ var (organizationId, userId, providerId) = _stripeEventUtilityService.GetIdsFromMetadata(subscription.Metadata);
+ var subCanceled = subscription.Status == StripeSubscriptionStatus.Canceled;
+
+ if (!subCanceled)
+ {
+ return;
+ }
+
+ if (organizationId.HasValue)
+ {
+ await _organizationService.DisableAsync(organizationId.Value, subscription.CurrentPeriodEnd);
+ }
+ else if (userId.HasValue)
+ {
+ await _userService.DisablePremiumAsync(userId.Value, subscription.CurrentPeriodEnd);
+ }
+ }
+}
diff --git a/src/Billing/Services/Implementations/SubscriptionUpdatedHandler.cs b/src/Billing/Services/Implementations/SubscriptionUpdatedHandler.cs
new file mode 100644
index 000000000..4b4c9dcf4
--- /dev/null
+++ b/src/Billing/Services/Implementations/SubscriptionUpdatedHandler.cs
@@ -0,0 +1,176 @@
+using Bit.Billing.Constants;
+using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;
+using Bit.Core.Services;
+using Bit.Core.Utilities;
+using Stripe;
+using Event = Stripe.Event;
+
+namespace Bit.Billing.Services.Implementations;
+
+public class SubscriptionUpdatedHandler : ISubscriptionUpdatedHandler
+{
+ private readonly IStripeEventService _stripeEventService;
+ private readonly IStripeEventUtilityService _stripeEventUtilityService;
+ private readonly IOrganizationService _organizationService;
+ private readonly IStripeFacade _stripeFacade;
+ private readonly IOrganizationSponsorshipRenewCommand _organizationSponsorshipRenewCommand;
+ private readonly IUserService _userService;
+
+ public SubscriptionUpdatedHandler(
+ IStripeEventService stripeEventService,
+ IStripeEventUtilityService stripeEventUtilityService,
+ IOrganizationService organizationService,
+ IStripeFacade stripeFacade,
+ IOrganizationSponsorshipRenewCommand organizationSponsorshipRenewCommand,
+ IUserService userService)
+ {
+ _stripeEventService = stripeEventService;
+ _stripeEventUtilityService = stripeEventUtilityService;
+ _organizationService = organizationService;
+ _stripeFacade = stripeFacade;
+ _organizationSponsorshipRenewCommand = organizationSponsorshipRenewCommand;
+ _userService = userService;
+ }
+
+ ///
+ /// Handles the event type from Stripe.
+ ///
+ ///
+ public async Task HandleAsync(Event parsedEvent)
+ {
+ var subscription = await _stripeEventService.GetSubscription(parsedEvent, true, ["customer", "discounts"]);
+ var (organizationId, userId, providerId) = _stripeEventUtilityService.GetIdsFromMetadata(subscription.Metadata);
+
+ switch (subscription.Status)
+ {
+ case StripeSubscriptionStatus.Unpaid or StripeSubscriptionStatus.IncompleteExpired
+ when organizationId.HasValue:
+ {
+ await _organizationService.DisableAsync(organizationId.Value, subscription.CurrentPeriodEnd);
+ break;
+ }
+ case StripeSubscriptionStatus.Unpaid or StripeSubscriptionStatus.IncompleteExpired:
+ {
+ if (!userId.HasValue)
+ {
+ break;
+ }
+
+ if (subscription.Status is StripeSubscriptionStatus.Unpaid &&
+ subscription.Items.Any(i => i.Price.Id is IStripeEventUtilityService.PremiumPlanId or IStripeEventUtilityService.PremiumPlanIdAppStore))
+ {
+ await CancelSubscription(subscription.Id);
+ await VoidOpenInvoices(subscription.Id);
+ }
+
+ await _userService.DisablePremiumAsync(userId.Value, subscription.CurrentPeriodEnd);
+
+ break;
+ }
+ case StripeSubscriptionStatus.Active when organizationId.HasValue:
+ {
+ await _organizationService.EnableAsync(organizationId.Value);
+ break;
+ }
+ case StripeSubscriptionStatus.Active:
+ {
+ if (userId.HasValue)
+ {
+ await _userService.EnablePremiumAsync(userId.Value, subscription.CurrentPeriodEnd);
+ }
+
+ break;
+ }
+ }
+
+ if (organizationId.HasValue)
+ {
+ await _organizationService.UpdateExpirationDateAsync(organizationId.Value, subscription.CurrentPeriodEnd);
+ if (_stripeEventUtilityService.IsSponsoredSubscription(subscription))
+ {
+ await _organizationSponsorshipRenewCommand.UpdateExpirationDateAsync(organizationId.Value, subscription.CurrentPeriodEnd);
+ }
+
+ await RemovePasswordManagerCouponIfRemovingSecretsManagerTrialAsync(parsedEvent, subscription);
+ }
+ else if (userId.HasValue)
+ {
+ await _userService.UpdatePremiumExpirationAsync(userId.Value, subscription.CurrentPeriodEnd);
+ }
+ }
+
+ private async Task CancelSubscription(string subscriptionId) =>
+ await _stripeFacade.CancelSubscription(subscriptionId, new SubscriptionCancelOptions());
+
+ private async Task VoidOpenInvoices(string subscriptionId)
+ {
+ var options = new InvoiceListOptions
+ {
+ Status = StripeInvoiceStatus.Open,
+ Subscription = subscriptionId
+ };
+ var invoices = await _stripeFacade.ListInvoices(options);
+ foreach (var invoice in invoices)
+ {
+ await _stripeFacade.VoidInvoice(invoice.Id);
+ }
+ }
+
+ ///
+ /// Removes the Password Manager coupon if the organization is removing the Secrets Manager trial.
+ /// Only applies to organizations that have a subscription from the Secrets Manager trial.
+ ///
+ ///
+ ///
+ private async Task RemovePasswordManagerCouponIfRemovingSecretsManagerTrialAsync(Event parsedEvent,
+ Subscription subscription)
+ {
+ if (parsedEvent.Data.PreviousAttributes?.items is null)
+ {
+ return;
+ }
+
+ var previousSubscription = parsedEvent.Data
+ .PreviousAttributes
+ .ToObject() as Subscription;
+
+ // This being false doesn't necessarily mean that the organization doesn't subscribe to Secrets Manager.
+ // If there are changes to any subscription item, Stripe sends every item in the subscription, both
+ // changed and unchanged.
+ var previousSubscriptionHasSecretsManager = previousSubscription?.Items is not null &&
+ previousSubscription.Items.Any(previousItem =>
+ StaticStore.Plans.Any(p =>
+ p.SecretsManager is not null &&
+ p.SecretsManager.StripeSeatPlanId ==
+ previousItem.Plan.Id));
+
+ var currentSubscriptionHasSecretsManager = subscription.Items.Any(i =>
+ StaticStore.Plans.Any(p =>
+ p.SecretsManager is not null &&
+ p.SecretsManager.StripeSeatPlanId == i.Plan.Id));
+
+ if (!previousSubscriptionHasSecretsManager || currentSubscriptionHasSecretsManager)
+ {
+ return;
+ }
+
+ var customerHasSecretsManagerTrial = subscription.Customer
+ ?.Discount
+ ?.Coupon
+ ?.Id == "sm-standalone";
+
+ var subscriptionHasSecretsManagerTrial = subscription.Discount
+ ?.Coupon
+ ?.Id == "sm-standalone";
+
+ if (customerHasSecretsManagerTrial)
+ {
+ await _stripeFacade.DeleteCustomerDiscount(subscription.CustomerId);
+ }
+
+ if (subscriptionHasSecretsManagerTrial)
+ {
+ await _stripeFacade.DeleteSubscriptionDiscount(subscription.Id);
+ }
+ }
+}
diff --git a/src/Billing/Services/Implementations/UpcomingInvoiceHandler.cs b/src/Billing/Services/Implementations/UpcomingInvoiceHandler.cs
new file mode 100644
index 000000000..48b691097
--- /dev/null
+++ b/src/Billing/Services/Implementations/UpcomingInvoiceHandler.cs
@@ -0,0 +1,215 @@
+using Bit.Billing.Constants;
+using Bit.Core;
+using Bit.Core.AdminConsole.Entities;
+using Bit.Core.AdminConsole.Repositories;
+using Bit.Core.Billing.Constants;
+using Bit.Core.OrganizationFeatures.OrganizationSponsorships.FamiliesForEnterprise.Interfaces;
+using Bit.Core.Repositories;
+using Bit.Core.Services;
+using Bit.Core.Utilities;
+using Stripe;
+using Event = Stripe.Event;
+using TaxRate = Bit.Core.Entities.TaxRate;
+
+namespace Bit.Billing.Services.Implementations;
+
+public class UpcomingInvoiceHandler : IUpcomingInvoiceHandler
+{
+ private readonly ILogger _logger;
+ private readonly IStripeEventService _stripeEventService;
+ private readonly IUserService _userService;
+ private readonly IStripeFacade _stripeFacade;
+ private readonly IFeatureService _featureService;
+ private readonly IMailService _mailService;
+ private readonly IProviderRepository _providerRepository;
+ private readonly IValidateSponsorshipCommand _validateSponsorshipCommand;
+ private readonly IOrganizationRepository _organizationRepository;
+ private readonly IStripeEventUtilityService _stripeEventUtilityService;
+ private readonly ITaxRateRepository _taxRateRepository;
+
+ public UpcomingInvoiceHandler(
+ ILogger logger,
+ IStripeEventService stripeEventService,
+ IUserService userService,
+ IStripeFacade stripeFacade,
+ IFeatureService featureService,
+ IMailService mailService,
+ IProviderRepository providerRepository,
+ IValidateSponsorshipCommand validateSponsorshipCommand,
+ IOrganizationRepository organizationRepository,
+ IStripeEventUtilityService stripeEventUtilityService,
+ ITaxRateRepository taxRateRepository)
+ {
+ _logger = logger;
+ _stripeEventService = stripeEventService;
+ _userService = userService;
+ _stripeFacade = stripeFacade;
+ _featureService = featureService;
+ _mailService = mailService;
+ _providerRepository = providerRepository;
+ _validateSponsorshipCommand = validateSponsorshipCommand;
+ _organizationRepository = organizationRepository;
+ _stripeEventUtilityService = stripeEventUtilityService;
+ _taxRateRepository = taxRateRepository;
+ }
+
+ ///
+ /// Handles the event type from Stripe.
+ ///
+ ///
+ ///
+ public async Task HandleAsync(Event parsedEvent)
+ {
+ var invoice = await _stripeEventService.GetInvoice(parsedEvent);
+ if (string.IsNullOrEmpty(invoice.SubscriptionId))
+ {
+ _logger.LogWarning("Received 'invoice.upcoming' Event with ID '{eventId}' that did not include a Subscription ID", parsedEvent.Id);
+ return;
+ }
+
+ var subscription = await _stripeFacade.GetSubscription(invoice.SubscriptionId);
+
+ if (subscription == null)
+ {
+ throw new Exception(
+ $"Received null Subscription from Stripe for ID '{invoice.SubscriptionId}' while processing Event with ID '{parsedEvent.Id}'");
+ }
+
+ var pm5766AutomaticTaxIsEnabled = _featureService.IsEnabled(FeatureFlagKeys.PM5766AutomaticTax);
+ if (pm5766AutomaticTaxIsEnabled)
+ {
+ var customerGetOptions = new CustomerGetOptions();
+ customerGetOptions.AddExpand("tax");
+ var customer = await _stripeFacade.GetCustomer(subscription.CustomerId, customerGetOptions);
+ if (!subscription.AutomaticTax.Enabled &&
+ customer.Tax?.AutomaticTax == StripeConstants.AutomaticTaxStatus.Supported)
+ {
+ subscription = await _stripeFacade.UpdateSubscription(subscription.Id,
+ new SubscriptionUpdateOptions
+ {
+ DefaultTaxRates = [],
+ AutomaticTax = new SubscriptionAutomaticTaxOptions { Enabled = true }
+ });
+ }
+ }
+
+ var updatedSubscription = pm5766AutomaticTaxIsEnabled
+ ? subscription
+ : await VerifyCorrectTaxRateForChargeAsync(invoice, subscription);
+
+ var (organizationId, userId, providerId) = _stripeEventUtilityService.GetIdsFromMetadata(updatedSubscription.Metadata);
+
+ var invoiceLineItemDescriptions = invoice.Lines.Select(i => i.Description).ToList();
+
+ if (organizationId.HasValue)
+ {
+ if (_stripeEventUtilityService.IsSponsoredSubscription(updatedSubscription))
+ {
+ await _validateSponsorshipCommand.ValidateSponsorshipAsync(organizationId.Value);
+ }
+
+ var organization = await _organizationRepository.GetByIdAsync(organizationId.Value);
+
+ if (organization == null || !OrgPlanForInvoiceNotifications(organization))
+ {
+ return;
+ }
+
+ await SendEmails(new List { organization.BillingEmail });
+
+ /*
+ * TODO: https://bitwarden.atlassian.net/browse/PM-4862
+ * Disabling this as part of a hot fix. It needs to check whether the organization
+ * belongs to a Reseller provider and only send an email to the organization owners if it does.
+ * It also requires a new email template as the current one contains too much billing information.
+ */
+
+ // var ownerEmails = await _organizationRepository.GetOwnerEmailAddressesById(organization.Id);
+
+ // await SendEmails(ownerEmails);
+ }
+ else if (userId.HasValue)
+ {
+ var user = await _userService.GetUserByIdAsync(userId.Value);
+
+ if (user?.Premium == true)
+ {
+ await SendEmails(new List { user.Email });
+ }
+ }
+ else if (providerId.HasValue)
+ {
+ var provider = await _providerRepository.GetByIdAsync(providerId.Value);
+
+ if (provider == null)
+ {
+ _logger.LogError(
+ "Received invoice.Upcoming webhook ({EventID}) for Provider ({ProviderID}) that does not exist",
+ parsedEvent.Id,
+ providerId.Value);
+
+ return;
+ }
+
+ await SendEmails(new List { provider.BillingEmail });
+
+ }
+
+ return;
+
+ /*
+ * Sends emails to the given email addresses.
+ */
+ async Task SendEmails(IEnumerable emails)
+ {
+ var validEmails = emails.Where(e => !string.IsNullOrEmpty(e));
+
+ if (invoice.NextPaymentAttempt.HasValue)
+ {
+ await _mailService.SendInvoiceUpcoming(
+ validEmails,
+ invoice.AmountDue / 100M,
+ invoice.NextPaymentAttempt.Value,
+ invoiceLineItemDescriptions,
+ true);
+ }
+ }
+ }
+
+ private async Task VerifyCorrectTaxRateForChargeAsync(Invoice invoice, Stripe.Subscription subscription)
+ {
+ if (string.IsNullOrWhiteSpace(invoice?.CustomerAddress?.Country) ||
+ string.IsNullOrWhiteSpace(invoice?.CustomerAddress?.PostalCode))
+ {
+ return subscription;
+ }
+
+ var localBitwardenTaxRates = await _taxRateRepository.GetByLocationAsync(
+ new TaxRate()
+ {
+ Country = invoice.CustomerAddress.Country,
+ PostalCode = invoice.CustomerAddress.PostalCode
+ }
+ );
+
+ if (!localBitwardenTaxRates.Any())
+ {
+ return subscription;
+ }
+
+ var stripeTaxRate = await _stripeFacade.GetTaxRate(localBitwardenTaxRates.First().Id);
+ if (stripeTaxRate == null || subscription.DefaultTaxRates.Any(x => x == stripeTaxRate))
+ {
+ return subscription;
+ }
+
+ subscription.DefaultTaxRates = [stripeTaxRate];
+
+ var subscriptionOptions = new SubscriptionUpdateOptions { DefaultTaxRates = [stripeTaxRate.Id] };
+ subscription = await _stripeFacade.UpdateSubscription(subscription.Id, subscriptionOptions);
+
+ return subscription;
+ }
+
+ private static bool OrgPlanForInvoiceNotifications(Organization org) => StaticStore.GetPlan(org.PlanType).IsAnnual;
+}
diff --git a/src/Billing/Startup.cs b/src/Billing/Startup.cs
index 1bc2789a4..369f76a93 100644
--- a/src/Billing/Startup.cs
+++ b/src/Billing/Startup.cs
@@ -52,6 +52,21 @@ public class Startup
// Context
services.AddScoped();
+ //Handlers
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+ services.AddScoped();
+
// Identity
services.AddCustomIdentityServices(globalSettings);
//services.AddPasswordlessIdentityServices(globalSettings);
From d9aa27d4cb8a31c857b499e37ed5ee61d8dbc1da Mon Sep 17 00:00:00 2001
From: Thomas Rittson <31796059+eliykat@users.noreply.github.com>
Date: Thu, 27 Jun 2024 05:56:37 +1000
Subject: [PATCH 08/40] [AC-2204] Finalize sprocs that added the Manage
permission (1 of 3) (#4204)
* Copy v2 sprocs and drop v2 suffix
---
.../CollectionUser_UpdateUsers.sql | 83 +++
.../Collection_CreateWithGroupsAndUsers.sql | 73 +++
.../Collection_UpdateWithGroupsAndUsers.sql | 111 ++++
.../Group_CreateWithCollections.sql | 44 ++
.../Group_UpdateWithCollections.sql | 63 +++
...OrganizationUser_CreateWithCollections.sql | 49 ++
...OrganizationUser_UpdateWithCollections.sql | 86 +++
..._00_FinalizeCollectionManagePermission.sql | 533 ++++++++++++++++++
8 files changed, 1042 insertions(+)
create mode 100644 src/Sql/dbo/Stored Procedures/CollectionUser_UpdateUsers.sql
create mode 100644 src/Sql/dbo/Stored Procedures/Collection_CreateWithGroupsAndUsers.sql
create mode 100644 src/Sql/dbo/Stored Procedures/Collection_UpdateWithGroupsAndUsers.sql
create mode 100644 src/Sql/dbo/Stored Procedures/Group_CreateWithCollections.sql
create mode 100644 src/Sql/dbo/Stored Procedures/Group_UpdateWithCollections.sql
create mode 100644 src/Sql/dbo/Stored Procedures/OrganizationUser_CreateWithCollections.sql
create mode 100644 src/Sql/dbo/Stored Procedures/OrganizationUser_UpdateWithCollections.sql
create mode 100644 util/Migrator/DbScripts/2024-06-25_00_FinalizeCollectionManagePermission.sql
diff --git a/src/Sql/dbo/Stored Procedures/CollectionUser_UpdateUsers.sql b/src/Sql/dbo/Stored Procedures/CollectionUser_UpdateUsers.sql
new file mode 100644
index 000000000..cfe7133d8
--- /dev/null
+++ b/src/Sql/dbo/Stored Procedures/CollectionUser_UpdateUsers.sql
@@ -0,0 +1,83 @@
+CREATE PROCEDURE [dbo].[CollectionUser_UpdateUsers]
+ @CollectionId UNIQUEIDENTIFIER,
+ @Users AS [dbo].[CollectionAccessSelectionType] READONLY
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ DECLARE @OrgId UNIQUEIDENTIFIER = (
+ SELECT TOP 1
+ [OrganizationId]
+ FROM
+ [dbo].[Collection]
+ WHERE
+ [Id] = @CollectionId
+ )
+
+ -- Update
+ UPDATE
+ [Target]
+ SET
+ [Target].[ReadOnly] = [Source].[ReadOnly],
+ [Target].[HidePasswords] = [Source].[HidePasswords],
+ [Target].[Manage] = [Source].[Manage]
+ FROM
+ [dbo].[CollectionUser] [Target]
+ INNER JOIN
+ @Users [Source] ON [Source].[Id] = [Target].[OrganizationUserId]
+ WHERE
+ [Target].[CollectionId] = @CollectionId
+ AND (
+ [Target].[ReadOnly] != [Source].[ReadOnly]
+ OR [Target].[HidePasswords] != [Source].[HidePasswords]
+ OR [Target].[Manage] != [Source].[Manage]
+ )
+
+ -- Insert
+ INSERT INTO [dbo].[CollectionUser]
+ (
+ [CollectionId],
+ [OrganizationUserId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ @CollectionId,
+ [Source].[Id],
+ [Source].[ReadOnly],
+ [Source].[HidePasswords],
+ [Source].[Manage]
+ FROM
+ @Users [Source]
+ INNER JOIN
+ [dbo].[OrganizationUser] OU ON [Source].[Id] = OU.[Id] AND OU.[OrganizationId] = @OrgId
+ WHERE
+ NOT EXISTS (
+ SELECT
+ 1
+ FROM
+ [dbo].[CollectionUser]
+ WHERE
+ [CollectionId] = @CollectionId
+ AND [OrganizationUserId] = [Source].[Id]
+ )
+
+ -- Delete
+ DELETE
+ CU
+ FROM
+ [dbo].[CollectionUser] CU
+ WHERE
+ CU.[CollectionId] = @CollectionId
+ AND NOT EXISTS (
+ SELECT
+ 1
+ FROM
+ @Users
+ WHERE
+ [Id] = CU.[OrganizationUserId]
+ )
+
+ EXEC [dbo].[User_BumpAccountRevisionDateByCollectionId] @CollectionId, @OrgId
+END
diff --git a/src/Sql/dbo/Stored Procedures/Collection_CreateWithGroupsAndUsers.sql b/src/Sql/dbo/Stored Procedures/Collection_CreateWithGroupsAndUsers.sql
new file mode 100644
index 000000000..87bac3b38
--- /dev/null
+++ b/src/Sql/dbo/Stored Procedures/Collection_CreateWithGroupsAndUsers.sql
@@ -0,0 +1,73 @@
+CREATE PROCEDURE [dbo].[Collection_CreateWithGroupsAndUsers]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @Name VARCHAR(MAX),
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Groups AS [dbo].[CollectionAccessSelectionType] READONLY,
+ @Users AS [dbo].[CollectionAccessSelectionType] READONLY
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[Collection_Create] @Id, @OrganizationId, @Name, @ExternalId, @CreationDate, @RevisionDate
+
+ -- Groups
+ ;WITH [AvailableGroupsCTE] AS(
+ SELECT
+ [Id]
+ FROM
+ [dbo].[Group]
+ WHERE
+ [OrganizationId] = @OrganizationId
+ )
+ INSERT INTO [dbo].[CollectionGroup]
+ (
+ [CollectionId],
+ [GroupId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ @Id,
+ [Id],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ FROM
+ @Groups
+ WHERE
+ [Id] IN (SELECT [Id] FROM [AvailableGroupsCTE])
+
+ -- Users
+ ;WITH [AvailableUsersCTE] AS(
+ SELECT
+ [Id]
+ FROM
+ [dbo].[OrganizationUser]
+ WHERE
+ [OrganizationId] = @OrganizationId
+ )
+ INSERT INTO [dbo].[CollectionUser]
+ (
+ [CollectionId],
+ [OrganizationUserId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ @Id,
+ [Id],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ FROM
+ @Users
+ WHERE
+ [Id] IN (SELECT [Id] FROM [AvailableUsersCTE])
+
+ EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationId] @OrganizationId
+END
diff --git a/src/Sql/dbo/Stored Procedures/Collection_UpdateWithGroupsAndUsers.sql b/src/Sql/dbo/Stored Procedures/Collection_UpdateWithGroupsAndUsers.sql
new file mode 100644
index 000000000..da7e77cc1
--- /dev/null
+++ b/src/Sql/dbo/Stored Procedures/Collection_UpdateWithGroupsAndUsers.sql
@@ -0,0 +1,111 @@
+CREATE PROCEDURE [dbo].[Collection_UpdateWithGroupsAndUsers]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @Name VARCHAR(MAX),
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Groups AS [dbo].[CollectionAccessSelectionType] READONLY,
+ @Users AS [dbo].[CollectionAccessSelectionType] READONLY
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[Collection_Update] @Id, @OrganizationId, @Name, @ExternalId, @CreationDate, @RevisionDate
+
+ -- Groups
+ ;WITH [AvailableGroupsCTE] AS(
+ SELECT
+ Id
+ FROM
+ [dbo].[Group]
+ WHERE
+ OrganizationId = @OrganizationId
+ )
+ MERGE
+ [dbo].[CollectionGroup] AS [Target]
+ USING
+ @Groups AS [Source]
+ ON
+ [Target].[CollectionId] = @Id
+ AND [Target].[GroupId] = [Source].[Id]
+ WHEN NOT MATCHED BY TARGET
+ AND [Source].[Id] IN (SELECT [Id] FROM [AvailableGroupsCTE]) THEN
+ INSERT -- Add explicit column list
+ (
+ [CollectionId],
+ [GroupId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ VALUES
+ (
+ @Id,
+ [Source].[Id],
+ [Source].[ReadOnly],
+ [Source].[HidePasswords],
+ [Source].[Manage]
+ )
+ WHEN MATCHED AND (
+ [Target].[ReadOnly] != [Source].[ReadOnly]
+ OR [Target].[HidePasswords] != [Source].[HidePasswords]
+ OR [Target].[Manage] != [Source].[Manage]
+ ) THEN
+ UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
+ [Target].[HidePasswords] = [Source].[HidePasswords],
+ [Target].[Manage] = [Source].[Manage]
+ WHEN NOT MATCHED BY SOURCE
+ AND [Target].[CollectionId] = @Id THEN
+ DELETE
+ ;
+
+ -- Users
+ ;WITH [AvailableGroupsCTE] AS(
+ SELECT
+ Id
+ FROM
+ [dbo].[OrganizationUser]
+ WHERE
+ OrganizationId = @OrganizationId
+ )
+ MERGE
+ [dbo].[CollectionUser] AS [Target]
+ USING
+ @Users AS [Source]
+ ON
+ [Target].[CollectionId] = @Id
+ AND [Target].[OrganizationUserId] = [Source].[Id]
+ WHEN NOT MATCHED BY TARGET
+ AND [Source].[Id] IN (SELECT [Id] FROM [AvailableGroupsCTE]) THEN
+ INSERT
+ (
+ [CollectionId],
+ [OrganizationUserId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ VALUES
+ (
+ @Id,
+ [Source].[Id],
+ [Source].[ReadOnly],
+ [Source].[HidePasswords],
+ [Source].[Manage]
+ )
+ WHEN MATCHED AND (
+ [Target].[ReadOnly] != [Source].[ReadOnly]
+ OR [Target].[HidePasswords] != [Source].[HidePasswords]
+ OR [Target].[Manage] != [Source].[Manage]
+ ) THEN
+ UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
+ [Target].[HidePasswords] = [Source].[HidePasswords],
+ [Target].[Manage] = [Source].[Manage]
+ WHEN NOT MATCHED BY SOURCE
+ AND [Target].[CollectionId] = @Id THEN
+ DELETE
+ ;
+
+ EXEC [dbo].[User_BumpAccountRevisionDateByCollectionId] @Id, @OrganizationId
+END
diff --git a/src/Sql/dbo/Stored Procedures/Group_CreateWithCollections.sql b/src/Sql/dbo/Stored Procedures/Group_CreateWithCollections.sql
new file mode 100644
index 000000000..e57188ab2
--- /dev/null
+++ b/src/Sql/dbo/Stored Procedures/Group_CreateWithCollections.sql
@@ -0,0 +1,44 @@
+CREATE PROCEDURE [dbo].[Group_CreateWithCollections]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @Name NVARCHAR(100),
+ @AccessAll BIT,
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Collections AS [dbo].[CollectionAccessSelectionType] READONLY
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[Group_Create] @Id, @OrganizationId, @Name, @AccessAll, @ExternalId, @CreationDate, @RevisionDate
+
+ ;WITH [AvailableCollectionsCTE] AS(
+ SELECT
+ [Id]
+ FROM
+ [dbo].[Collection]
+ WHERE
+ [OrganizationId] = @OrganizationId
+ )
+ INSERT INTO [dbo].[CollectionGroup]
+ (
+ [CollectionId],
+ [GroupId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ [Id],
+ @Id,
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ FROM
+ @Collections
+ WHERE
+ [Id] IN (SELECT [Id] FROM [AvailableCollectionsCTE])
+
+ EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationId] @OrganizationId
+END
diff --git a/src/Sql/dbo/Stored Procedures/Group_UpdateWithCollections.sql b/src/Sql/dbo/Stored Procedures/Group_UpdateWithCollections.sql
new file mode 100644
index 000000000..de01003bc
--- /dev/null
+++ b/src/Sql/dbo/Stored Procedures/Group_UpdateWithCollections.sql
@@ -0,0 +1,63 @@
+CREATE PROCEDURE [dbo].[Group_UpdateWithCollections]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @Name NVARCHAR(100),
+ @AccessAll BIT,
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Collections AS [dbo].[CollectionAccessSelectionType] READONLY
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[Group_Update] @Id, @OrganizationId, @Name, @AccessAll, @ExternalId, @CreationDate, @RevisionDate
+
+ ;WITH [AvailableCollectionsCTE] AS(
+ SELECT
+ Id
+ FROM
+ [dbo].[Collection]
+ WHERE
+ OrganizationId = @OrganizationId
+ )
+ MERGE
+ [dbo].[CollectionGroup] AS [Target]
+ USING
+ @Collections AS [Source]
+ ON
+ [Target].[CollectionId] = [Source].[Id]
+ AND [Target].[GroupId] = @Id
+ WHEN NOT MATCHED BY TARGET
+ AND [Source].[Id] IN (SELECT [Id] FROM [AvailableCollectionsCTE]) THEN
+ INSERT
+ (
+ [CollectionId],
+ [GroupId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ VALUES
+ (
+ [Source].[Id],
+ @Id,
+ [Source].[ReadOnly],
+ [Source].[HidePasswords],
+ [Source].[Manage]
+ )
+ WHEN MATCHED AND (
+ [Target].[ReadOnly] != [Source].[ReadOnly]
+ OR [Target].[HidePasswords] != [Source].[HidePasswords]
+ OR [Target].[Manage] != [Source].[Manage]
+ ) THEN
+ UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
+ [Target].[HidePasswords] = [Source].[HidePasswords],
+ [Target].[Manage] = [Source].[Manage]
+ WHEN NOT MATCHED BY SOURCE
+ AND [Target].[GroupId] = @Id THEN
+ DELETE
+ ;
+
+ EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationId] @OrganizationId
+END
diff --git a/src/Sql/dbo/Stored Procedures/OrganizationUser_CreateWithCollections.sql b/src/Sql/dbo/Stored Procedures/OrganizationUser_CreateWithCollections.sql
new file mode 100644
index 000000000..d8245fe1f
--- /dev/null
+++ b/src/Sql/dbo/Stored Procedures/OrganizationUser_CreateWithCollections.sql
@@ -0,0 +1,49 @@
+CREATE PROCEDURE [dbo].[OrganizationUser_CreateWithCollections]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @UserId UNIQUEIDENTIFIER,
+ @Email NVARCHAR(256),
+ @Key VARCHAR(MAX),
+ @Status SMALLINT,
+ @Type TINYINT,
+ @AccessAll BIT,
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Permissions NVARCHAR(MAX),
+ @ResetPasswordKey VARCHAR(MAX),
+ @Collections AS [dbo].[CollectionAccessSelectionType] READONLY,
+ @AccessSecretsManager BIT = 0
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[OrganizationUser_Create] @Id, @OrganizationId, @UserId, @Email, @Key, @Status, @Type, @AccessAll, @ExternalId, @CreationDate, @RevisionDate, @Permissions, @ResetPasswordKey, @AccessSecretsManager
+
+ ;WITH [AvailableCollectionsCTE] AS(
+ SELECT
+ [Id]
+ FROM
+ [dbo].[Collection]
+ WHERE
+ [OrganizationId] = @OrganizationId
+ )
+ INSERT INTO [dbo].[CollectionUser]
+ (
+ [CollectionId],
+ [OrganizationUserId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ [Id],
+ @Id,
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ FROM
+ @Collections
+ WHERE
+ [Id] IN (SELECT [Id] FROM [AvailableCollectionsCTE])
+END
diff --git a/src/Sql/dbo/Stored Procedures/OrganizationUser_UpdateWithCollections.sql b/src/Sql/dbo/Stored Procedures/OrganizationUser_UpdateWithCollections.sql
new file mode 100644
index 000000000..20797b144
--- /dev/null
+++ b/src/Sql/dbo/Stored Procedures/OrganizationUser_UpdateWithCollections.sql
@@ -0,0 +1,86 @@
+CREATE PROCEDURE [dbo].[OrganizationUser_UpdateWithCollections]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @UserId UNIQUEIDENTIFIER,
+ @Email NVARCHAR(256),
+ @Key VARCHAR(MAX),
+ @Status SMALLINT,
+ @Type TINYINT,
+ @AccessAll BIT,
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Permissions NVARCHAR(MAX),
+ @ResetPasswordKey VARCHAR(MAX),
+ @Collections AS [dbo].[CollectionAccessSelectionType] READONLY,
+ @AccessSecretsManager BIT = 0
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[OrganizationUser_Update] @Id, @OrganizationId, @UserId, @Email, @Key, @Status, @Type, @AccessAll, @ExternalId, @CreationDate, @RevisionDate, @Permissions, @ResetPasswordKey, @AccessSecretsManager
+ -- Update
+ UPDATE
+ [Target]
+ SET
+ [Target].[ReadOnly] = [Source].[ReadOnly],
+ [Target].[HidePasswords] = [Source].[HidePasswords],
+ [Target].[Manage] = [Source].[Manage]
+ FROM
+ [dbo].[CollectionUser] AS [Target]
+ INNER JOIN
+ @Collections AS [Source] ON [Source].[Id] = [Target].[CollectionId]
+ WHERE
+ [Target].[OrganizationUserId] = @Id
+ AND (
+ [Target].[ReadOnly] != [Source].[ReadOnly]
+ OR [Target].[HidePasswords] != [Source].[HidePasswords]
+ OR [Target].[Manage] != [Source].[Manage]
+ )
+
+ -- Insert
+ INSERT INTO [dbo].[CollectionUser]
+ (
+ [CollectionId],
+ [OrganizationUserId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ [Source].[Id],
+ @Id,
+ [Source].[ReadOnly],
+ [Source].[HidePasswords],
+ [Source].[Manage]
+ FROM
+ @Collections AS [Source]
+ INNER JOIN
+ [dbo].[Collection] C ON C.[Id] = [Source].[Id] AND C.[OrganizationId] = @OrganizationId
+ WHERE
+ NOT EXISTS (
+ SELECT
+ 1
+ FROM
+ [dbo].[CollectionUser]
+ WHERE
+ [CollectionId] = [Source].[Id]
+ AND [OrganizationUserId] = @Id
+ )
+
+ -- Delete
+ DELETE
+ CU
+ FROM
+ [dbo].[CollectionUser] CU
+ WHERE
+ CU.[OrganizationUserId] = @Id
+ AND NOT EXISTS (
+ SELECT
+ 1
+ FROM
+ @Collections
+ WHERE
+ [Id] = CU.[CollectionId]
+ )
+END
diff --git a/util/Migrator/DbScripts/2024-06-25_00_FinalizeCollectionManagePermission.sql b/util/Migrator/DbScripts/2024-06-25_00_FinalizeCollectionManagePermission.sql
new file mode 100644
index 000000000..3548b70fd
--- /dev/null
+++ b/util/Migrator/DbScripts/2024-06-25_00_FinalizeCollectionManagePermission.sql
@@ -0,0 +1,533 @@
+-- Drop the v2 naming for sprocs that added the CollectionUser.Manage and CollectionGroup.Manage columns.
+-- Step 1: copy existing sprocs and drop the v2 suffix. Current v2 sprocs will be left for EDD rollback support.
+
+-- Collection_CreateWithGroupsAndUsers
+CREATE OR ALTER PROCEDURE [dbo].[Collection_CreateWithGroupsAndUsers]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @Name VARCHAR(MAX),
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Groups AS [dbo].[CollectionAccessSelectionType] READONLY,
+ @Users AS [dbo].[CollectionAccessSelectionType] READONLY
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[Collection_Create] @Id, @OrganizationId, @Name, @ExternalId, @CreationDate, @RevisionDate
+
+ -- Groups
+ ;WITH [AvailableGroupsCTE] AS(
+ SELECT
+ [Id]
+ FROM
+ [dbo].[Group]
+ WHERE
+ [OrganizationId] = @OrganizationId
+ )
+ INSERT INTO [dbo].[CollectionGroup]
+ (
+ [CollectionId],
+ [GroupId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ @Id,
+ [Id],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ FROM
+ @Groups
+ WHERE
+ [Id] IN (SELECT [Id] FROM [AvailableGroupsCTE])
+
+ -- Users
+ ;WITH [AvailableUsersCTE] AS(
+ SELECT
+ [Id]
+ FROM
+ [dbo].[OrganizationUser]
+ WHERE
+ [OrganizationId] = @OrganizationId
+ )
+ INSERT INTO [dbo].[CollectionUser]
+ (
+ [CollectionId],
+ [OrganizationUserId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ @Id,
+ [Id],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ FROM
+ @Users
+ WHERE
+ [Id] IN (SELECT [Id] FROM [AvailableUsersCTE])
+
+ EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationId] @OrganizationId
+END
+GO
+
+-- Collection_UpdateWithGroupsAndUsers
+CREATE OR ALTER PROCEDURE [dbo].[Collection_UpdateWithGroupsAndUsers]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @Name VARCHAR(MAX),
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Groups AS [dbo].[CollectionAccessSelectionType] READONLY,
+ @Users AS [dbo].[CollectionAccessSelectionType] READONLY
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[Collection_Update] @Id, @OrganizationId, @Name, @ExternalId, @CreationDate, @RevisionDate
+
+ -- Groups
+ ;WITH [AvailableGroupsCTE] AS(
+ SELECT
+ Id
+ FROM
+ [dbo].[Group]
+ WHERE
+ OrganizationId = @OrganizationId
+ )
+ MERGE
+ [dbo].[CollectionGroup] AS [Target]
+ USING
+ @Groups AS [Source]
+ ON
+ [Target].[CollectionId] = @Id
+ AND [Target].[GroupId] = [Source].[Id]
+ WHEN NOT MATCHED BY TARGET
+ AND [Source].[Id] IN (SELECT [Id] FROM [AvailableGroupsCTE]) THEN
+ INSERT -- Add explicit column list
+ (
+ [CollectionId],
+ [GroupId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ VALUES
+ (
+ @Id,
+ [Source].[Id],
+ [Source].[ReadOnly],
+ [Source].[HidePasswords],
+ [Source].[Manage]
+ )
+ WHEN MATCHED AND (
+ [Target].[ReadOnly] != [Source].[ReadOnly]
+ OR [Target].[HidePasswords] != [Source].[HidePasswords]
+ OR [Target].[Manage] != [Source].[Manage]
+ ) THEN
+ UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
+ [Target].[HidePasswords] = [Source].[HidePasswords],
+ [Target].[Manage] = [Source].[Manage]
+ WHEN NOT MATCHED BY SOURCE
+ AND [Target].[CollectionId] = @Id THEN
+ DELETE
+ ;
+
+ -- Users
+ ;WITH [AvailableGroupsCTE] AS(
+ SELECT
+ Id
+ FROM
+ [dbo].[OrganizationUser]
+ WHERE
+ OrganizationId = @OrganizationId
+ )
+ MERGE
+ [dbo].[CollectionUser] AS [Target]
+ USING
+ @Users AS [Source]
+ ON
+ [Target].[CollectionId] = @Id
+ AND [Target].[OrganizationUserId] = [Source].[Id]
+ WHEN NOT MATCHED BY TARGET
+ AND [Source].[Id] IN (SELECT [Id] FROM [AvailableGroupsCTE]) THEN
+ INSERT
+ (
+ [CollectionId],
+ [OrganizationUserId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ VALUES
+ (
+ @Id,
+ [Source].[Id],
+ [Source].[ReadOnly],
+ [Source].[HidePasswords],
+ [Source].[Manage]
+ )
+ WHEN MATCHED AND (
+ [Target].[ReadOnly] != [Source].[ReadOnly]
+ OR [Target].[HidePasswords] != [Source].[HidePasswords]
+ OR [Target].[Manage] != [Source].[Manage]
+ ) THEN
+ UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
+ [Target].[HidePasswords] = [Source].[HidePasswords],
+ [Target].[Manage] = [Source].[Manage]
+ WHEN NOT MATCHED BY SOURCE
+ AND [Target].[CollectionId] = @Id THEN
+ DELETE
+ ;
+
+ EXEC [dbo].[User_BumpAccountRevisionDateByCollectionId] @Id, @OrganizationId
+END
+GO
+
+-- CollectionUser_UpdateUsers
+CREATE OR ALTER PROCEDURE [dbo].[CollectionUser_UpdateUsers]
+ @CollectionId UNIQUEIDENTIFIER,
+ @Users AS [dbo].[CollectionAccessSelectionType] READONLY
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ DECLARE @OrgId UNIQUEIDENTIFIER = (
+ SELECT TOP 1
+ [OrganizationId]
+ FROM
+ [dbo].[Collection]
+ WHERE
+ [Id] = @CollectionId
+ )
+
+ -- Update
+ UPDATE
+ [Target]
+ SET
+ [Target].[ReadOnly] = [Source].[ReadOnly],
+ [Target].[HidePasswords] = [Source].[HidePasswords],
+ [Target].[Manage] = [Source].[Manage]
+ FROM
+ [dbo].[CollectionUser] [Target]
+ INNER JOIN
+ @Users [Source] ON [Source].[Id] = [Target].[OrganizationUserId]
+ WHERE
+ [Target].[CollectionId] = @CollectionId
+ AND (
+ [Target].[ReadOnly] != [Source].[ReadOnly]
+ OR [Target].[HidePasswords] != [Source].[HidePasswords]
+ OR [Target].[Manage] != [Source].[Manage]
+ )
+
+ -- Insert
+ INSERT INTO [dbo].[CollectionUser]
+ (
+ [CollectionId],
+ [OrganizationUserId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ @CollectionId,
+ [Source].[Id],
+ [Source].[ReadOnly],
+ [Source].[HidePasswords],
+ [Source].[Manage]
+ FROM
+ @Users [Source]
+ INNER JOIN
+ [dbo].[OrganizationUser] OU ON [Source].[Id] = OU.[Id] AND OU.[OrganizationId] = @OrgId
+ WHERE
+ NOT EXISTS (
+ SELECT
+ 1
+ FROM
+ [dbo].[CollectionUser]
+ WHERE
+ [CollectionId] = @CollectionId
+ AND [OrganizationUserId] = [Source].[Id]
+ )
+
+ -- Delete
+ DELETE
+ CU
+ FROM
+ [dbo].[CollectionUser] CU
+ WHERE
+ CU.[CollectionId] = @CollectionId
+ AND NOT EXISTS (
+ SELECT
+ 1
+ FROM
+ @Users
+ WHERE
+ [Id] = CU.[OrganizationUserId]
+ )
+
+ EXEC [dbo].[User_BumpAccountRevisionDateByCollectionId] @CollectionId, @OrgId
+END
+GO
+
+-- Group_CreateWithCollections
+CREATE OR ALTER PROCEDURE [dbo].[Group_CreateWithCollections]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @Name NVARCHAR(100),
+ @AccessAll BIT,
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Collections AS [dbo].[CollectionAccessSelectionType] READONLY
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[Group_Create] @Id, @OrganizationId, @Name, @AccessAll, @ExternalId, @CreationDate, @RevisionDate
+
+ ;WITH [AvailableCollectionsCTE] AS(
+ SELECT
+ [Id]
+ FROM
+ [dbo].[Collection]
+ WHERE
+ [OrganizationId] = @OrganizationId
+ )
+ INSERT INTO [dbo].[CollectionGroup]
+ (
+ [CollectionId],
+ [GroupId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ [Id],
+ @Id,
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ FROM
+ @Collections
+ WHERE
+ [Id] IN (SELECT [Id] FROM [AvailableCollectionsCTE])
+
+ EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationId] @OrganizationId
+END
+GO
+
+-- Group_UpdateWithCollections
+CREATE OR ALTER PROCEDURE [dbo].[Group_UpdateWithCollections]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @Name NVARCHAR(100),
+ @AccessAll BIT,
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Collections AS [dbo].[CollectionAccessSelectionType] READONLY
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[Group_Update] @Id, @OrganizationId, @Name, @AccessAll, @ExternalId, @CreationDate, @RevisionDate
+
+ ;WITH [AvailableCollectionsCTE] AS(
+ SELECT
+ Id
+ FROM
+ [dbo].[Collection]
+ WHERE
+ OrganizationId = @OrganizationId
+ )
+ MERGE
+ [dbo].[CollectionGroup] AS [Target]
+ USING
+ @Collections AS [Source]
+ ON
+ [Target].[CollectionId] = [Source].[Id]
+ AND [Target].[GroupId] = @Id
+ WHEN NOT MATCHED BY TARGET
+ AND [Source].[Id] IN (SELECT [Id] FROM [AvailableCollectionsCTE]) THEN
+ INSERT
+ (
+ [CollectionId],
+ [GroupId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ VALUES
+ (
+ [Source].[Id],
+ @Id,
+ [Source].[ReadOnly],
+ [Source].[HidePasswords],
+ [Source].[Manage]
+ )
+ WHEN MATCHED AND (
+ [Target].[ReadOnly] != [Source].[ReadOnly]
+ OR [Target].[HidePasswords] != [Source].[HidePasswords]
+ OR [Target].[Manage] != [Source].[Manage]
+ ) THEN
+ UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
+ [Target].[HidePasswords] = [Source].[HidePasswords],
+ [Target].[Manage] = [Source].[Manage]
+ WHEN NOT MATCHED BY SOURCE
+ AND [Target].[GroupId] = @Id THEN
+ DELETE
+ ;
+
+ EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationId] @OrganizationId
+END
+GO
+
+
+-- OrganizationUser_CreateWithCollections
+CREATE OR ALTER PROCEDURE [dbo].[OrganizationUser_CreateWithCollections]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @UserId UNIQUEIDENTIFIER,
+ @Email NVARCHAR(256),
+ @Key VARCHAR(MAX),
+ @Status SMALLINT,
+ @Type TINYINT,
+ @AccessAll BIT,
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Permissions NVARCHAR(MAX),
+ @ResetPasswordKey VARCHAR(MAX),
+ @Collections AS [dbo].[CollectionAccessSelectionType] READONLY,
+ @AccessSecretsManager BIT = 0
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[OrganizationUser_Create] @Id, @OrganizationId, @UserId, @Email, @Key, @Status, @Type, @AccessAll, @ExternalId, @CreationDate, @RevisionDate, @Permissions, @ResetPasswordKey, @AccessSecretsManager
+
+ ;WITH [AvailableCollectionsCTE] AS(
+ SELECT
+ [Id]
+ FROM
+ [dbo].[Collection]
+ WHERE
+ [OrganizationId] = @OrganizationId
+ )
+ INSERT INTO [dbo].[CollectionUser]
+ (
+ [CollectionId],
+ [OrganizationUserId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ [Id],
+ @Id,
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ FROM
+ @Collections
+ WHERE
+ [Id] IN (SELECT [Id] FROM [AvailableCollectionsCTE])
+END
+GO
+
+-- OrganizationUser_UpdateWithCollections
+CREATE OR ALTER PROCEDURE [dbo].[OrganizationUser_UpdateWithCollections]
+ @Id UNIQUEIDENTIFIER,
+ @OrganizationId UNIQUEIDENTIFIER,
+ @UserId UNIQUEIDENTIFIER,
+ @Email NVARCHAR(256),
+ @Key VARCHAR(MAX),
+ @Status SMALLINT,
+ @Type TINYINT,
+ @AccessAll BIT,
+ @ExternalId NVARCHAR(300),
+ @CreationDate DATETIME2(7),
+ @RevisionDate DATETIME2(7),
+ @Permissions NVARCHAR(MAX),
+ @ResetPasswordKey VARCHAR(MAX),
+ @Collections AS [dbo].[CollectionAccessSelectionType] READONLY,
+ @AccessSecretsManager BIT = 0
+AS
+BEGIN
+ SET NOCOUNT ON
+
+ EXEC [dbo].[OrganizationUser_Update] @Id, @OrganizationId, @UserId, @Email, @Key, @Status, @Type, @AccessAll, @ExternalId, @CreationDate, @RevisionDate, @Permissions, @ResetPasswordKey, @AccessSecretsManager
+ -- Update
+ UPDATE
+ [Target]
+ SET
+ [Target].[ReadOnly] = [Source].[ReadOnly],
+ [Target].[HidePasswords] = [Source].[HidePasswords],
+ [Target].[Manage] = [Source].[Manage]
+ FROM
+ [dbo].[CollectionUser] AS [Target]
+ INNER JOIN
+ @Collections AS [Source] ON [Source].[Id] = [Target].[CollectionId]
+ WHERE
+ [Target].[OrganizationUserId] = @Id
+ AND (
+ [Target].[ReadOnly] != [Source].[ReadOnly]
+ OR [Target].[HidePasswords] != [Source].[HidePasswords]
+ OR [Target].[Manage] != [Source].[Manage]
+ )
+
+ -- Insert
+ INSERT INTO [dbo].[CollectionUser]
+ (
+ [CollectionId],
+ [OrganizationUserId],
+ [ReadOnly],
+ [HidePasswords],
+ [Manage]
+ )
+ SELECT
+ [Source].[Id],
+ @Id,
+ [Source].[ReadOnly],
+ [Source].[HidePasswords],
+ [Source].[Manage]
+ FROM
+ @Collections AS [Source]
+ INNER JOIN
+ [dbo].[Collection] C ON C.[Id] = [Source].[Id] AND C.[OrganizationId] = @OrganizationId
+ WHERE
+ NOT EXISTS (
+ SELECT
+ 1
+ FROM
+ [dbo].[CollectionUser]
+ WHERE
+ [CollectionId] = [Source].[Id]
+ AND [OrganizationUserId] = @Id
+ )
+
+ -- Delete
+ DELETE
+ CU
+ FROM
+ [dbo].[CollectionUser] CU
+ WHERE
+ CU.[OrganizationUserId] = @Id
+ AND NOT EXISTS (
+ SELECT
+ 1
+ FROM
+ @Collections
+ WHERE
+ [Id] = CU.[CollectionId]
+ )
+END
+GO
From e0f7d212c83bc585b254e7c0f7d12cf025858905 Mon Sep 17 00:00:00 2001
From: cyprain-okeke <108260115+cyprain-okeke@users.noreply.github.com>
Date: Thu, 27 Jun 2024 11:08:46 +0100
Subject: [PATCH 09/40] Fix the Bug for org without subscription (#4213)
Signed-off-by: Cy Okeke
---
.../AdminConsole/Services/ProviderService.cs | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/bitwarden_license/src/Commercial.Core/AdminConsole/Services/ProviderService.cs b/bitwarden_license/src/Commercial.Core/AdminConsole/Services/ProviderService.cs
index f252f1434..380d404b2 100644
--- a/bitwarden_license/src/Commercial.Core/AdminConsole/Services/ProviderService.cs
+++ b/bitwarden_license/src/Commercial.Core/AdminConsole/Services/ProviderService.cs
@@ -436,11 +436,15 @@ public class ProviderService : IProviderService
return;
}
- var subscriptionItem = await GetSubscriptionItemAsync(organization.GatewaySubscriptionId, GetStripeSeatPlanId(organization.PlanType));
- var extractedPlanType = PlanTypeMappings(organization);
- if (subscriptionItem != null)
+ if (!string.IsNullOrWhiteSpace(organization.GatewaySubscriptionId))
{
- await UpdateSubscriptionAsync(subscriptionItem, GetStripeSeatPlanId(extractedPlanType), organization);
+ var subscriptionItem = await GetSubscriptionItemAsync(organization.GatewaySubscriptionId,
+ GetStripeSeatPlanId(organization.PlanType));
+ var extractedPlanType = PlanTypeMappings(organization);
+ if (subscriptionItem != null)
+ {
+ await UpdateSubscriptionAsync(subscriptionItem, GetStripeSeatPlanId(extractedPlanType), organization);
+ }
}
await _organizationRepository.UpsertAsync(organization);
From 563adf54afee2f3b167472705db55f6030bfea98 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 27 Jun 2024 08:45:34 -0400
Subject: [PATCH 10/40] [deps] DbOps: Update EntityFrameworkCore to v8 (major)
(#3744)
* [deps] DbOps: Update EntityFrameworkCore to v8
* Only Run EnsureDeleted If Factory Owns Connection
This only worked because of a bug in dotnet/efcore#33930 that was fixed in 8.0.
---------
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Justin Baur <19896123+justindbaur@users.noreply.github.com>
---
.../Infrastructure.EntityFramework.csproj | 12 ++++++------
.../Factories/WebApplicationFactoryBase.cs | 7 +++++--
util/MySqlMigrations/MySqlMigrations.csproj | 2 +-
util/PostgresMigrations/PostgresMigrations.csproj | 2 +-
util/SqlServerEFScaffold/SqlServerEFScaffold.csproj | 2 +-
util/SqliteMigrations/SqliteMigrations.csproj | 2 +-
6 files changed, 15 insertions(+), 12 deletions(-)
diff --git a/src/Infrastructure.EntityFramework/Infrastructure.EntityFramework.csproj b/src/Infrastructure.EntityFramework/Infrastructure.EntityFramework.csproj
index 7b008ba85..86adc2702 100644
--- a/src/Infrastructure.EntityFramework/Infrastructure.EntityFramework.csproj
+++ b/src/Infrastructure.EntityFramework/Infrastructure.EntityFramework.csproj
@@ -3,12 +3,12 @@
-
-
-
-
-
-
+
+
+
+
+
+
diff --git a/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs b/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs
index b360eeef6..d1e4fc306 100644
--- a/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs
+++ b/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs
@@ -208,13 +208,16 @@ public abstract class WebApplicationFactoryBase : WebApplicationFactory
}
}
- private static void MigrateDbContext(IServiceCollection serviceCollection) where TContext : DbContext
+ private void MigrateDbContext(IServiceCollection serviceCollection) where TContext : DbContext
{
var serviceProvider = serviceCollection.BuildServiceProvider();
using var scope = serviceProvider.CreateScope();
var services = scope.ServiceProvider;
var context = services.GetService();
- context.Database.EnsureDeleted();
+ if (_handleSqliteDisposal)
+ {
+ context.Database.EnsureDeleted();
+ }
context.Database.EnsureCreated();
}
}
diff --git a/util/MySqlMigrations/MySqlMigrations.csproj b/util/MySqlMigrations/MySqlMigrations.csproj
index e3fe4ae70..54229af52 100644
--- a/util/MySqlMigrations/MySqlMigrations.csproj
+++ b/util/MySqlMigrations/MySqlMigrations.csproj
@@ -10,7 +10,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/util/PostgresMigrations/PostgresMigrations.csproj b/util/PostgresMigrations/PostgresMigrations.csproj
index 24a4d4df8..650652d54 100644
--- a/util/PostgresMigrations/PostgresMigrations.csproj
+++ b/util/PostgresMigrations/PostgresMigrations.csproj
@@ -6,7 +6,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/util/SqlServerEFScaffold/SqlServerEFScaffold.csproj b/util/SqlServerEFScaffold/SqlServerEFScaffold.csproj
index d13bb0aa6..66083dd13 100644
--- a/util/SqlServerEFScaffold/SqlServerEFScaffold.csproj
+++ b/util/SqlServerEFScaffold/SqlServerEFScaffold.csproj
@@ -1,6 +1,6 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
diff --git a/util/SqliteMigrations/SqliteMigrations.csproj b/util/SqliteMigrations/SqliteMigrations.csproj
index a76cee5bd..c9b287c2e 100644
--- a/util/SqliteMigrations/SqliteMigrations.csproj
+++ b/util/SqliteMigrations/SqliteMigrations.csproj
@@ -11,7 +11,7 @@
-
+
runtime; build; native; contentfiles; analyzers; buildtransitive
all
From 77dcf7f339eb22e8c8cd499d1ffa3198e612e443 Mon Sep 17 00:00:00 2001
From: Matt Gibson
Date: Thu, 27 Jun 2024 13:07:51 -0400
Subject: [PATCH 11/40] Log SignalR pushes (#4392)
We are interested in the rate at which signalR notifications are pushed to clients. This enables tracking only of that rate and the type of notification, nothing more identifiable.
Data will be used to determine feasibility of transferring to web push
---
src/Notifications/AzureQueueHostedService.cs | 2 +-
src/Notifications/Controllers/SendController.cs | 6 ++++--
src/Notifications/HubHelpers.cs | 2 ++
3 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/src/Notifications/AzureQueueHostedService.cs b/src/Notifications/AzureQueueHostedService.cs
index 9d1fcb193..977d9a9d1 100644
--- a/src/Notifications/AzureQueueHostedService.cs
+++ b/src/Notifications/AzureQueueHostedService.cs
@@ -65,7 +65,7 @@ public class AzureQueueHostedService : IHostedService, IDisposable
try
{
await HubHelpers.SendNotificationToHubAsync(
- message.DecodeMessageText(), _hubContext, _anonymousHubContext, cancellationToken);
+ message.DecodeMessageText(), _hubContext, _anonymousHubContext, _logger, cancellationToken);
await _queueClient.DeleteMessageAsync(message.MessageId, message.PopReceipt);
}
catch (Exception e)
diff --git a/src/Notifications/Controllers/SendController.cs b/src/Notifications/Controllers/SendController.cs
index a5780517e..7debd51df 100644
--- a/src/Notifications/Controllers/SendController.cs
+++ b/src/Notifications/Controllers/SendController.cs
@@ -11,11 +11,13 @@ public class SendController : Controller
{
private readonly IHubContext _hubContext;
private readonly IHubContext _anonymousHubContext;
+ private readonly ILogger _logger;
- public SendController(IHubContext hubContext, IHubContext anonymousHubContext)
+ public SendController(IHubContext hubContext, IHubContext anonymousHubContext, ILogger logger)
{
_hubContext = hubContext;
_anonymousHubContext = anonymousHubContext;
+ _logger = logger;
}
[HttpPost("~/send")]
@@ -27,7 +29,7 @@ public class SendController : Controller
var notificationJson = await reader.ReadToEndAsync();
if (!string.IsNullOrWhiteSpace(notificationJson))
{
- await HubHelpers.SendNotificationToHubAsync(notificationJson, _hubContext, _anonymousHubContext);
+ await HubHelpers.SendNotificationToHubAsync(notificationJson, _hubContext, _anonymousHubContext, _logger);
}
}
}
diff --git a/src/Notifications/HubHelpers.cs b/src/Notifications/HubHelpers.cs
index 8463e1f34..53edb7638 100644
--- a/src/Notifications/HubHelpers.cs
+++ b/src/Notifications/HubHelpers.cs
@@ -14,10 +14,12 @@ public static class HubHelpers
string notificationJson,
IHubContext hubContext,
IHubContext anonymousHubContext,
+ ILogger logger,
CancellationToken cancellationToken = default(CancellationToken)
)
{
var notification = JsonSerializer.Deserialize>(notificationJson, _deserializerOptions);
+ logger.LogInformation("Sending notification: {NotificationType}", notification.Type);
switch (notification.Type)
{
case PushType.SyncCipherUpdate:
From 04ab3d4c2ea8072db3dba5dccfce3db4f049920a Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Thu, 27 Jun 2024 13:49:22 -0700
Subject: [PATCH 12/40] [deps] Auth: Lock file maintenance (#3961)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
bitwarden_license/src/Sso/package-lock.json | 1315 +++++++++++--------
src/Admin/package-lock.json | 1315 +++++++++++--------
2 files changed, 1568 insertions(+), 1062 deletions(-)
diff --git a/bitwarden_license/src/Sso/package-lock.json b/bitwarden_license/src/Sso/package-lock.json
index d5638263a..cc291f4ba 100644
--- a/bitwarden_license/src/Sso/package-lock.json
+++ b/bitwarden_license/src/Sso/package-lock.json
@@ -25,6 +25,7 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -38,6 +39,7 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -47,6 +49,7 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -60,6 +63,7 @@
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
"integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
@@ -73,6 +77,7 @@
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
"integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-wrap": "^0.1.0"
},
@@ -85,6 +90,7 @@
"resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
"integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-wrap": "0.1.0"
},
@@ -97,6 +103,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -106,6 +113,7 @@
"resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
"integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -115,6 +123,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"micromatch": "^3.1.4",
"normalize-path": "^2.1.1"
@@ -125,6 +134,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -138,6 +148,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -146,42 +157,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/anymatch/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/anymatch/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/anymatch/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/anymatch/node_modules/is-extendable": {
@@ -189,6 +176,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -201,6 +189,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -213,6 +202,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -222,6 +212,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -246,6 +237,7 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"remove-trailing-separator": "^1.0.1"
},
@@ -258,6 +250,7 @@
"resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
"integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"buffer-equal": "^1.0.0"
},
@@ -269,13 +262,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
"integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
"integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -285,6 +280,7 @@
"resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
"integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"make-iterator": "^1.0.0"
},
@@ -297,6 +293,7 @@
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -306,6 +303,7 @@
"resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
"integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"make-iterator": "^1.0.0"
},
@@ -318,6 +316,7 @@
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
"integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -327,6 +326,7 @@
"resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
"integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -336,6 +336,7 @@
"resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
"integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-slice": "^1.0.0",
"is-number": "^4.0.0"
@@ -349,6 +350,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
"integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -358,6 +360,7 @@
"resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
"integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^4.0.0"
},
@@ -370,6 +373,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
"integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -379,6 +383,7 @@
"resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
"integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -388,6 +393,7 @@
"resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
"integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"default-compare": "^1.0.0",
"get-value": "^2.0.6",
@@ -402,6 +408,7 @@
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -411,6 +418,7 @@
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -420,6 +428,7 @@
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
"integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -429,6 +438,7 @@
"resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz",
"integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.2",
@@ -449,13 +459,15 @@
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/async-settle": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
"integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"async-done": "^1.2.2"
},
@@ -468,6 +480,7 @@
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true,
+ "license": "(MIT OR Apache-2.0)",
"bin": {
"atob": "bin/atob.js"
},
@@ -480,6 +493,7 @@
"resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
"integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-filter": "^1.1.1",
"arr-flatten": "^1.0.1",
@@ -499,13 +513,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/base": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cache-base": "^1.0.1",
"class-utils": "^0.3.5",
@@ -524,6 +540,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.0"
},
@@ -531,51 +548,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/base/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/base/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/binary-extensions": {
@@ -583,6 +567,7 @@
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
"integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -592,6 +577,7 @@
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"dev": true,
+ "license": "MIT",
"optional": true,
"dependencies": {
"file-uri-to-path": "1.0.0"
@@ -612,6 +598,7 @@
"url": "https://opencollective.com/bootstrap"
}
],
+ "license": "MIT",
"peerDependencies": {
"jquery": "1.9.1 - 3",
"popper.js": "^1.16.1"
@@ -622,6 +609,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -632,6 +620,7 @@
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
@@ -653,6 +642,7 @@
"resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz",
"integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.4"
},
@@ -664,13 +654,15 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"collection-visit": "^1.0.0",
"component-emitter": "^1.2.1",
@@ -687,13 +679,20 @@
}
},
"node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -704,6 +703,7 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
"integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -714,6 +714,7 @@
"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
"dev": true,
+ "license": "MIT",
"dependencies": {
"anymatch": "^2.0.0",
"async-each": "^1.0.1",
@@ -736,6 +737,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
@@ -746,6 +748,7 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.0"
},
@@ -758,6 +761,7 @@
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-union": "^3.1.0",
"define-property": "^0.2.5",
@@ -773,6 +777,7 @@
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
"integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -782,6 +787,7 @@
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
@@ -793,6 +799,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -802,6 +809,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^2.0.0"
},
@@ -814,6 +822,7 @@
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
"integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.8"
}
@@ -823,6 +832,7 @@
"resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
"integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -831,13 +841,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
"integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cloneable-readable": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
"integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.1",
"process-nextick-args": "^2.0.0",
@@ -849,6 +861,7 @@
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -858,6 +871,7 @@
"resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz",
"integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-map": "^2.0.2",
"for-own": "^1.0.0",
@@ -872,6 +886,7 @@
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
"integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"map-visit": "^1.0.0",
"object-visit": "^1.0.0"
@@ -885,21 +900,27 @@
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
"dev": true,
+ "license": "ISC",
"bin": {
"color-support": "bin.js"
}
},
"node_modules/component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
+ "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/concat-stream": {
"version": "1.6.2",
@@ -909,6 +930,7 @@
"engines": [
"node >= 0.8"
],
+ "license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
@@ -920,13 +942,15 @@
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
"integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -936,6 +960,7 @@
"resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz",
"integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"each-props": "^1.3.2",
"is-plain-object": "^5.0.0"
@@ -945,16 +970,21 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/d": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
- "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
+ "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "es5-ext": "^0.10.50",
- "type": "^1.0.1"
+ "es5-ext": "^0.10.64",
+ "type": "^2.7.2"
+ },
+ "engines": {
+ "node": ">=0.12"
}
},
"node_modules/debug": {
@@ -962,6 +992,7 @@
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
@@ -971,6 +1002,7 @@
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -980,6 +1012,7 @@
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
"integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10"
}
@@ -989,6 +1022,7 @@
"resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
"integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kind-of": "^5.0.2"
},
@@ -1001,16 +1035,37 @@
"resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
"integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
},
- "node_modules/define-properties": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
- "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
},
@@ -1026,6 +1081,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^0.1.0"
},
@@ -1038,6 +1094,7 @@
"resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
"integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"globby": "^11.0.1",
"graceful-fs": "^4.2.4",
@@ -1060,6 +1117,7 @@
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
"integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1069,6 +1127,7 @@
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-type": "^4.0.0"
},
@@ -1081,6 +1140,7 @@
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
"integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"end-of-stream": "^1.0.0",
"inherits": "^2.0.1",
@@ -1093,6 +1153,7 @@
"resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
"integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.1",
"object.defaults": "^1.1.0"
@@ -1103,6 +1164,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -1115,6 +1177,7 @@
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"once": "^1.4.0"
}
@@ -1124,19 +1187,45 @@
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-arrayish": "^0.2.1"
}
},
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es5-ext": {
- "version": "0.10.62",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
- "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
+ "version": "0.10.64",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
+ "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
"dev": true,
"hasInstallScript": true,
+ "license": "ISC",
"dependencies": {
"es6-iterator": "^2.0.3",
"es6-symbol": "^3.1.3",
+ "esniff": "^2.0.1",
"next-tick": "^1.1.0"
},
"engines": {
@@ -1148,6 +1237,7 @@
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
"integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"d": "1",
"es5-ext": "^0.10.35",
@@ -1155,13 +1245,17 @@
}
},
"node_modules/es6-symbol": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
- "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
+ "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "d": "^1.0.1",
- "ext": "^1.1.2"
+ "d": "^1.0.2",
+ "ext": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.12"
}
},
"node_modules/es6-weak-map": {
@@ -1169,6 +1263,7 @@
"resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
"integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"d": "1",
"es5-ext": "^0.10.46",
@@ -1176,11 +1271,39 @@
"es6-symbol": "^3.1.1"
}
},
+ "node_modules/esniff": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
+ "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.62",
+ "event-emitter": "^0.3.5",
+ "type": "^2.7.2"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
"node_modules/expand-brackets": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
@@ -1199,6 +1322,7 @@
"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
"integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"homedir-polyfill": "^1.0.1"
},
@@ -1211,27 +1335,24 @@
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
"integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"type": "^2.7.2"
}
},
- "node_modules/ext/node_modules/type": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
- "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
- "dev": true
- },
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extendable": "^0.1.0"
},
@@ -1244,6 +1365,7 @@
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
@@ -1263,6 +1385,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.0"
},
@@ -1270,51 +1393,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/extglob/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/extglob/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/fancy-log": {
@@ -1322,6 +1412,7 @@
"resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
"integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-gray": "^0.1.1",
"color-support": "^1.1.3",
@@ -1333,10 +1424,11 @@
}
},
"node_modules/fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -1352,13 +1444,15 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz",
"integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
@@ -1368,6 +1462,7 @@
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"dev": true,
+ "license": "MIT",
"optional": true
},
"node_modules/fill-range": {
@@ -1375,6 +1470,7 @@
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
@@ -1390,6 +1486,7 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
"integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-exists": "^2.0.0",
"pinkie-promise": "^2.0.0"
@@ -1403,6 +1500,7 @@
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
"integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"detect-file": "^1.0.0",
"is-glob": "^4.0.0",
@@ -1418,6 +1516,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -1431,6 +1530,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -1439,42 +1539,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/findup-sync/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/findup-sync/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/findup-sync/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/findup-sync/node_modules/is-extendable": {
@@ -1482,6 +1558,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -1494,6 +1571,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -1506,6 +1584,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1515,6 +1594,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -1539,6 +1619,7 @@
"resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
"integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expand-tilde": "^2.0.2",
"is-plain-object": "^2.0.3",
@@ -1555,6 +1636,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -1567,6 +1649,7 @@
"resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
"integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -1576,6 +1659,7 @@
"resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
"integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"readable-stream": "^2.3.6"
@@ -1586,6 +1670,7 @@
"resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
"integrity": "sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==",
"dev": true,
+ "license": "(OFL-1.1 AND MIT)",
"engines": {
"node": ">=0.10.3"
}
@@ -1595,6 +1680,7 @@
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
"integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1604,6 +1690,7 @@
"resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
"integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"for-in": "^1.0.1"
},
@@ -1616,6 +1703,7 @@
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
"integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"map-cache": "^0.2.2"
},
@@ -1628,6 +1716,7 @@
"resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
"integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.11",
"through2": "^2.0.3"
@@ -1640,7 +1729,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/fsevents": {
"version": "1.2.13",
@@ -1649,6 +1739,7 @@
"deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2",
"dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -1662,27 +1753,37 @@
}
},
"node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/get-caller-file": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/get-intrinsic": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
- "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
"has-proto": "^1.0.1",
- "has-symbols": "^1.0.3"
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1693,6 +1794,7 @@
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
"integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1701,7 +1803,9 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -1722,6 +1826,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -1734,6 +1839,7 @@
"resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
"integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend": "^3.0.0",
"glob": "^7.1.1",
@@ -1755,6 +1861,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
@@ -1765,6 +1872,7 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.0"
},
@@ -1777,6 +1885,7 @@
"resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz",
"integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"anymatch": "^2.0.0",
"async-done": "^1.2.0",
@@ -1795,6 +1904,7 @@
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"global-prefix": "^1.0.1",
"is-windows": "^1.0.1",
@@ -1809,6 +1919,7 @@
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
"integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expand-tilde": "^2.0.2",
"homedir-polyfill": "^1.0.1",
@@ -1825,6 +1936,7 @@
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
@@ -1845,6 +1957,7 @@
"resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
"integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"sparkles": "^1.0.0"
},
@@ -1852,17 +1965,32 @@
"node": ">= 0.10"
}
},
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/gulp": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
"integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"glob-watcher": "^5.0.3",
"gulp-cli": "^2.2.0",
@@ -1881,6 +2009,7 @@
"resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz",
"integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-colors": "^1.0.1",
"archy": "^1.0.0",
@@ -1913,6 +2042,7 @@
"resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.1.0.tgz",
"integrity": "sha512-7VT0uaF+VZCmkNBglfe1b34bxn/AfcssquLKVDYnCDJ3xNBaW7cUuI3p3BQmoKcoKFrs9jdzUxyb+u+NGfL4OQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lodash.clonedeep": "^4.5.0",
"picocolors": "^1.0.0",
@@ -1930,6 +2060,7 @@
"resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
"integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"glogg": "^1.0.0"
},
@@ -1937,35 +2068,25 @@
"node": ">= 0.10"
}
},
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
"node_modules/has-property-descriptors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "get-intrinsic": "^1.1.1"
+ "es-define-property": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -1978,6 +2099,7 @@
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -1990,6 +2112,7 @@
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
"integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"get-value": "^2.0.6",
"has-values": "^1.0.0",
@@ -2004,6 +2127,7 @@
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
"integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^3.0.0",
"kind-of": "^4.0.0"
@@ -2017,6 +2141,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
"integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5"
},
@@ -2024,11 +2149,25 @@
"node": ">=0.10.0"
}
},
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/homedir-polyfill": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
"integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"parse-passwd": "^1.0.0"
},
@@ -2040,28 +2179,32 @@
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+ "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/immutable": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz",
- "integrity": "sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==",
- "dev": true
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz",
+ "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/indent-string": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
"integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2070,7 +2213,9 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
"dev": true,
+ "license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -2080,19 +2225,22 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/interpret": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
"integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -2102,6 +2250,7 @@
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
"integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2111,6 +2260,7 @@
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
"integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-relative": "^1.0.0",
"is-windows": "^1.0.1"
@@ -2120,40 +2270,31 @@
}
},
"node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
+ "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "kind-of": "^3.0.2"
+ "hasown": "^2.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.10"
}
},
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
"integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"binary-extensions": "^1.0.0"
},
@@ -2165,56 +2306,50 @@
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/is-core-module": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
- "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz",
+ "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "has": "^1.0.3"
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
+ "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "kind-of": "^3.0.2"
+ "hasown": "^2.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/is-extendable": {
@@ -2222,6 +2357,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2231,6 +2367,7 @@
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2240,6 +2377,7 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"number-is-nan": "^1.0.0"
},
@@ -2252,6 +2390,7 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -2264,6 +2403,7 @@
"resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
"integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2273,6 +2413,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kind-of": "^3.0.2"
},
@@ -2285,6 +2426,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5"
},
@@ -2297,6 +2439,7 @@
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
"integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -2306,6 +2449,7 @@
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2315,6 +2459,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2324,6 +2469,7 @@
"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
"integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-unc-path": "^1.0.0"
},
@@ -2336,6 +2482,7 @@
"resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
"integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"unc-path-regex": "^0.1.2"
},
@@ -2347,13 +2494,15 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
"integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/is-valid-glob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
"integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2363,6 +2512,7 @@
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2371,19 +2521,22 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2392,25 +2545,29 @@
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/just-debounce": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz",
"integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2420,6 +2577,7 @@
"resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
"integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"default-resolution": "^2.0.0",
"es6-weak-map": "^2.0.1"
@@ -2433,6 +2591,7 @@
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
"integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-stream": "^2.0.5"
},
@@ -2445,6 +2604,7 @@
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"invert-kv": "^1.0.0"
},
@@ -2457,6 +2617,7 @@
"resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
"integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flush-write-stream": "^1.0.2"
},
@@ -2469,6 +2630,7 @@
"resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
"integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend": "^3.0.0",
"findup-sync": "^3.0.0",
@@ -2488,6 +2650,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -2500,6 +2663,7 @@
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.2",
"parse-json": "^2.2.0",
@@ -2515,13 +2679,15 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/make-iterator": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
"integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kind-of": "^6.0.2"
},
@@ -2534,6 +2700,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2543,6 +2710,7 @@
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
"integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2552,6 +2720,7 @@
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
"integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"object-visit": "^1.0.0"
},
@@ -2564,6 +2733,7 @@
"resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
"integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"findup-sync": "^2.0.0",
"micromatch": "^3.0.4",
@@ -2579,6 +2749,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -2592,6 +2763,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -2605,6 +2777,7 @@
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
"integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"detect-file": "^1.0.0",
"is-glob": "^3.1.0",
@@ -2615,42 +2788,18 @@
"node": ">= 0.10"
}
},
- "node_modules/matchdep/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/matchdep/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/matchdep/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/matchdep/node_modules/is-extendable": {
@@ -2658,6 +2807,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -2670,6 +2820,7 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.0"
},
@@ -2682,6 +2833,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -2694,6 +2846,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2703,6 +2856,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -2726,24 +2880,27 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "braces": "^3.0.2",
+ "braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
@@ -2751,22 +2908,24 @@
}
},
"node_modules/micromatch/node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/micromatch/node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -2779,6 +2938,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
@@ -2788,6 +2948,7 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -2800,6 +2961,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -2812,6 +2974,7 @@
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"for-in": "^1.0.2",
"is-extendable": "^1.0.1"
@@ -2825,6 +2988,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -2837,6 +3001,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -2848,22 +3013,25 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/mute-stdout": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
"integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/nan": {
- "version": "2.17.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
- "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz",
+ "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==",
"dev": true,
+ "license": "MIT",
"optional": true
},
"node_modules/nanomatch": {
@@ -2871,6 +3039,7 @@
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -2893,6 +3062,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -2906,6 +3076,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -2914,42 +3085,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/nanomatch/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nanomatch/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/nanomatch/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/nanomatch/node_modules/is-extendable": {
@@ -2957,6 +3104,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -2969,6 +3117,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -2981,6 +3130,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2989,13 +3139,15 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
@@ -3008,6 +3160,7 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3017,6 +3170,7 @@
"resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
"integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"once": "^1.3.2"
},
@@ -3029,6 +3183,7 @@
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3038,6 +3193,7 @@
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
"integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"copy-descriptor": "^0.1.0",
"define-property": "^0.2.5",
@@ -3052,6 +3208,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5"
},
@@ -3064,6 +3221,7 @@
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
}
@@ -3073,6 +3231,7 @@
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
"integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.0"
},
@@ -3081,13 +3240,14 @@
}
},
"node_modules/object.assign": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
- "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
"has-symbols": "^1.0.3",
"object-keys": "^1.1.1"
},
@@ -3103,6 +3263,7 @@
"resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
"integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-each": "^1.0.1",
"array-slice": "^1.0.0",
@@ -3118,6 +3279,7 @@
"resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
"integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"for-own": "^1.0.0",
"make-iterator": "^1.0.0"
@@ -3131,6 +3293,7 @@
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -3143,6 +3306,7 @@
"resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
"integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"for-own": "^1.0.0",
"make-iterator": "^1.0.0"
@@ -3156,6 +3320,7 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"wrappy": "1"
}
@@ -3165,6 +3330,7 @@
"resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
"integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-stream": "^2.0.1"
}
@@ -3174,6 +3340,7 @@
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
"integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lcid": "^1.0.0"
},
@@ -3186,6 +3353,7 @@
"resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
"integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"aggregate-error": "^3.0.0"
},
@@ -3201,6 +3369,7 @@
"resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
"integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-absolute": "^1.0.0",
"map-cache": "^0.2.0",
@@ -3215,6 +3384,7 @@
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
"integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"error-ex": "^1.2.0"
},
@@ -3227,6 +3397,7 @@
"resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
"integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -3236,6 +3407,7 @@
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
"integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3245,6 +3417,7 @@
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
"integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3253,13 +3426,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
"integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/path-exists": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
"integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pinkie-promise": "^2.0.0"
},
@@ -3272,6 +3447,7 @@
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3280,13 +3456,15 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/path-root": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
"integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-root-regex": "^0.1.0"
},
@@ -3299,6 +3477,7 @@
"resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
"integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3308,21 +3487,24 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8.6"
},
@@ -3335,6 +3517,7 @@
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3344,6 +3527,7 @@
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
"integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3353,6 +3537,7 @@
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pinkie": "^2.0.0"
},
@@ -3365,6 +3550,7 @@
"resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
"integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-colors": "^1.0.1",
"arr-diff": "^4.0.0",
@@ -3380,6 +3566,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -3393,6 +3580,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -3405,6 +3593,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -3418,6 +3607,7 @@
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
"deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1",
"dev": true,
+ "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
@@ -3428,6 +3618,7 @@
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
"integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3437,6 +3628,7 @@
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
"integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -3445,13 +3637,15 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/pump": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
"integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -3462,6 +3656,7 @@
"resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
"integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"duplexify": "^3.6.0",
"inherits": "^2.0.3",
@@ -3486,13 +3681,15 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
"integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"load-json-file": "^1.0.0",
"normalize-package-data": "^2.3.2",
@@ -3507,6 +3704,7 @@
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
"integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-up": "^1.0.0",
"read-pkg": "^1.0.0"
@@ -3520,6 +3718,7 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
"integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.2",
"pify": "^2.0.0",
@@ -3534,6 +3733,7 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -3549,6 +3749,7 @@
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
"integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.11",
"micromatch": "^3.1.10",
@@ -3563,6 +3764,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -3576,6 +3778,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -3584,42 +3787,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/readdirp/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/readdirp/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/readdirp/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/readdirp/node_modules/is-extendable": {
@@ -3627,6 +3806,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -3639,6 +3819,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -3651,6 +3832,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3660,6 +3842,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -3696,6 +3879,7 @@
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend-shallow": "^3.0.2",
"safe-regex": "^1.1.0"
@@ -3709,6 +3893,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -3722,6 +3907,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -3734,6 +3920,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -3746,6 +3933,7 @@
"resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
"integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5",
"is-utf8": "^0.2.1"
@@ -3759,6 +3947,7 @@
"resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
"integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"remove-bom-buffer": "^3.0.0",
"safe-buffer": "^5.1.0",
@@ -3772,13 +3961,15 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/repeat-element": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
"integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3788,6 +3979,7 @@
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
"integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10"
}
@@ -3797,6 +3989,7 @@
"resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
"integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 10"
}
@@ -3806,6 +3999,7 @@
"resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
"integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"homedir-polyfill": "^1.0.1",
"is-absolute": "^1.0.0",
@@ -3820,6 +4014,7 @@
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3828,13 +4023,15 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
"integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/resolve": {
- "version": "1.22.4",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
- "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@@ -3852,6 +4049,7 @@
"resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
"integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expand-tilde": "^2.0.0",
"global-modules": "^1.0.0"
@@ -3865,6 +4063,7 @@
"resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
"integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"value-or-function": "^3.0.0"
},
@@ -3877,13 +4076,15 @@
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
"integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
"deprecated": "https://github.com/lydell/resolve-url#deprecated",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12"
}
@@ -3893,6 +4094,7 @@
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true,
+ "license": "MIT",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -3902,7 +4104,9 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
+ "license": "ISC",
"dependencies": {
"glob": "^7.1.3"
},
@@ -3932,6 +4136,7 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
@@ -3940,13 +4145,15 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/safe-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ret": "~0.1.10"
}
@@ -3956,6 +4163,7 @@
"resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz",
"integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -3973,6 +4181,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -3986,6 +4195,7 @@
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -3994,12 +4204,13 @@
}
},
"node_modules/sass/node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@@ -4010,6 +4221,7 @@
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -4030,10 +4242,11 @@
}
},
"node_modules/sass/node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -4047,6 +4260,7 @@
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -4060,6 +4274,7 @@
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
},
@@ -4072,6 +4287,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
@@ -4081,6 +4297,7 @@
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -4093,6 +4310,7 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -4105,6 +4323,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver"
}
@@ -4114,6 +4333,7 @@
"resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz",
"integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"sver-compat": "^1.5.0"
},
@@ -4125,13 +4345,33 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
},
"node_modules/set-value": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
"integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend-shallow": "^2.0.1",
"is-extendable": "^0.1.1",
@@ -4147,6 +4387,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -4159,6 +4400,7 @@
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -4168,6 +4410,7 @@
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"base": "^0.11.1",
"debug": "^2.2.0",
@@ -4187,6 +4430,7 @@
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"define-property": "^1.0.0",
"isobject": "^3.0.0",
@@ -4201,6 +4445,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.0"
},
@@ -4208,51 +4453,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/snapdragon-node/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/snapdragon-util": {
@@ -4260,6 +4472,7 @@
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kind-of": "^3.2.0"
},
@@ -4272,6 +4485,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5"
},
@@ -4284,15 +4498,17 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -4303,6 +4519,7 @@
"integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
"deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
"dev": true,
+ "license": "MIT",
"dependencies": {
"atob": "^2.1.2",
"decode-uri-component": "^0.2.0",
@@ -4316,13 +4533,15 @@
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
"integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
"deprecated": "See https://github.com/lydell/source-map-url#deprecated",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/sparkles": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
"integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -4332,38 +4551,43 @@
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
"integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"node_modules/spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "dev": true,
+ "license": "CC-BY-3.0"
},
"node_modules/spdx-expression-parse": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.13",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
- "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
- "dev": true
+ "version": "3.0.18",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+ "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
+ "dev": true,
+ "license": "CC0-1.0"
},
"node_modules/split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend-shallow": "^3.0.0"
},
@@ -4376,6 +4600,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -4389,6 +4614,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -4401,6 +4627,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -4413,6 +4640,7 @@
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
"integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "*"
}
@@ -4422,6 +4650,7 @@
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
"integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"define-property": "^0.2.5",
"object-copy": "^0.1.0"
@@ -4434,19 +4663,22 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
"integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
+ "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
@@ -4456,6 +4688,7 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -4470,6 +4703,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4479,6 +4713,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^2.0.0"
},
@@ -4491,6 +4726,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -4503,6 +4739,7 @@
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
"integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-utf8": "^0.2.0"
},
@@ -4515,6 +4752,7 @@
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -4527,6 +4765,7 @@
"resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz",
"integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"es6-iterator": "^2.0.1",
"es6-symbol": "^3.1.1"
@@ -4537,6 +4776,7 @@
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
@@ -4547,6 +4787,7 @@
"resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
"integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"through2": "~2.0.0",
"xtend": "~4.0.0"
@@ -4557,6 +4798,7 @@
"resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
"integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4566,6 +4808,7 @@
"resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
"integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-absolute": "^1.0.0",
"is-negated-glob": "^1.0.0"
@@ -4579,6 +4822,7 @@
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
"integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kind-of": "^3.0.2"
},
@@ -4591,6 +4835,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5"
},
@@ -4603,6 +4848,7 @@
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
@@ -4618,6 +4864,7 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
"integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
@@ -4631,6 +4878,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -4644,6 +4892,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -4652,42 +4901,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/to-regex/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-regex/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/to-regex/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/to-regex/node_modules/is-extendable": {
@@ -4695,6 +4920,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -4707,6 +4933,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -4714,20 +4941,12 @@
"node": ">=0.10.0"
}
},
- "node_modules/to-regex/node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/to-through": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
"integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"through2": "^2.0.3"
},
@@ -4736,22 +4955,25 @@
}
},
"node_modules/type": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
- "dev": true
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
+ "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/unc-path-regex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
"integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4761,6 +4983,7 @@
"resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz",
"integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-flatten": "^1.0.1",
"arr-map": "^2.0.0",
@@ -4782,6 +5005,7 @@
"resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz",
"integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -4791,6 +5015,7 @@
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
"integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
@@ -4806,6 +5031,7 @@
"resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
"integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"json-stable-stringify-without-jsonify": "^1.0.1",
"through2-filter": "^3.0.0"
@@ -4816,6 +5042,7 @@
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
"integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-value": "^0.3.1",
"isobject": "^3.0.0"
@@ -4829,6 +5056,7 @@
"resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
"integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"get-value": "^2.0.3",
"has-values": "^0.1.4",
@@ -4843,6 +5071,7 @@
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
"integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isarray": "1.0.0"
},
@@ -4855,6 +5084,7 @@
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
"integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4864,6 +5094,7 @@
"resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
"integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4",
"yarn": "*"
@@ -4874,13 +5105,15 @@
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
"integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
"deprecated": "Please see https://github.com/lydell/urix#deprecated",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4889,13 +5122,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/v8flags": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
"integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"homedir-polyfill": "^1.0.1"
},
@@ -4908,6 +5143,7 @@
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
@@ -4918,6 +5154,7 @@
"resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
"integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -4927,6 +5164,7 @@
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
"integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"clone": "^2.1.1",
"clone-buffer": "^1.0.0",
@@ -4944,6 +5182,7 @@
"resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
"integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fs-mkdirp-stream": "^1.0.0",
"glob-stream": "^6.1.0",
@@ -4972,6 +5211,7 @@
"resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
"integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"append-buffer": "^1.0.2",
"convert-source-map": "^1.5.0",
@@ -4990,6 +5230,7 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"remove-trailing-separator": "^1.0.1"
},
@@ -5002,6 +5243,7 @@
"resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
"integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"source-map": "^0.5.1"
}
@@ -5011,6 +5253,7 @@
"resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
"integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -5020,6 +5263,7 @@
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -5031,13 +5275,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
"integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/wrap-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1"
@@ -5051,6 +5297,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -5060,6 +5307,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^2.0.0"
},
@@ -5071,13 +5319,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.4"
}
@@ -5086,13 +5336,15 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
"integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/yargs": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz",
"integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"camelcase": "^3.0.0",
"cliui": "^3.2.0",
@@ -5114,6 +5366,7 @@
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz",
"integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"camelcase": "^3.0.0",
"object.assign": "^4.1.0"
diff --git a/src/Admin/package-lock.json b/src/Admin/package-lock.json
index fdf962640..ac3cd03c5 100644
--- a/src/Admin/package-lock.json
+++ b/src/Admin/package-lock.json
@@ -26,6 +26,7 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -39,6 +40,7 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
@@ -48,6 +50,7 @@
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -61,6 +64,7 @@
"resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz",
"integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"clean-stack": "^2.0.0",
"indent-string": "^4.0.0"
@@ -74,6 +78,7 @@
"resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
"integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-wrap": "^0.1.0"
},
@@ -86,6 +91,7 @@
"resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
"integrity": "sha512-HrgGIZUl8h2EHuZaU9hTR/cU5nhKxpVE1V6kdGsQ8e4zirElJ5fvtfc8N7Q1oq1aatO275i8pUFUCpNWCAnVWw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-wrap": "0.1.0"
},
@@ -98,6 +104,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -107,6 +114,7 @@
"resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
"integrity": "sha512-ZyznvL8k/FZeQHr2T6LzcJ/+vBApDnMNZvfVFy3At0knswWd6rJ3/0Hhmpu8oqa6C92npmozs890sX9Dl6q+Qw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -116,6 +124,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
"integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"micromatch": "^3.1.4",
"normalize-path": "^2.1.1"
@@ -126,6 +135,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -139,6 +149,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -147,42 +158,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/anymatch/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/anymatch/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/anymatch/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/anymatch/node_modules/is-extendable": {
@@ -190,6 +177,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -202,6 +190,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -214,6 +203,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -223,6 +213,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -247,6 +238,7 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"remove-trailing-separator": "^1.0.1"
},
@@ -259,6 +251,7 @@
"resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
"integrity": "sha512-WLbYiXzD3y/ATLZFufV/rZvWdZOs+Z/+5v1rBZ463Jn398pa6kcde27cvozYnBoxXblGZTFfoPpsaEw0orU5BA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"buffer-equal": "^1.0.0"
},
@@ -270,13 +263,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
"integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/arr-diff": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
"integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -286,6 +281,7 @@
"resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
"integrity": "sha512-A2BETWCqhsecSvCkWAeVBFLH6sXEUGASuzkpjL3GR1SlL/PWL6M3J8EAAld2Uubmh39tvkJTqC9LeLHCUKmFXA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"make-iterator": "^1.0.0"
},
@@ -298,6 +294,7 @@
"resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
"integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -307,6 +304,7 @@
"resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
"integrity": "sha512-tVqVTHt+Q5Xb09qRkbu+DidW1yYzz5izWS2Xm2yFm7qJnmUfz4HPzNxbHkdRJbz2lrqI7S+z17xNYdFcBBO8Hw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"make-iterator": "^1.0.0"
},
@@ -319,6 +317,7 @@
"resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
"integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -328,6 +327,7 @@
"resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
"integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -337,6 +337,7 @@
"resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
"integrity": "sha512-BC4Yl89vneCYfpLrs5JU2aAu9/a+xWbeKhvISg9PT7eWFB9UlRvI+rKEtk6mgxWr3dSkk9gQ8hCrdqt06NXPdw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-slice": "^1.0.0",
"is-number": "^4.0.0"
@@ -350,6 +351,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
"integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -359,6 +361,7 @@
"resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
"integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^4.0.0"
},
@@ -371,6 +374,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
"integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -380,6 +384,7 @@
"resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
"integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -389,6 +394,7 @@
"resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
"integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"default-compare": "^1.0.0",
"get-value": "^2.0.6",
@@ -403,6 +409,7 @@
"resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
"integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -412,6 +419,7 @@
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
"integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -421,6 +429,7 @@
"resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
"integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -430,6 +439,7 @@
"resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz",
"integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.2",
@@ -450,13 +460,15 @@
"type": "individual",
"url": "https://paulmillr.com/funding/"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/async-settle": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
"integrity": "sha512-VPXfB4Vk49z1LHHodrEQ6Xf7W4gg1w0dAPROHngx7qgDjqmIQ+fXmwgGXTW/ITLai0YLSvWepJOP9EVpMnEAcw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"async-done": "^1.2.2"
},
@@ -469,6 +481,7 @@
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true,
+ "license": "(MIT OR Apache-2.0)",
"bin": {
"atob": "bin/atob.js"
},
@@ -481,6 +494,7 @@
"resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
"integrity": "sha512-bZOOfCb3gXBXbTFXq3OZtGR88LwGeJvzu6szttaIzymOTS4ZttBNOWSv7aLZja2EMycKtRYV0Oa8SNKH/zkxvg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-filter": "^1.1.1",
"arr-flatten": "^1.0.1",
@@ -500,13 +514,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
"integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/base": {
"version": "0.11.2",
"resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
"integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cache-base": "^1.0.1",
"class-utils": "^0.3.5",
@@ -525,6 +541,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.0"
},
@@ -532,51 +549,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/base/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/base/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/base/node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/binary-extensions": {
@@ -584,6 +568,7 @@
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
"integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -593,6 +578,7 @@
"resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
"integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
"dev": true,
+ "license": "MIT",
"optional": true,
"dependencies": {
"file-uri-to-path": "1.0.0"
@@ -613,6 +599,7 @@
"url": "https://opencollective.com/bootstrap"
}
],
+ "license": "MIT",
"peerDependencies": {
"jquery": "1.9.1 - 3",
"popper.js": "^1.16.1"
@@ -623,6 +610,7 @@
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
@@ -633,6 +621,7 @@
"resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
"integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-flatten": "^1.1.0",
"array-unique": "^0.3.2",
@@ -654,6 +643,7 @@
"resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.1.tgz",
"integrity": "sha512-QoV3ptgEaQpvVwbXdSO39iqPQTCxSF7A5U99AxbHYqUdCizL/lH2Z0A2y6nbZucxMEOtNyZfG2s6gsVugGpKkg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.4"
},
@@ -665,13 +655,15 @@
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
"integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cache-base": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
"integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"collection-visit": "^1.0.0",
"component-emitter": "^1.2.1",
@@ -688,13 +680,20 @@
}
},
"node_modules/call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz",
+ "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "set-function-length": "^1.2.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -705,6 +704,7 @@
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
"integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -715,6 +715,7 @@
"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
"deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
"dev": true,
+ "license": "MIT",
"dependencies": {
"anymatch": "^2.0.0",
"async-each": "^1.0.1",
@@ -737,6 +738,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
@@ -747,6 +749,7 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.0"
},
@@ -759,6 +762,7 @@
"resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
"integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-union": "^3.1.0",
"define-property": "^0.2.5",
@@ -774,6 +778,7 @@
"resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
"integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -783,6 +788,7 @@
"resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
"integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1",
@@ -794,6 +800,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -803,6 +810,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^2.0.0"
},
@@ -815,6 +823,7 @@
"resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
"integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.8"
}
@@ -824,6 +833,7 @@
"resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
"integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -832,13 +842,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
"integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/cloneable-readable": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
"integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.1",
"process-nextick-args": "^2.0.0",
@@ -850,6 +862,7 @@
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
"integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -859,6 +872,7 @@
"resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz",
"integrity": "sha512-5D2XXSpkOnleOI21TG7p3T0bGAsZ/XknZpKBmGYyluO8pw4zA3K8ZlrBIbC4FXg3m6z/RNFiUFfT2sQK01+UHA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-map": "^2.0.2",
"for-own": "^1.0.0",
@@ -873,6 +887,7 @@
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
"integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"map-visit": "^1.0.0",
"object-visit": "^1.0.0"
@@ -886,21 +901,27 @@
"resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
"integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
"dev": true,
+ "license": "ISC",
"bin": {
"color-support": "bin.js"
}
},
"node_modules/component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz",
+ "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
},
"node_modules/concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/concat-stream": {
"version": "1.6.2",
@@ -910,6 +931,7 @@
"engines": [
"node >= 0.8"
],
+ "license": "MIT",
"dependencies": {
"buffer-from": "^1.0.0",
"inherits": "^2.0.3",
@@ -921,13 +943,15 @@
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz",
"integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/copy-descriptor": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
"integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -937,6 +961,7 @@
"resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz",
"integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"each-props": "^1.3.2",
"is-plain-object": "^5.0.0"
@@ -946,16 +971,21 @@
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/d": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
- "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz",
+ "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "es5-ext": "^0.10.50",
- "type": "^1.0.1"
+ "es5-ext": "^0.10.64",
+ "type": "^2.7.2"
+ },
+ "engines": {
+ "node": ">=0.12"
}
},
"node_modules/debug": {
@@ -963,6 +993,7 @@
"resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
"integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ms": "2.0.0"
}
@@ -972,6 +1003,7 @@
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -981,6 +1013,7 @@
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz",
"integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10"
}
@@ -990,6 +1023,7 @@
"resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
"integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kind-of": "^5.0.2"
},
@@ -1002,16 +1036,37 @@
"resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
"integrity": "sha512-2xaP6GiwVwOEbXCGoJ4ufgC76m8cj805jrghScewJC2ZDsb9U0b4BIrba+xt/Uytyd0HvQ6+WymSRTfnYj59GQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
},
- "node_modules/define-properties": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz",
- "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==",
+ "node_modules/define-data-property": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz",
+ "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
+ "es-define-property": "^1.0.0",
+ "es-errors": "^1.3.0",
+ "gopd": "^1.0.1"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/define-properties": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz",
+ "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.0.1",
"has-property-descriptors": "^1.0.0",
"object-keys": "^1.1.1"
},
@@ -1027,6 +1082,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
"integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^0.1.0"
},
@@ -1039,6 +1095,7 @@
"resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz",
"integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"globby": "^11.0.1",
"graceful-fs": "^4.2.4",
@@ -1061,6 +1118,7 @@
"resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
"integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1070,6 +1128,7 @@
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-type": "^4.0.0"
},
@@ -1082,6 +1141,7 @@
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
"integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"end-of-stream": "^1.0.0",
"inherits": "^2.0.1",
@@ -1094,6 +1154,7 @@
"resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
"integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.1",
"object.defaults": "^1.1.0"
@@ -1104,6 +1165,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -1116,6 +1178,7 @@
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"once": "^1.4.0"
}
@@ -1125,19 +1188,45 @@
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
"integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-arrayish": "^0.2.1"
}
},
+ "node_modules/es-define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz",
+ "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.2.4"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
+ "node_modules/es-errors": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",
+ "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/es5-ext": {
- "version": "0.10.62",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz",
- "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==",
+ "version": "0.10.64",
+ "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz",
+ "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==",
"dev": true,
"hasInstallScript": true,
+ "license": "ISC",
"dependencies": {
"es6-iterator": "^2.0.3",
"es6-symbol": "^3.1.3",
+ "esniff": "^2.0.1",
"next-tick": "^1.1.0"
},
"engines": {
@@ -1149,6 +1238,7 @@
"resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
"integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"d": "1",
"es5-ext": "^0.10.35",
@@ -1156,13 +1246,17 @@
}
},
"node_modules/es6-symbol": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
- "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
+ "version": "3.1.4",
+ "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz",
+ "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==",
"dev": true,
+ "license": "ISC",
"dependencies": {
- "d": "^1.0.1",
- "ext": "^1.1.2"
+ "d": "^1.0.2",
+ "ext": "^1.7.0"
+ },
+ "engines": {
+ "node": ">=0.12"
}
},
"node_modules/es6-weak-map": {
@@ -1170,6 +1264,7 @@
"resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
"integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"d": "1",
"es5-ext": "^0.10.46",
@@ -1177,11 +1272,39 @@
"es6-symbol": "^3.1.1"
}
},
+ "node_modules/esniff": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz",
+ "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==",
+ "dev": true,
+ "license": "ISC",
+ "dependencies": {
+ "d": "^1.0.1",
+ "es5-ext": "^0.10.62",
+ "event-emitter": "^0.3.5",
+ "type": "^2.7.2"
+ },
+ "engines": {
+ "node": ">=0.10"
+ }
+ },
+ "node_modules/event-emitter": {
+ "version": "0.3.5",
+ "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
+ "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "d": "1",
+ "es5-ext": "~0.10.14"
+ }
+ },
"node_modules/expand-brackets": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
"integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"debug": "^2.3.3",
"define-property": "^0.2.5",
@@ -1200,6 +1323,7 @@
"resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
"integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"homedir-polyfill": "^1.0.1"
},
@@ -1212,27 +1336,24 @@
"resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz",
"integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"type": "^2.7.2"
}
},
- "node_modules/ext/node_modules/type": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz",
- "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==",
- "dev": true
- },
"node_modules/extend": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
"integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/extend-shallow": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
"integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extendable": "^0.1.0"
},
@@ -1245,6 +1366,7 @@
"resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
"integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-unique": "^0.3.2",
"define-property": "^1.0.0",
@@ -1264,6 +1386,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.0"
},
@@ -1271,51 +1394,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/extglob/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/extglob/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/extglob/node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/fancy-log": {
@@ -1323,6 +1413,7 @@
"resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
"integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-gray": "^0.1.1",
"color-support": "^1.1.3",
@@ -1334,10 +1425,11 @@
}
},
"node_modules/fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
+ "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -1353,13 +1445,15 @@
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz",
"integrity": "sha512-Ia0sQNrMPXXkqVFt6w6M1n1oKo3NfKs+mvaV811Jwir7vAk9a6PVV9VPYf6X3BU97QiLEmuW3uXH9u87zDFfdw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "version": "1.17.1",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz",
+ "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"reusify": "^1.0.4"
}
@@ -1369,6 +1463,7 @@
"resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
"integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
"dev": true,
+ "license": "MIT",
"optional": true
},
"node_modules/fill-range": {
@@ -1376,6 +1471,7 @@
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
"integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend-shallow": "^2.0.1",
"is-number": "^3.0.0",
@@ -1391,6 +1487,7 @@
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
"integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-exists": "^2.0.0",
"pinkie-promise": "^2.0.0"
@@ -1404,6 +1501,7 @@
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
"integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"detect-file": "^1.0.0",
"is-glob": "^4.0.0",
@@ -1419,6 +1517,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -1432,6 +1531,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -1440,42 +1540,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/findup-sync/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/findup-sync/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/findup-sync/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/findup-sync/node_modules/is-extendable": {
@@ -1483,6 +1559,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -1495,6 +1572,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -1507,6 +1585,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1516,6 +1595,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -1540,6 +1620,7 @@
"resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
"integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expand-tilde": "^2.0.2",
"is-plain-object": "^2.0.3",
@@ -1556,6 +1637,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -1568,6 +1650,7 @@
"resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
"integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -1577,6 +1660,7 @@
"resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
"integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"inherits": "^2.0.3",
"readable-stream": "^2.3.6"
@@ -1587,6 +1671,7 @@
"resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz",
"integrity": "sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==",
"dev": true,
+ "license": "(OFL-1.1 AND MIT)",
"engines": {
"node": ">=0.10.3"
}
@@ -1596,6 +1681,7 @@
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
"integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1605,6 +1691,7 @@
"resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
"integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"for-in": "^1.0.1"
},
@@ -1617,6 +1704,7 @@
"resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
"integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"map-cache": "^0.2.2"
},
@@ -1629,6 +1717,7 @@
"resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
"integrity": "sha512-+vSd9frUnapVC2RZYfL3FCB2p3g4TBhaUmrsWlSudsGdnxIuUvBB2QM1VZeBtc49QFwrp+wQLrDs3+xxDgI5gQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.11",
"through2": "^2.0.3"
@@ -1641,7 +1730,8 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/fsevents": {
"version": "1.2.13",
@@ -1650,6 +1740,7 @@
"deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2",
"dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -1663,27 +1754,37 @@
}
},
"node_modules/function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
+ "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
},
"node_modules/get-caller-file": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
"integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/get-intrinsic": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz",
- "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==",
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz",
+ "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
"has-proto": "^1.0.1",
- "has-symbols": "^1.0.3"
+ "has-symbols": "^1.0.3",
+ "hasown": "^2.0.0"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
@@ -1694,6 +1795,7 @@
"resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
"integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -1702,7 +1804,9 @@
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
+ "license": "ISC",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
@@ -1723,6 +1827,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -1735,6 +1840,7 @@
"resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
"integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend": "^3.0.0",
"glob": "^7.1.1",
@@ -1756,6 +1862,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
"integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^3.1.0",
"path-dirname": "^1.0.0"
@@ -1766,6 +1873,7 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.0"
},
@@ -1778,6 +1886,7 @@
"resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz",
"integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"anymatch": "^2.0.0",
"async-done": "^1.2.0",
@@ -1796,6 +1905,7 @@
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
"integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"global-prefix": "^1.0.1",
"is-windows": "^1.0.1",
@@ -1810,6 +1920,7 @@
"resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
"integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expand-tilde": "^2.0.2",
"homedir-polyfill": "^1.0.1",
@@ -1826,6 +1937,7 @@
"resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
"integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-union": "^2.1.0",
"dir-glob": "^3.0.1",
@@ -1846,6 +1958,7 @@
"resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
"integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"sparkles": "^1.0.0"
},
@@ -1853,17 +1966,32 @@
"node": ">= 0.10"
}
},
+ "node_modules/gopd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz",
+ "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "get-intrinsic": "^1.1.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
"node_modules/graceful-fs": {
"version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/gulp": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
"integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"glob-watcher": "^5.0.3",
"gulp-cli": "^2.2.0",
@@ -1882,6 +2010,7 @@
"resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz",
"integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-colors": "^1.0.1",
"archy": "^1.0.0",
@@ -1914,6 +2043,7 @@
"resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.1.0.tgz",
"integrity": "sha512-7VT0uaF+VZCmkNBglfe1b34bxn/AfcssquLKVDYnCDJ3xNBaW7cUuI3p3BQmoKcoKFrs9jdzUxyb+u+NGfL4OQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lodash.clonedeep": "^4.5.0",
"picocolors": "^1.0.0",
@@ -1931,6 +2061,7 @@
"resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
"integrity": "sha512-hm6N8nrm3Y08jXie48jsC55eCZz9mnb4OirAStEk2deqeyhXU3C1otDVh+ccttMuc1sBi6RX6ZJ720hs9RCvgw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"glogg": "^1.0.0"
},
@@ -1938,35 +2069,25 @@
"node": ">= 0.10"
}
},
- "node_modules/has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "dependencies": {
- "function-bind": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4.0"
- }
- },
"node_modules/has-property-descriptors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz",
- "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==",
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz",
+ "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "get-intrinsic": "^1.1.1"
+ "es-define-property": "^1.0.0"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/has-proto": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz",
- "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz",
+ "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -1979,6 +2100,7 @@
"resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
"integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -1991,6 +2113,7 @@
"resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
"integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"get-value": "^2.0.6",
"has-values": "^1.0.0",
@@ -2005,6 +2128,7 @@
"resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
"integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^3.0.0",
"kind-of": "^4.0.0"
@@ -2018,6 +2142,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
"integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5"
},
@@ -2025,11 +2150,25 @@
"node": ">=0.10.0"
}
},
+ "node_modules/hasown": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+ "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "function-bind": "^1.1.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
+ },
"node_modules/homedir-polyfill": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
"integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"parse-passwd": "^1.0.0"
},
@@ -2041,28 +2180,32 @@
"version": "2.8.9",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
"integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz",
+ "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 4"
}
},
"node_modules/immutable": {
- "version": "4.3.2",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.2.tgz",
- "integrity": "sha512-oGXzbEDem9OOpDWZu88jGiYCvIsLHMvGw+8OXlpsvTFvIQplQbjg1B1cvKg8f7Hoch6+NGjpPsH1Fr+Mc2D1aA==",
- "dev": true
+ "version": "4.3.6",
+ "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz",
+ "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/indent-string": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
"integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2071,7 +2214,9 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
"dev": true,
+ "license": "ISC",
"dependencies": {
"once": "^1.3.0",
"wrappy": "1"
@@ -2081,19 +2226,22 @@
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/interpret": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
"integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -2103,6 +2251,7 @@
"resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
"integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2112,6 +2261,7 @@
"resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
"integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-relative": "^1.0.0",
"is-windows": "^1.0.1"
@@ -2121,40 +2271,31 @@
}
},
"node_modules/is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz",
+ "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "kind-of": "^3.0.2"
+ "hasown": "^2.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-accessor-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.10"
}
},
"node_modules/is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/is-binary-path": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
"integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"binary-extensions": "^1.0.0"
},
@@ -2166,56 +2307,50 @@
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/is-core-module": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
- "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz",
+ "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "has": "^1.0.3"
+ "hasown": "^2.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
},
"funding": {
"url": "https://github.com/sponsors/ljharb"
}
},
"node_modules/is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==",
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz",
+ "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "kind-of": "^3.0.2"
+ "hasown": "^2.0.0"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-data-descriptor/node_modules/kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
- "dev": true,
- "dependencies": {
- "is-buffer": "^1.1.5"
- },
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz",
+ "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/is-extendable": {
@@ -2223,6 +2358,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
"integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2232,6 +2368,7 @@
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2241,6 +2378,7 @@
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
"integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"number-is-nan": "^1.0.0"
},
@@ -2253,6 +2391,7 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.1"
},
@@ -2265,6 +2404,7 @@
"resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
"integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2274,6 +2414,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
"integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kind-of": "^3.0.2"
},
@@ -2286,6 +2427,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5"
},
@@ -2298,6 +2440,7 @@
"resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz",
"integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=6"
}
@@ -2307,6 +2450,7 @@
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -2316,6 +2460,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
"integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2325,6 +2470,7 @@
"resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
"integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-unc-path": "^1.0.0"
},
@@ -2337,6 +2483,7 @@
"resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
"integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"unc-path-regex": "^0.1.2"
},
@@ -2348,13 +2495,15 @@
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
"integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/is-valid-glob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
"integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2364,6 +2513,7 @@
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2372,19 +2522,22 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/isobject": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
"integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2393,25 +2546,29 @@
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/json-stable-stringify-without-jsonify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/just-debounce": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz",
"integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/kind-of": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
"integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2421,6 +2578,7 @@
"resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
"integrity": "sha512-U/VxvpX4N/rFvPzr3qG5EtLKEnNI0emvIQB3/ecEwv+8GHaUKbIB8vxv1Oai5FAF0d0r7LXHhLLe5K/yChm5GQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"default-resolution": "^2.0.0",
"es6-weak-map": "^2.0.1"
@@ -2434,6 +2592,7 @@
"resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
"integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-stream": "^2.0.5"
},
@@ -2446,6 +2605,7 @@
"resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
"integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"invert-kv": "^1.0.0"
},
@@ -2458,6 +2618,7 @@
"resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
"integrity": "sha512-IpSVCk9AYvLHo5ctcIXxOBpMWUe+4TKN3VPWAKUbJikkmsGp0VrSM8IttVc32D6J4WUsiPE6aEFRNmIoF/gdow==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flush-write-stream": "^1.0.2"
},
@@ -2470,6 +2631,7 @@
"resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
"integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend": "^3.0.0",
"findup-sync": "^3.0.0",
@@ -2489,6 +2651,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -2501,6 +2664,7 @@
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.2",
"parse-json": "^2.2.0",
@@ -2516,13 +2680,15 @@
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
"integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/make-iterator": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
"integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kind-of": "^6.0.2"
},
@@ -2535,6 +2701,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2544,6 +2711,7 @@
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
"integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2553,6 +2721,7 @@
"resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
"integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"object-visit": "^1.0.0"
},
@@ -2565,6 +2734,7 @@
"resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
"integrity": "sha512-LFgVbaHIHMqCRuCZyfCtUOq9/Lnzhi7Z0KFUE2fhD54+JN2jLh3hC02RLkqauJ3U4soU6H1J3tfj/Byk7GoEjA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"findup-sync": "^2.0.0",
"micromatch": "^3.0.4",
@@ -2580,6 +2750,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -2593,6 +2764,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -2606,6 +2778,7 @@
"resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
"integrity": "sha512-vs+3unmJT45eczmcAZ6zMJtxN3l/QXeccaXQx5cu/MeJMhewVfoWZqibRkOxPnmoR59+Zy5hjabfQc6JLSah4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"detect-file": "^1.0.0",
"is-glob": "^3.1.0",
@@ -2616,42 +2789,18 @@
"node": ">= 0.10"
}
},
- "node_modules/matchdep/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/matchdep/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/matchdep/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/matchdep/node_modules/is-extendable": {
@@ -2659,6 +2808,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -2671,6 +2821,7 @@
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-extglob": "^2.1.0"
},
@@ -2683,6 +2834,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -2695,6 +2847,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2704,6 +2857,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -2727,24 +2881,27 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 8"
}
},
"node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "version": "4.0.7",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz",
+ "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "braces": "^3.0.2",
+ "braces": "^3.0.3",
"picomatch": "^2.3.1"
},
"engines": {
@@ -2752,22 +2909,24 @@
}
},
"node_modules/micromatch/node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
}
},
"node_modules/micromatch/node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -2780,6 +2939,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
@@ -2789,6 +2949,7 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -2801,6 +2962,7 @@
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"brace-expansion": "^1.1.7"
},
@@ -2813,6 +2975,7 @@
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
"integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"for-in": "^1.0.2",
"is-extendable": "^1.0.1"
@@ -2826,6 +2989,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -2838,6 +3002,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -2849,22 +3014,25 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/mute-stdout": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
"integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
},
"node_modules/nan": {
- "version": "2.17.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
- "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+ "version": "2.20.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.20.0.tgz",
+ "integrity": "sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==",
"dev": true,
+ "license": "MIT",
"optional": true
},
"node_modules/nanomatch": {
@@ -2872,6 +3040,7 @@
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
"integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -2894,6 +3063,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -2907,6 +3077,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -2915,42 +3086,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/nanomatch/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nanomatch/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/nanomatch/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/nanomatch/node_modules/is-extendable": {
@@ -2958,6 +3105,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -2970,6 +3118,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -2982,6 +3131,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -2990,13 +3140,15 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz",
"integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/normalize-package-data": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
"integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"hosted-git-info": "^2.1.4",
"resolve": "^1.10.0",
@@ -3009,6 +3161,7 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3018,6 +3171,7 @@
"resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
"integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"once": "^1.3.2"
},
@@ -3030,6 +3184,7 @@
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
"integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3039,6 +3194,7 @@
"resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
"integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"copy-descriptor": "^0.1.0",
"define-property": "^0.2.5",
@@ -3053,6 +3209,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5"
},
@@ -3065,6 +3222,7 @@
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
"integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
}
@@ -3074,6 +3232,7 @@
"resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
"integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.0"
},
@@ -3082,13 +3241,14 @@
}
},
"node_modules/object.assign": {
- "version": "4.1.4",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz",
- "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==",
+ "version": "4.1.5",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz",
+ "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.4",
+ "call-bind": "^1.0.5",
+ "define-properties": "^1.2.1",
"has-symbols": "^1.0.3",
"object-keys": "^1.1.1"
},
@@ -3104,6 +3264,7 @@
"resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
"integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-each": "^1.0.1",
"array-slice": "^1.0.0",
@@ -3119,6 +3280,7 @@
"resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
"integrity": "sha512-3+mAJu2PLfnSVGHwIWubpOFLscJANBKuB/6A4CxBstc4aqwQY0FWcsppuy4jU5GSB95yES5JHSI+33AWuS4k6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"for-own": "^1.0.0",
"make-iterator": "^1.0.0"
@@ -3132,6 +3294,7 @@
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -3144,6 +3307,7 @@
"resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
"integrity": "sha512-naLhxxpUESbNkRqc35oQ2scZSJueHGQNUfMW/0U37IgN6tE2dgDWg3whf+NEliy3F/QysrO48XKUz/nGPe+AQw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"for-own": "^1.0.0",
"make-iterator": "^1.0.0"
@@ -3157,6 +3321,7 @@
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"wrappy": "1"
}
@@ -3166,6 +3331,7 @@
"resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
"integrity": "sha512-Z87aSjx3r5c0ZB7bcJqIgIRX5bxR7A4aSzvIbaxd0oTkWBCOoKfuGHiKj60CHVUgg1Phm5yMZzBdt8XqRs73Mw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-stream": "^2.0.1"
}
@@ -3175,6 +3341,7 @@
"resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
"integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"lcid": "^1.0.0"
},
@@ -3187,6 +3354,7 @@
"resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz",
"integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"aggregate-error": "^3.0.0"
},
@@ -3202,6 +3370,7 @@
"resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
"integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-absolute": "^1.0.0",
"map-cache": "^0.2.0",
@@ -3216,6 +3385,7 @@
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
"integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"error-ex": "^1.2.0"
},
@@ -3228,6 +3398,7 @@
"resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
"integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -3237,6 +3408,7 @@
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
"integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3246,6 +3418,7 @@
"resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
"integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3254,13 +3427,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
"integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/path-exists": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
"integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pinkie-promise": "^2.0.0"
},
@@ -3273,6 +3448,7 @@
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3281,13 +3457,15 @@
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/path-root": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
"integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"path-root-regex": "^0.1.0"
},
@@ -3300,6 +3478,7 @@
"resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
"integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3309,21 +3488,24 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
},
"node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+ "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8.6"
},
@@ -3336,6 +3518,7 @@
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3345,6 +3528,7 @@
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
"integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3354,6 +3538,7 @@
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"pinkie": "^2.0.0"
},
@@ -3366,6 +3551,7 @@
"resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
"integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-colors": "^1.0.1",
"arr-diff": "^4.0.0",
@@ -3381,6 +3567,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -3394,6 +3581,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -3406,6 +3594,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -3419,6 +3608,7 @@
"integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==",
"deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1",
"dev": true,
+ "license": "MIT",
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/popperjs"
@@ -3429,6 +3619,7 @@
"resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
"integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3438,6 +3629,7 @@
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
"integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.8"
}
@@ -3446,13 +3638,15 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/pump": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
"integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
@@ -3463,6 +3657,7 @@
"resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
"integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"duplexify": "^3.6.0",
"inherits": "^2.0.3",
@@ -3487,13 +3682,15 @@
"type": "consulting",
"url": "https://feross.org/support"
}
- ]
+ ],
+ "license": "MIT"
},
"node_modules/read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
"integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"load-json-file": "^1.0.0",
"normalize-package-data": "^2.3.2",
@@ -3508,6 +3705,7 @@
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
"integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"find-up": "^1.0.0",
"read-pkg": "^1.0.0"
@@ -3521,6 +3719,7 @@
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
"integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.2",
"pify": "^2.0.0",
@@ -3535,6 +3734,7 @@
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"core-util-is": "~1.0.0",
"inherits": "~2.0.3",
@@ -3550,6 +3750,7 @@
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
"integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"graceful-fs": "^4.1.11",
"micromatch": "^3.1.10",
@@ -3564,6 +3765,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -3577,6 +3779,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -3585,42 +3788,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/readdirp/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/readdirp/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/readdirp/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/readdirp/node_modules/is-extendable": {
@@ -3628,6 +3807,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -3640,6 +3820,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -3652,6 +3833,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3661,6 +3843,7 @@
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
"integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-diff": "^4.0.0",
"array-unique": "^0.3.2",
@@ -3697,6 +3880,7 @@
"resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
"integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend-shallow": "^3.0.2",
"safe-regex": "^1.1.0"
@@ -3710,6 +3894,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -3723,6 +3908,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -3735,6 +3921,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -3747,6 +3934,7 @@
"resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
"integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5",
"is-utf8": "^0.2.1"
@@ -3760,6 +3948,7 @@
"resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
"integrity": "sha512-wigO8/O08XHb8YPzpDDT+QmRANfW6vLqxfaXm1YXhnFf3AkSLyjfG3GEFg4McZkmgL7KvCj5u2KczkvSP6NfHA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"remove-bom-buffer": "^3.0.0",
"safe-buffer": "^5.1.0",
@@ -3773,13 +3962,15 @@
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
"integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/repeat-element": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
"integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3789,6 +3980,7 @@
"resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
"integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10"
}
@@ -3798,6 +3990,7 @@
"resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
"integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 10"
}
@@ -3807,6 +4000,7 @@
"resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
"integrity": "sha512-CHPV/GAglbIB1tnQgaiysb8H2yCy8WQ7lcEwQ/eT+kLj0QHV8LnJW0zpqpE7RSkrMSRoa+EBoag86clf7WAgSg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"homedir-polyfill": "^1.0.1",
"is-absolute": "^1.0.0",
@@ -3821,6 +4015,7 @@
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -3829,13 +4024,15 @@
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
"integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/resolve": {
- "version": "1.22.4",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
- "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
+ "version": "1.22.8",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
+ "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-core-module": "^2.13.0",
"path-parse": "^1.0.7",
@@ -3853,6 +4050,7 @@
"resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
"integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"expand-tilde": "^2.0.0",
"global-modules": "^1.0.0"
@@ -3866,6 +4064,7 @@
"resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
"integrity": "sha512-NYDgziiroVeDC29xq7bp/CacZERYsA9bXYd1ZmcJlF3BcrZv5pTb4NG7SjdyKDnXZ84aC4vo2u6sNKIA1LCu/A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"value-or-function": "^3.0.0"
},
@@ -3878,13 +4077,15 @@
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
"integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==",
"deprecated": "https://github.com/lydell/resolve-url#deprecated",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/ret": {
"version": "0.1.15",
"resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
"integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12"
}
@@ -3894,6 +4095,7 @@
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true,
+ "license": "MIT",
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -3903,7 +4105,9 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "deprecated": "Rimraf versions prior to v4 are no longer supported",
"dev": true,
+ "license": "ISC",
"dependencies": {
"glob": "^7.1.3"
},
@@ -3933,6 +4137,7 @@
"url": "https://feross.org/support"
}
],
+ "license": "MIT",
"dependencies": {
"queue-microtask": "^1.2.2"
}
@@ -3941,13 +4146,15 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/safe-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
"integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ret": "~0.1.10"
}
@@ -3957,6 +4164,7 @@
"resolved": "https://registry.npmjs.org/sass/-/sass-1.75.0.tgz",
"integrity": "sha512-ShMYi3WkrDWxExyxSZPst4/okE9ts46xZmJDSawJQrnte7M1V9fScVB+uNXOVKRBt0PggHOwoZcn8mYX4trnBw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -3974,6 +4182,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -3987,6 +4196,7 @@
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
"integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
},
@@ -3995,12 +4205,13 @@
}
},
"node_modules/sass/node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
+ "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "fill-range": "^7.0.1"
+ "fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@@ -4011,6 +4222,7 @@
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
"integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -4031,10 +4243,11 @@
}
},
"node_modules/sass/node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
+ "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -4048,6 +4261,7 @@
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
"dev": true,
"hasInstallScript": true,
+ "license": "MIT",
"optional": true,
"os": [
"darwin"
@@ -4061,6 +4275,7 @@
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
},
@@ -4073,6 +4288,7 @@
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.12.0"
}
@@ -4082,6 +4298,7 @@
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -4094,6 +4311,7 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^7.0.0"
},
@@ -4106,6 +4324,7 @@
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
"dev": true,
+ "license": "ISC",
"bin": {
"semver": "bin/semver"
}
@@ -4115,6 +4334,7 @@
"resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz",
"integrity": "sha512-Ny/iyOzSSa8M5ML46IAx3iXc6tfOsYU2R4AXi2UpHk60Zrgyq6eqPj/xiOfS0rRl/iiQ/rdJkVjw/5cdUyCntQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"sver-compat": "^1.5.0"
},
@@ -4126,13 +4346,33 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
"integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
+ },
+ "node_modules/set-function-length": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz",
+ "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "define-data-property": "^1.1.4",
+ "es-errors": "^1.3.0",
+ "function-bind": "^1.1.2",
+ "get-intrinsic": "^1.2.4",
+ "gopd": "^1.0.1",
+ "has-property-descriptors": "^1.0.2"
+ },
+ "engines": {
+ "node": ">= 0.4"
+ }
},
"node_modules/set-value": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
"integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend-shallow": "^2.0.1",
"is-extendable": "^0.1.1",
@@ -4148,6 +4388,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -4160,6 +4401,7 @@
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -4169,6 +4411,7 @@
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
"integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"base": "^0.11.1",
"debug": "^2.2.0",
@@ -4188,6 +4431,7 @@
"resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
"integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"define-property": "^1.0.0",
"isobject": "^3.0.0",
@@ -4202,6 +4446,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
"integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.0"
},
@@ -4209,51 +4454,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/snapdragon-node/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/snapdragon-node/node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/snapdragon-util": {
@@ -4261,6 +4473,7 @@
"resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
"integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kind-of": "^3.2.0"
},
@@ -4273,6 +4486,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5"
},
@@ -4285,15 +4499,17 @@
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
"integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
+ "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
"dev": true,
+ "license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
}
@@ -4304,6 +4520,7 @@
"integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
"deprecated": "See https://github.com/lydell/source-map-resolve#deprecated",
"dev": true,
+ "license": "MIT",
"dependencies": {
"atob": "^2.1.2",
"decode-uri-component": "^0.2.0",
@@ -4317,13 +4534,15 @@
"resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
"integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
"deprecated": "See https://github.com/lydell/source-map-url#deprecated",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/sparkles": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
"integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -4333,38 +4552,43 @@
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz",
"integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"spdx-expression-parse": "^3.0.0",
"spdx-license-ids": "^3.0.0"
}
},
"node_modules/spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz",
+ "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==",
+ "dev": true,
+ "license": "CC-BY-3.0"
},
"node_modules/spdx-expression-parse": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
"integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"spdx-exceptions": "^2.1.0",
"spdx-license-ids": "^3.0.0"
}
},
"node_modules/spdx-license-ids": {
- "version": "3.0.13",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz",
- "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==",
- "dev": true
+ "version": "3.0.18",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz",
+ "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==",
+ "dev": true,
+ "license": "CC0-1.0"
},
"node_modules/split-string": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
"integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"extend-shallow": "^3.0.0"
},
@@ -4377,6 +4601,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -4390,6 +4615,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -4402,6 +4628,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -4414,6 +4641,7 @@
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
"integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "*"
}
@@ -4423,6 +4651,7 @@
"resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
"integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"define-property": "^0.2.5",
"object-copy": "^0.1.0"
@@ -4435,19 +4664,22 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
"integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
+ "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/string_decoder": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"safe-buffer": "~5.1.0"
}
@@ -4457,6 +4689,7 @@
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
"integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"code-point-at": "^1.0.0",
"is-fullwidth-code-point": "^1.0.0",
@@ -4471,6 +4704,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4480,6 +4714,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^2.0.0"
},
@@ -4492,6 +4727,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -4504,6 +4740,7 @@
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
"integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-utf8": "^0.2.0"
},
@@ -4516,6 +4753,7 @@
"resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
"integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.4"
},
@@ -4528,6 +4766,7 @@
"resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz",
"integrity": "sha512-aFTHfmjwizMNlNE6dsGmoAM4lHjL0CyiobWaFiXWSlD7cIxshW422Nb8KbXCmR6z+0ZEPY+daXJrDyh/vuwTyg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"es6-iterator": "^2.0.1",
"es6-symbol": "^3.1.1"
@@ -4538,6 +4777,7 @@
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
"integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"readable-stream": "~2.3.6",
"xtend": "~4.0.1"
@@ -4548,6 +4788,7 @@
"resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
"integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"through2": "~2.0.0",
"xtend": "~4.0.0"
@@ -4558,6 +4799,7 @@
"resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
"integrity": "sha512-gLCeArryy2yNTRzTGKbZbloctj64jkZ57hj5zdraXue6aFgd6PmvVtEyiUU+hvU0v7q08oVv8r8ev0tRo6bvgw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4567,6 +4809,7 @@
"resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
"integrity": "sha512-rtwLUQEwT8ZeKQbyFJyomBRYXyE16U5VKuy0ftxLMK/PZb2fkOsg5r9kHdauuVDbsNdIBoC/HCthpidamQFXYA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-absolute": "^1.0.0",
"is-negated-glob": "^1.0.0"
@@ -4580,6 +4823,7 @@
"resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
"integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"kind-of": "^3.0.2"
},
@@ -4592,6 +4836,7 @@
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
"integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-buffer": "^1.1.5"
},
@@ -4604,6 +4849,7 @@
"resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
"integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"define-property": "^2.0.2",
"extend-shallow": "^3.0.2",
@@ -4619,6 +4865,7 @@
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
"integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-number": "^3.0.0",
"repeat-string": "^1.6.1"
@@ -4632,6 +4879,7 @@
"resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
"integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-descriptor": "^1.0.2",
"isobject": "^3.0.1"
@@ -4645,6 +4893,7 @@
"resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
"integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"assign-symbols": "^1.0.0",
"is-extendable": "^1.0.1"
@@ -4653,42 +4902,18 @@
"node": ">=0.10.0"
}
},
- "node_modules/to-regex/node_modules/is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/to-regex/node_modules/is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "dependencies": {
- "kind-of": "^6.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/to-regex/node_modules/is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz",
+ "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
+ "is-accessor-descriptor": "^1.0.1",
+ "is-data-descriptor": "^1.0.1"
},
"engines": {
- "node": ">=0.10.0"
+ "node": ">= 0.4"
}
},
"node_modules/to-regex/node_modules/is-extendable": {
@@ -4696,6 +4921,7 @@
"resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
"integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"is-plain-object": "^2.0.4"
},
@@ -4708,6 +4934,7 @@
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
"integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isobject": "^3.0.1"
},
@@ -4715,20 +4942,12 @@
"node": ">=0.10.0"
}
},
- "node_modules/to-regex/node_modules/kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
"node_modules/to-through": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
"integrity": "sha512-+QIz37Ly7acM4EMdw2PRN389OneM5+d844tirkGp4dPKzI5OE72V9OsbFp+CIYJDahZ41ZV05hNtcPAQUAm9/Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"through2": "^2.0.3"
},
@@ -4746,22 +4965,25 @@
}
},
"node_modules/type": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
- "dev": true
+ "version": "2.7.3",
+ "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz",
+ "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==",
+ "dev": true,
+ "license": "ISC"
},
"node_modules/typedarray": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
"integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/unc-path-regex": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
"integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4771,6 +4993,7 @@
"resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz",
"integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-flatten": "^1.0.1",
"arr-map": "^2.0.0",
@@ -4792,6 +5015,7 @@
"resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz",
"integrity": "sha512-UR1khWeAjugW3548EfQmL9Z7pGMlBgXteQpr1IZeZBtnkCJQJIJ1Scj0mb9wQaPvUZ9Q17XqW6TIaPchJkyfqw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -4801,6 +5025,7 @@
"resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
"integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"arr-union": "^3.1.0",
"get-value": "^2.0.6",
@@ -4816,6 +5041,7 @@
"resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
"integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"json-stable-stringify-without-jsonify": "^1.0.1",
"through2-filter": "^3.0.0"
@@ -4826,6 +5052,7 @@
"resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
"integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"has-value": "^0.3.1",
"isobject": "^3.0.0"
@@ -4839,6 +5066,7 @@
"resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
"integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"get-value": "^2.0.3",
"has-values": "^0.1.4",
@@ -4853,6 +5081,7 @@
"resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
"integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"isarray": "1.0.0"
},
@@ -4865,6 +5094,7 @@
"resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
"integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4874,6 +5104,7 @@
"resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
"integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=4",
"yarn": "*"
@@ -4884,13 +5115,15 @@
"resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
"integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==",
"deprecated": "Please see https://github.com/lydell/urix#deprecated",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/use": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
"integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -4899,13 +5132,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/v8flags": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
"integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"homedir-polyfill": "^1.0.1"
},
@@ -4918,6 +5153,7 @@
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
"integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"spdx-correct": "^3.0.0",
"spdx-expression-parse": "^3.0.0"
@@ -4928,6 +5164,7 @@
"resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
"integrity": "sha512-jdBB2FrWvQC/pnPtIqcLsMaQgjhdb6B7tk1MMyTKapox+tQZbdRP4uLxu/JY0t7fbfDCUMnuelzEYv5GsxHhdg==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -4937,6 +5174,7 @@
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
"integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"clone": "^2.1.1",
"clone-buffer": "^1.0.0",
@@ -4954,6 +5192,7 @@
"resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
"integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fs-mkdirp-stream": "^1.0.0",
"glob-stream": "^6.1.0",
@@ -4982,6 +5221,7 @@
"resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
"integrity": "sha512-NiibMgt6VJGJmyw7vtzhctDcfKch4e4n9TBeoWlirb7FMg9/1Ov9k+A5ZRAtywBpRPiyECvQRQllYM8dECegVA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"append-buffer": "^1.0.2",
"convert-source-map": "^1.5.0",
@@ -5000,6 +5240,7 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
"integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"remove-trailing-separator": "^1.0.1"
},
@@ -5012,6 +5253,7 @@
"resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
"integrity": "sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"source-map": "^0.5.1"
}
@@ -5021,6 +5263,7 @@
"resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
"integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">= 0.10"
}
@@ -5030,6 +5273,7 @@
"resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
"integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"isexe": "^2.0.0"
},
@@ -5041,13 +5285,15 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
"integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/wrap-ansi": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
"integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"string-width": "^1.0.1",
"strip-ansi": "^3.0.1"
@@ -5061,6 +5307,7 @@
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
"integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -5070,6 +5317,7 @@
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"ansi-regex": "^2.0.0"
},
@@ -5081,13 +5329,15 @@
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/xtend": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
"integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.4"
}
@@ -5096,13 +5346,15 @@
"version": "3.2.2",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
"integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/yargs": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz",
"integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"camelcase": "^3.0.0",
"cliui": "^3.2.0",
@@ -5124,6 +5376,7 @@
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz",
"integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"camelcase": "^3.0.0",
"object.assign": "^4.1.0"
From 48430836b65dc111edf9614ada9f2158602b47f7 Mon Sep 17 00:00:00 2001
From: Alex Morask <144709477+amorask-bitwarden@users.noreply.github.com>
Date: Fri, 28 Jun 2024 08:48:56 -0400
Subject: [PATCH 13/40] Fix invoice finalized handler (#4430)
---
.../Services/Implementations/StripeEventProcessor.cs | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/src/Billing/Services/Implementations/StripeEventProcessor.cs b/src/Billing/Services/Implementations/StripeEventProcessor.cs
index db4e3929f..b0d9cf187 100644
--- a/src/Billing/Services/Implementations/StripeEventProcessor.cs
+++ b/src/Billing/Services/Implementations/StripeEventProcessor.cs
@@ -16,6 +16,7 @@ public class StripeEventProcessor : IStripeEventProcessor
private readonly IInvoiceCreatedHandler _invoiceCreatedHandler;
private readonly IPaymentMethodAttachedHandler _paymentMethodAttachedHandler;
private readonly ICustomerUpdatedHandler _customerUpdatedHandler;
+ private readonly IInvoiceFinalizedHandler _invoiceFinalizedHandler;
public StripeEventProcessor(
ILogger logger,
@@ -28,7 +29,8 @@ public class StripeEventProcessor : IStripeEventProcessor
IPaymentFailedHandler paymentFailedHandler,
IInvoiceCreatedHandler invoiceCreatedHandler,
IPaymentMethodAttachedHandler paymentMethodAttachedHandler,
- ICustomerUpdatedHandler customerUpdatedHandler)
+ ICustomerUpdatedHandler customerUpdatedHandler,
+ IInvoiceFinalizedHandler invoiceFinalizedHandler)
{
_logger = logger;
_subscriptionDeletedHandler = subscriptionDeletedHandler;
@@ -41,6 +43,7 @@ public class StripeEventProcessor : IStripeEventProcessor
_invoiceCreatedHandler = invoiceCreatedHandler;
_paymentMethodAttachedHandler = paymentMethodAttachedHandler;
_customerUpdatedHandler = customerUpdatedHandler;
+ _invoiceFinalizedHandler = invoiceFinalizedHandler;
}
public async Task ProcessEventAsync(Event parsedEvent)
@@ -78,7 +81,7 @@ public class StripeEventProcessor : IStripeEventProcessor
await _customerUpdatedHandler.HandleAsync(parsedEvent);
break;
case HandledStripeWebhook.InvoiceFinalized:
- await _customerUpdatedHandler.HandleAsync(parsedEvent);
+ await _invoiceFinalizedHandler.HandleAsync(parsedEvent);
break;
default:
_logger.LogWarning("Unsupported event received. {EventType}", parsedEvent.Type);
From 1ec2aae72392562cee5afd6b8fb55e90b4aad71e Mon Sep 17 00:00:00 2001
From: Justin Baur <19896123+justindbaur@users.noreply.github.com>
Date: Fri, 28 Jun 2024 10:13:02 -0400
Subject: [PATCH 14/40] [PM-3581] Fix Postgres Time (#3221)
* Fix Postgres Time
- Migrate Send Tests
- Delete Old Tests
* Formatting
* Update Comment
* Change LaxComparer to Compare Some Milliseconds
* Update Comment
---
.../Repositories/DatabaseContext.cs | 19 +++--
.../Tools/AutoFixture/SendFixtures.cs | 71 -------------------
.../EqualityComparers/SendCompare.cs | 26 -------
.../Tools/Repositories/SendRepositoryTests.cs | 68 ------------------
.../Comparers/LaxDateTimeComparer.cs | 34 +++++++++
.../Tools/SendRepositoryTests.cs | 66 +++++++++++++++++
6 files changed, 115 insertions(+), 169 deletions(-)
delete mode 100644 test/Infrastructure.EFIntegration.Test/Tools/AutoFixture/SendFixtures.cs
delete mode 100644 test/Infrastructure.EFIntegration.Test/Tools/Repositories/EqualityComparers/SendCompare.cs
delete mode 100644 test/Infrastructure.EFIntegration.Test/Tools/Repositories/SendRepositoryTests.cs
create mode 100644 test/Infrastructure.IntegrationTest/Comparers/LaxDateTimeComparer.cs
create mode 100644 test/Infrastructure.IntegrationTest/Tools/SendRepositoryTests.cs
diff --git a/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs b/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs
index 35e5ebdb0..8712e0c17 100644
--- a/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs
+++ b/src/Infrastructure.EntityFramework/Repositories/DatabaseContext.cs
@@ -159,6 +159,20 @@ public class DatabaseContext : DbContext
// Make sure this is called after configuring all the entities as it iterates through all setup entities.
private void ConfigureDateTimeUtcQueries(ModelBuilder builder)
{
+ ValueConverter converter;
+ if (Database.IsNpgsql())
+ {
+ converter = new ValueConverter(
+ v => v,
+ d => new DateTimeOffset(d).UtcDateTime);
+ }
+ else
+ {
+ converter = new ValueConverter(
+ v => v,
+ v => new DateTime(v.Ticks, DateTimeKind.Utc));
+ }
+
foreach (var entityType in builder.Model.GetEntityTypes())
{
if (entityType.IsKeyless)
@@ -169,10 +183,7 @@ public class DatabaseContext : DbContext
{
if (property.ClrType == typeof(DateTime) || property.ClrType == typeof(DateTime?))
{
- property.SetValueConverter(
- new ValueConverter(
- v => v,
- v => new DateTime(v.Ticks, DateTimeKind.Utc)));
+ property.SetValueConverter(converter);
}
}
}
diff --git a/test/Infrastructure.EFIntegration.Test/Tools/AutoFixture/SendFixtures.cs b/test/Infrastructure.EFIntegration.Test/Tools/AutoFixture/SendFixtures.cs
deleted file mode 100644
index b4e4710d7..000000000
--- a/test/Infrastructure.EFIntegration.Test/Tools/AutoFixture/SendFixtures.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using AutoFixture;
-using AutoFixture.Kernel;
-using Bit.Core.Test.AutoFixture.UserFixtures;
-using Bit.Core.Tools.Entities;
-using Bit.Infrastructure.EFIntegration.Test.AutoFixture;
-using Bit.Infrastructure.EFIntegration.Test.AutoFixture.Relays;
-using Bit.Infrastructure.EntityFramework.Repositories;
-using Bit.Infrastructure.EntityFramework.Tools.Repositories;
-using Bit.Test.Common.AutoFixture;
-using Bit.Test.Common.AutoFixture.Attributes;
-
-namespace Bit.Infrastructure.EFIntegration.Test.Tools.AutoFixture;
-
-internal class SendBuilder : ISpecimenBuilder
-{
- public bool OrganizationOwned { get; set; }
- public object Create(object request, ISpecimenContext context)
- {
- if (context == null)
- {
- throw new ArgumentNullException(nameof(context));
- }
-
- var type = request as Type;
- if (type == null || type != typeof(Send))
- {
- return new NoSpecimen();
- }
-
- var fixture = new Fixture();
- fixture.Customizations.Insert(0, new MaxLengthStringRelay());
- if (!OrganizationOwned)
- {
- fixture.Customize(composer => composer
- .Without(c => c.OrganizationId));
- }
- var obj = fixture.WithAutoNSubstitutions().Create();
- return obj;
- }
-}
-
-internal class EfSend : ICustomization
-{
- public bool OrganizationOwned { get; set; }
- public void Customize(IFixture fixture)
- {
- fixture.Customizations.Add(new IgnoreVirtualMembersCustomization());
- fixture.Customizations.Add(new GlobalSettingsBuilder());
- fixture.Customizations.Add(new SendBuilder());
- fixture.Customizations.Add(new UserBuilder());
- fixture.Customizations.Add(new OrganizationBuilder());
- fixture.Customizations.Add(new EfRepositoryListBuilder());
- fixture.Customizations.Add(new EfRepositoryListBuilder());
- fixture.Customizations.Add(new EfRepositoryListBuilder());
- }
-}
-
-internal class EfUserSendAutoDataAttribute : CustomAutoDataAttribute
-{
- public EfUserSendAutoDataAttribute() : base(new SutProviderCustomization(), new EfSend())
- { }
-}
-
-internal class EfOrganizationSendAutoDataAttribute : CustomAutoDataAttribute
-{
- public EfOrganizationSendAutoDataAttribute() : base(new SutProviderCustomization(), new EfSend()
- {
- OrganizationOwned = true,
- })
- { }
-}
diff --git a/test/Infrastructure.EFIntegration.Test/Tools/Repositories/EqualityComparers/SendCompare.cs b/test/Infrastructure.EFIntegration.Test/Tools/Repositories/EqualityComparers/SendCompare.cs
deleted file mode 100644
index bc10b6e5b..000000000
--- a/test/Infrastructure.EFIntegration.Test/Tools/Repositories/EqualityComparers/SendCompare.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using System.Diagnostics.CodeAnalysis;
-using Bit.Core.Tools.Entities;
-
-namespace Bit.Infrastructure.EFIntegration.Test.Tools.Repositories.EqualityComparers;
-
-public class SendCompare : IEqualityComparer
-{
- public bool Equals(Send x, Send y)
- {
- return x.Type == y.Type &&
- x.Data == y.Data &&
- x.Key == y.Key &&
- x.Password == y.Password &&
- x.MaxAccessCount == y.MaxAccessCount &&
- x.AccessCount == y.AccessCount &&
- x.ExpirationDate?.ToShortDateString() == y.ExpirationDate?.ToShortDateString() &&
- x.DeletionDate.ToShortDateString() == y.DeletionDate.ToShortDateString() &&
- x.Disabled == y.Disabled &&
- x.HideEmail == y.HideEmail;
- }
-
- public int GetHashCode([DisallowNull] Send obj)
- {
- return base.GetHashCode();
- }
-}
diff --git a/test/Infrastructure.EFIntegration.Test/Tools/Repositories/SendRepositoryTests.cs b/test/Infrastructure.EFIntegration.Test/Tools/Repositories/SendRepositoryTests.cs
deleted file mode 100644
index ae03d639f..000000000
--- a/test/Infrastructure.EFIntegration.Test/Tools/Repositories/SendRepositoryTests.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using Bit.Core.AdminConsole.Entities;
-using Bit.Core.Entities;
-using Bit.Core.Test.AutoFixture.Attributes;
-using Bit.Core.Tools.Entities;
-using Bit.Infrastructure.EFIntegration.Test.Tools.AutoFixture;
-using Bit.Infrastructure.EFIntegration.Test.Tools.Repositories.EqualityComparers;
-using Xunit;
-using EfRepo = Bit.Infrastructure.EntityFramework.Repositories;
-using EfSendRepo = Bit.Infrastructure.EntityFramework.Tools.Repositories;
-using SqlRepo = Bit.Infrastructure.Dapper.Repositories;
-using SqlSendRepo = Bit.Infrastructure.Dapper.Tools.Repositories;
-
-namespace Bit.Infrastructure.EFIntegration.Test.Tools.Repositories;
-
-public class SendRepositoryTests
-{
- [CiSkippedTheory, EfUserSendAutoData, EfOrganizationSendAutoData]
- public async Task CreateAsync_Works_DataMatches(
- Send send,
- User user,
- Organization org,
- SendCompare equalityComparer,
- List suts,
- List efUserRepos,
- List efOrgRepos,
- SqlSendRepo.SendRepository sqlSendRepo,
- SqlRepo.UserRepository sqlUserRepo,
- SqlRepo.OrganizationRepository sqlOrgRepo
- )
- {
- var savedSends = new List();
- foreach (var sut in suts)
- {
- var i = suts.IndexOf(sut);
-
- if (send.OrganizationId.HasValue)
- {
- var efOrg = await efOrgRepos[i].CreateAsync(org);
- sut.ClearChangeTracking();
- send.OrganizationId = efOrg.Id;
- }
- var efUser = await efUserRepos[i].CreateAsync(user);
- sut.ClearChangeTracking();
-
- send.UserId = efUser.Id;
- var postEfSend = await sut.CreateAsync(send);
- sut.ClearChangeTracking();
-
- var savedSend = await sut.GetByIdAsync(postEfSend.Id);
- savedSends.Add(savedSend);
- }
-
- var sqlUser = await sqlUserRepo.CreateAsync(user);
- if (send.OrganizationId.HasValue)
- {
- var sqlOrg = await sqlOrgRepo.CreateAsync(org);
- send.OrganizationId = sqlOrg.Id;
- }
-
- send.UserId = sqlUser.Id;
- var sqlSend = await sqlSendRepo.CreateAsync(send);
- var savedSqlSend = await sqlSendRepo.GetByIdAsync(sqlSend.Id);
- savedSends.Add(savedSqlSend);
-
- var distinctItems = savedSends.Distinct(equalityComparer);
- Assert.True(!distinctItems.Skip(1).Any());
- }
-}
diff --git a/test/Infrastructure.IntegrationTest/Comparers/LaxDateTimeComparer.cs b/test/Infrastructure.IntegrationTest/Comparers/LaxDateTimeComparer.cs
new file mode 100644
index 000000000..acff8168d
--- /dev/null
+++ b/test/Infrastructure.IntegrationTest/Comparers/LaxDateTimeComparer.cs
@@ -0,0 +1,34 @@
+using System.Diagnostics.CodeAnalysis;
+
+namespace Bit.Infrastructure.IntegrationTest.Comparers;
+
+///
+/// A datetime comparer that doesn't care about overall ticks and instead allows a configurable allowed difference.
+///
+public class LaxDateTimeComparer : IEqualityComparer
+{
+ public static readonly IEqualityComparer Default = new LaxDateTimeComparer(TimeSpan.FromMilliseconds(2));
+ private readonly TimeSpan _allowedDifference;
+
+ public LaxDateTimeComparer(TimeSpan allowedDifference)
+ {
+ _allowedDifference = allowedDifference;
+ }
+
+ public bool Equals(DateTime x, DateTime y)
+ {
+ var difference = x - y;
+ return difference.Duration() < _allowedDifference;
+ }
+
+ public int GetHashCode([DisallowNull] DateTime obj)
+ {
+ // Not used when used for Assert.Equal() overload
+ throw new NotImplementedException();
+ }
+
+ public static int RoundMilliseconds(int milliseconds)
+ {
+ return (int)Math.Round(milliseconds / 100d) * 100;
+ }
+}
diff --git a/test/Infrastructure.IntegrationTest/Tools/SendRepositoryTests.cs b/test/Infrastructure.IntegrationTest/Tools/SendRepositoryTests.cs
new file mode 100644
index 000000000..0abd0e5ec
--- /dev/null
+++ b/test/Infrastructure.IntegrationTest/Tools/SendRepositoryTests.cs
@@ -0,0 +1,66 @@
+using Bit.Core.Tools.Entities;
+using Bit.Core.Tools.Enums;
+using Bit.Core.Tools.Repositories;
+using Bit.Infrastructure.IntegrationTest.Comparers;
+using Xunit;
+
+namespace Bit.Infrastructure.IntegrationTest.Tools;
+
+public class SendRepositoryTests
+{
+ [DatabaseTheory, DatabaseData]
+ public async Task CreateAsync_Works(ISendRepository sendRepository)
+ {
+ var expirationDate = DateTime.UtcNow.AddDays(7);
+
+ var createdSend = await sendRepository.CreateAsync(new Send
+ {
+ Data = "{\"Text\": \"2.t|t|t\"}", // TODO: EF Should enforce this
+ Type = SendType.Text,
+ AccessCount = 0,
+ Key = "2.t|t|t", // TODO: EF should enforce this
+ ExpirationDate = expirationDate,
+ DeletionDate = expirationDate.AddDays(7),
+ });
+
+ Assert.NotNull(createdSend.ExpirationDate);
+ Assert.Equal(expirationDate, createdSend.ExpirationDate!.Value, LaxDateTimeComparer.Default);
+
+ var sendFromDatabase = await sendRepository.GetByIdAsync(createdSend.Id);
+ Assert.Equal(expirationDate, sendFromDatabase.ExpirationDate!.Value, LaxDateTimeComparer.Default);
+ Assert.Equal(SendType.Text, sendFromDatabase.Type);
+ Assert.Equal(0, sendFromDatabase.AccessCount);
+ Assert.Equal("2.t|t|t", sendFromDatabase.Key);
+ Assert.Equal(expirationDate.AddDays(7), sendFromDatabase.DeletionDate, LaxDateTimeComparer.Default);
+ Assert.Equal("{\"Text\": \"2.t|t|t\"}", sendFromDatabase.Data);
+ }
+
+ [DatabaseTheory, DatabaseData]
+ // This test runs best on a fresh database and may fail on subsequent runs with other tests.
+ public async Task GetByDeletionDateAsync_Works(ISendRepository sendRepository)
+ {
+ var deletionDate = DateTime.UtcNow.AddYears(-1);
+
+ var shouldDeleteSend = await sendRepository.CreateAsync(new Send
+ {
+ Data = "{\"Text\": \"2.t|t|t\"}", // TODO: EF Should enforce this
+ Type = SendType.Text,
+ AccessCount = 0,
+ Key = "2.t|t|t", // TODO: EF should enforce this
+ DeletionDate = deletionDate.AddSeconds(-2),
+ });
+
+ var shouldKeepSend = await sendRepository.CreateAsync(new Send
+ {
+ Data = "{\"Text\": \"2.t|t|t\"}", // TODO: EF Should enforce this
+ Type = SendType.Text,
+ AccessCount = 0,
+ Key = "2.t|t|t", // TODO: EF should enforce this
+ DeletionDate = deletionDate.AddSeconds(2),
+ });
+
+ var toDeleteSends = await sendRepository.GetManyByDeletionDateAsync(deletionDate);
+ var toDeleteSend = Assert.Single(toDeleteSends);
+ Assert.Equal(shouldDeleteSend.Id, toDeleteSend.Id);
+ }
+}
From 84b18e9de7757f2fcaa45f6005f6a0a993765a9d Mon Sep 17 00:00:00 2001
From: Justin Baur <19896123+justindbaur@users.noreply.github.com>
Date: Fri, 28 Jun 2024 10:28:07 -0400
Subject: [PATCH 15/40] Add overriddable configuration (#4437)
* Add Overridable Configuration
* Add Remarks
---
.../Factories/ApiApplicationFactory.cs | 4 +-
.../Factories/WebApplicationFactoryBase.cs | 71 ++++++++++++++++---
2 files changed, 65 insertions(+), 10 deletions(-)
diff --git a/test/Api.IntegrationTest/Factories/ApiApplicationFactory.cs b/test/Api.IntegrationTest/Factories/ApiApplicationFactory.cs
index 3938ef46b..230f0bcf0 100644
--- a/test/Api.IntegrationTest/Factories/ApiApplicationFactory.cs
+++ b/test/Api.IntegrationTest/Factories/ApiApplicationFactory.cs
@@ -4,6 +4,8 @@ using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.TestHost;
using Microsoft.Data.Sqlite;
+#nullable enable
+
namespace Bit.Api.IntegrationTest.Factories;
public class ApiApplicationFactory : WebApplicationFactoryBase
@@ -62,7 +64,7 @@ public class ApiApplicationFactory : WebApplicationFactoryBase
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
- SqliteConnection.Dispose();
+ SqliteConnection!.Dispose();
}
///
diff --git a/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs b/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs
index d1e4fc306..62cb5c624 100644
--- a/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs
+++ b/test/IntegrationTestCommon/Factories/WebApplicationFactoryBase.cs
@@ -16,6 +16,8 @@ using Microsoft.Extensions.Logging.Abstractions;
using NSubstitute;
using NoopRepos = Bit.Core.Repositories.Noop;
+#nullable enable
+
namespace Bit.IntegrationTestCommon.Factories;
public static class FactoryConstants
@@ -32,9 +34,11 @@ public abstract class WebApplicationFactoryBase : WebApplicationFactory
///
/// This will need to be set BEFORE using the Server property
///
- public SqliteConnection SqliteConnection { get; set; }
+ public SqliteConnection? SqliteConnection { get; set; }
private readonly List> _configureTestServices = new();
+ private readonly List> _configureAppConfiguration = new();
+
private bool _handleSqliteDisposal { get; set; }
@@ -53,6 +57,50 @@ public abstract class WebApplicationFactoryBase : WebApplicationFactory
});
}
+ ///
+ /// Add your own configuration provider to the application.
+ ///
+ /// The action adding your own providers.
+ /// This needs to be ran BEFORE making any calls through the factory to take effect.
+ ///
+ ///
+ /// factory.UpdateConfiguration(builder =>
+ /// {
+ /// builder.AddInMemoryCollection(new Dictionary<string, string?>
+ /// {
+ /// { "globalSettings:attachment:connectionString", null},
+ /// { "globalSettings:events:connectionString", null},
+ /// })
+ /// })
+ ///
+ ///
+ public void UpdateConfiguration(Action configure)
+ {
+ _configureAppConfiguration.Add(configure);
+ }
+
+ ///
+ /// Updates a single configuration entry for multiple entries at once use .
+ ///
+ /// The fully qualified name of the setting, using : as delimiter between sections.
+ /// The value of the setting.
+ /// This needs to be ran BEFORE making any calls through the factory to take effect.
+ ///
+ ///
+ /// factory.UpdateConfiguration("globalSettings:attachment:connectionString", null);
+ ///
+ ///
+ public void UpdateConfiguration(string key, string? value)
+ {
+ _configureAppConfiguration.Add(builder =>
+ {
+ builder.AddInMemoryCollection(new Dictionary
+ {
+ { key, value },
+ });
+ });
+ }
+
///
/// Configure the web host to use a SQLite in memory database
///
@@ -73,7 +121,7 @@ public abstract class WebApplicationFactoryBase : WebApplicationFactory
c.AddUserSecrets(typeof(Identity.Startup).Assembly, optional: true);
- c.AddInMemoryCollection(new Dictionary
+ c.AddInMemoryCollection(new Dictionary
{
// Manually insert a EF provider so that ConfigureServices will add EF repositories but we will override
// DbContextOptions to use an in memory database
@@ -96,12 +144,16 @@ public abstract class WebApplicationFactoryBase : WebApplicationFactory
// Email Verification
{ "globalSettings:enableEmailVerification", "true" },
- {"globalSettings:launchDarkly:flagValues:email-verification", "true" }
-
-
+ { "globalSettings:launchDarkly:flagValues:email-verification", "true" }
});
});
+ // Run configured actions after defaults to allow them to take precedence
+ foreach (var configureAppConfiguration in _configureAppConfiguration)
+ {
+ builder.ConfigureAppConfiguration(configureAppConfiguration);
+ }
+
builder.ConfigureTestServices(services =>
{
var dbContextOptions = services.First(sd => sd.ServiceType == typeof(DbContextOptions));
@@ -193,10 +245,11 @@ public abstract class WebApplicationFactoryBase : WebApplicationFactory
return scope.ServiceProvider.GetRequiredService();
}
- public TS GetService()
+ public TService GetService()
+ where TService : notnull
{
var scope = Services.CreateScope();
- return scope.ServiceProvider.GetRequiredService();
+ return scope.ServiceProvider.GetRequiredService();
}
protected override void Dispose(bool disposing)
@@ -204,7 +257,7 @@ public abstract class WebApplicationFactoryBase : WebApplicationFactory
base.Dispose(disposing);
if (_handleSqliteDisposal)
{
- SqliteConnection.Dispose();
+ SqliteConnection!.Dispose();
}
}
@@ -213,7 +266,7 @@ public abstract class WebApplicationFactoryBase : WebApplicationFactory
var serviceProvider = serviceCollection.BuildServiceProvider();
using var scope = serviceProvider.CreateScope();
var services = scope.ServiceProvider;
- var context = services.GetService();
+ var context = services.GetRequiredService();
if (_handleSqliteDisposal)
{
context.Database.EnsureDeleted();
From ef84b060843d904cbd92ba3cd509af8ffcb81a73 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 28 Jun 2024 11:55:28 -0400
Subject: [PATCH 16/40] [deps]: Update Microsoft.Extensions.Caching.Cosmos to
v1.6.1 (#4133)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
src/Core/Core.csproj | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/Core/Core.csproj b/src/Core/Core.csproj
index 1eca173c9..d583e7e2a 100644
--- a/src/Core/Core.csproj
+++ b/src/Core/Core.csproj
@@ -38,7 +38,7 @@
-
+
From 14de173dba7be155b5c80eb6a43aa38b0ab83ac6 Mon Sep 17 00:00:00 2001
From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com>
Date: Fri, 28 Jun 2024 18:06:44 +0200
Subject: [PATCH 17/40] [deps] Tools: Update aws-sdk-net monorepo (#4438)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
---
src/Core/Core.csproj | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/Core/Core.csproj b/src/Core/Core.csproj
index d583e7e2a..3177d15d3 100644
--- a/src/Core/Core.csproj
+++ b/src/Core/Core.csproj
@@ -21,8 +21,8 @@
-
-
+
+
From 5fcd281d96d9a10f73f70e8bec2415ebda2427f4 Mon Sep 17 00:00:00 2001
From: Justin Baur <19896123+justindbaur@users.noreply.github.com>
Date: Fri, 28 Jun 2024 12:59:09 -0400
Subject: [PATCH 18/40] Add Auto Created .mono To .gitignore (#4398)
---
.gitignore | 1 +
1 file changed, 1 insertion(+)
diff --git a/.gitignore b/.gitignore
index a987819c9..76e15fe78 100644
--- a/.gitignore
+++ b/.gitignore
@@ -215,6 +215,7 @@ bitwarden_license/src/Sso/wwwroot/css
**/CoverageOutput/
.idea/*
**/**.swp
+.mono
src/Admin/Admin.zip
src/Api/Api.zip
From e2d2a2ba90ea8716e14dc5d30e452acb0c1d88bd Mon Sep 17 00:00:00 2001
From: Addison Beck
Date: Mon, 1 Jul 2024 11:52:58 -0400
Subject: [PATCH 19/40] Add a master password hash check to account recovery
enrollment (#4154)
---
.../OrganizationUsersController.cs | 5 ++++
.../OrganizationUserRequestModels.cs | 3 +-
.../OrganizationUsersControllerTests.cs | 29 +++++++++++++++++++
3 files changed, 36 insertions(+), 1 deletion(-)
diff --git a/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs b/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs
index 0b93839d2..cc5b76a24 100644
--- a/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs
+++ b/src/Api/AdminConsole/Controllers/OrganizationUsersController.cs
@@ -456,6 +456,11 @@ public class OrganizationUsersController : Controller
throw new UnauthorizedAccessException();
}
+ if (!string.IsNullOrWhiteSpace(model.ResetPasswordKey) && !await _userService.VerifySecretAsync(user, model.Secret))
+ {
+ throw new BadRequestException("Incorrect password");
+ }
+
var callingUserId = user.Id;
await _organizationService.UpdateUserResetPasswordEnrollmentAsync(
orgId, userId, model.ResetPasswordKey, callingUserId);
diff --git a/src/Api/AdminConsole/Models/Request/Organizations/OrganizationUserRequestModels.cs b/src/Api/AdminConsole/Models/Request/Organizations/OrganizationUserRequestModels.cs
index 0313d8579..44e9853bb 100644
--- a/src/Api/AdminConsole/Models/Request/Organizations/OrganizationUserRequestModels.cs
+++ b/src/Api/AdminConsole/Models/Request/Organizations/OrganizationUserRequestModels.cs
@@ -1,4 +1,5 @@
using System.ComponentModel.DataAnnotations;
+using Bit.Api.Auth.Models.Request.Accounts;
using Bit.Api.Models.Request;
using Bit.Core.Entities;
using Bit.Core.Enums;
@@ -98,7 +99,7 @@ public class OrganizationUserUpdateRequestModel
}
}
-public class OrganizationUserResetPasswordEnrollmentRequestModel
+public class OrganizationUserResetPasswordEnrollmentRequestModel : SecretVerificationRequestModel
{
public string ResetPasswordKey { get; set; }
}
diff --git a/test/Api.Test/AdminConsole/Controllers/OrganizationUsersControllerTests.cs b/test/Api.Test/AdminConsole/Controllers/OrganizationUsersControllerTests.cs
index 5fef2885e..80c458d69 100644
--- a/test/Api.Test/AdminConsole/Controllers/OrganizationUsersControllerTests.cs
+++ b/test/Api.Test/AdminConsole/Controllers/OrganizationUsersControllerTests.cs
@@ -40,6 +40,7 @@ public class OrganizationUsersControllerTests
{
orgUser.Status = Core.Enums.OrganizationUserStatusType.Invited;
sutProvider.GetDependency().GetUserByPrincipalAsync(default).ReturnsForAnyArgs(user);
+ sutProvider.GetDependency().VerifySecretAsync(default, default).ReturnsForAnyArgs(true);
sutProvider.GetDependency().GetByOrganizationAsync(default, default).ReturnsForAnyArgs(orgUser);
await sutProvider.Sut.PutResetPasswordEnrollment(orgId, userId, model);
@@ -54,6 +55,7 @@ public class OrganizationUsersControllerTests
{
orgUser.Status = Core.Enums.OrganizationUserStatusType.Confirmed;
sutProvider.GetDependency().GetUserByPrincipalAsync(default).ReturnsForAnyArgs(user);
+ sutProvider.GetDependency().VerifySecretAsync(default, default).ReturnsForAnyArgs(true);
sutProvider.GetDependency().GetByOrganizationAsync(default, default).ReturnsForAnyArgs(orgUser);
await sutProvider.Sut.PutResetPasswordEnrollment(orgId, userId, model);
@@ -61,6 +63,33 @@ public class OrganizationUsersControllerTests
await sutProvider.GetDependency().Received(0).AcceptOrgUserByOrgIdAsync(orgId, user, sutProvider.GetDependency());
}
+ [Theory]
+ [BitAutoData]
+ public async Task PutResetPasswordEnrollment_PasswordValidationFails_Throws(Guid orgId, Guid userId, OrganizationUserResetPasswordEnrollmentRequestModel model,
+ User user, SutProvider sutProvider)
+ {
+ model.MasterPasswordHash = "NotThePassword";
+ sutProvider.GetDependency().GetUserByPrincipalAsync(default).ReturnsForAnyArgs(user);
+ await Assert.ThrowsAsync(async () => await sutProvider.Sut.PutResetPasswordEnrollment(orgId, userId, model));
+ }
+
+ [Theory]
+ [BitAutoData]
+ public async Task PutResetPasswordEnrollment_PasswordValidationPasses_Continues(Guid orgId, Guid userId, OrganizationUserResetPasswordEnrollmentRequestModel model,
+ User user, OrganizationUser orgUser, SutProvider sutProvider)
+ {
+ sutProvider.GetDependency().GetUserByPrincipalAsync(default).ReturnsForAnyArgs(user);
+ sutProvider.GetDependency().VerifySecretAsync(user, model.Secret).Returns(true);
+ sutProvider.GetDependency().GetByOrganizationAsync(default, default).ReturnsForAnyArgs(orgUser);
+ await sutProvider.Sut.PutResetPasswordEnrollment(orgId, userId, model);
+ await sutProvider.GetDependency().Received(1).UpdateUserResetPasswordEnrollmentAsync(
+ orgId,
+ userId,
+ model.ResetPasswordKey,
+ user.Id
+ );
+ }
+
[Theory]
[BitAutoData]
public async Task Accept_RequiresKnownUser(Guid orgId, Guid orgUserId, OrganizationUserAcceptRequestModel model,
From 554a004d7afe9dcefce55f2a5e9ed4b4f9086cb6 Mon Sep 17 00:00:00 2001
From: Bitwarden DevOps
<106330231+bitwarden-devops-bot@users.noreply.github.com>
Date: Mon, 1 Jul 2024 13:02:16 -0400
Subject: [PATCH 20/40] Bumped version to 2024.7.0 (#4447)
---
Directory.Build.props | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/Directory.Build.props b/Directory.Build.props
index 380230e26..019e3a11f 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -3,7 +3,7 @@
net8.0
- 2024.6.2
+ 2024.7.0
Bit.$(MSBuildProjectName)
enable
From e8c5d730621d196e4f5d2237b32908f58f396b6a Mon Sep 17 00:00:00 2001
From: Matt Bishop
Date: Tue, 2 Jul 2024 10:08:34 -0400
Subject: [PATCH 21/40] Sync EF migrations for .NET / EF Core 8 (#4448)
* Sync EF migrations for .NET 8
* Format
* Redo migrations with billing fix
* Forgot to format again
---
.../Billing/Entities/ProviderInvoiceItem.cs | 7 +-
.../20240701175219_Net8Sync.Designer.cs | 2644 ++++++++++++++++
.../Migrations/20240701175219_Net8Sync.cs | 200 ++
.../DatabaseContextModelSnapshot.cs | 29 +-
.../20240701175214_Net8Sync.Designer.cs | 2651 +++++++++++++++++
.../Migrations/20240701175214_Net8Sync.cs | 125 +
.../DatabaseContextModelSnapshot.cs | 20 +-
.../20240701175209_Net8Sync.Designer.cs | 2633 ++++++++++++++++
.../Migrations/20240701175209_Net8Sync.cs | 27 +
.../DatabaseContextModelSnapshot.cs | 10 +-
10 files changed, 8323 insertions(+), 23 deletions(-)
create mode 100644 util/MySqlMigrations/Migrations/20240701175219_Net8Sync.Designer.cs
create mode 100644 util/MySqlMigrations/Migrations/20240701175219_Net8Sync.cs
create mode 100644 util/PostgresMigrations/Migrations/20240701175214_Net8Sync.Designer.cs
create mode 100644 util/PostgresMigrations/Migrations/20240701175214_Net8Sync.cs
create mode 100644 util/SqliteMigrations/Migrations/20240701175209_Net8Sync.Designer.cs
create mode 100644 util/SqliteMigrations/Migrations/20240701175209_Net8Sync.cs
diff --git a/src/Core/Billing/Entities/ProviderInvoiceItem.cs b/src/Core/Billing/Entities/ProviderInvoiceItem.cs
index 568010123..2018e4288 100644
--- a/src/Core/Billing/Entities/ProviderInvoiceItem.cs
+++ b/src/Core/Billing/Entities/ProviderInvoiceItem.cs
@@ -1,4 +1,5 @@
-using Bit.Core.Entities;
+using System.ComponentModel.DataAnnotations;
+using Bit.Core.Entities;
using Bit.Core.Utilities;
namespace Bit.Core.Billing.Entities;
@@ -7,9 +8,13 @@ public class ProviderInvoiceItem : ITableObject
{
public Guid Id { get; set; }
public Guid ProviderId { get; set; }
+ [MaxLength(50)]
public string InvoiceId { get; set; }
+ [MaxLength(50)]
public string InvoiceNumber { get; set; }
+ [MaxLength(50)]
public string ClientName { get; set; }
+ [MaxLength(50)]
public string PlanName { get; set; }
public int AssignedSeats { get; set; }
public int UsedSeats { get; set; }
diff --git a/util/MySqlMigrations/Migrations/20240701175219_Net8Sync.Designer.cs b/util/MySqlMigrations/Migrations/20240701175219_Net8Sync.Designer.cs
new file mode 100644
index 000000000..98b800668
--- /dev/null
+++ b/util/MySqlMigrations/Migrations/20240701175219_Net8Sync.Designer.cs
@@ -0,0 +1,2644 @@
+//
+using System;
+using Bit.Infrastructure.EntityFramework.Repositories;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace Bit.MySqlMigrations.Migrations
+{
+ [DbContext(typeof(DatabaseContext))]
+ [Migration("20240701175219_Net8Sync")]
+ partial class Net8Sync
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "8.0.6")
+ .HasAnnotation("Relational:MaxIdentifierLength", 64);
+
+ MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder);
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Organization", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("AllowAdminAccessToAllCollectionItems")
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue(true);
+
+ b.Property("BillingEmail")
+ .HasMaxLength(256)
+ .HasColumnType("varchar(256)");
+
+ b.Property("BusinessAddress1")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("BusinessAddress2")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("BusinessAddress3")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("BusinessCountry")
+ .HasMaxLength(2)
+ .HasColumnType("varchar(2)");
+
+ b.Property("BusinessName")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("BusinessTaxNumber")
+ .HasMaxLength(30)
+ .HasColumnType("varchar(30)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Enabled")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("ExpirationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("FlexibleCollections")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("Gateway")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("GatewayCustomerId")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("GatewaySubscriptionId")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("Identifier")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("LicenseKey")
+ .HasMaxLength(100)
+ .HasColumnType("varchar(100)");
+
+ b.Property("LimitCollectionCreationDeletion")
+ .HasColumnType("tinyint(1)")
+ .HasDefaultValue(true);
+
+ b.Property("MaxAutoscaleSeats")
+ .HasColumnType("int");
+
+ b.Property("MaxAutoscaleSmSeats")
+ .HasColumnType("int");
+
+ b.Property("MaxAutoscaleSmServiceAccounts")
+ .HasColumnType("int");
+
+ b.Property("MaxCollections")
+ .HasColumnType("smallint");
+
+ b.Property("MaxStorageGb")
+ .HasColumnType("smallint");
+
+ b.Property("Name")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("OwnersNotifiedOfAutoscaling")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Plan")
+ .HasMaxLength(50)
+ .HasColumnType("varchar(50)");
+
+ b.Property("PlanType")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("PrivateKey")
+ .HasColumnType("longtext");
+
+ b.Property("PublicKey")
+ .HasColumnType("longtext");
+
+ b.Property("ReferenceData")
+ .HasColumnType("longtext");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Seats")
+ .HasColumnType("int");
+
+ b.Property("SelfHost")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("SmSeats")
+ .HasColumnType("int");
+
+ b.Property("SmServiceAccounts")
+ .HasColumnType("int");
+
+ b.Property("Status")
+ .HasColumnType("tinyint unsigned");
+
+ b.Property("Storage")
+ .HasColumnType("bigint");
+
+ b.Property("TwoFactorProviders")
+ .HasColumnType("longtext");
+
+ b.Property("Use2fa")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseApi")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseCustomPermissions")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseDirectory")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseEvents")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseGroups")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseKeyConnector")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UsePasswordManager")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UsePolicies")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseResetPassword")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseScim")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseSecretsManager")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseSso")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UseTotp")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("UsersGetPremium")
+ .HasColumnType("tinyint(1)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Id", "Enabled")
+ .HasAnnotation("Npgsql:IndexInclude", new[] { "UseTotp" });
+
+ b.ToTable("Organization", (string)null);
+ });
+
+ modelBuilder.Entity("Bit.Infrastructure.EntityFramework.AdminConsole.Models.Policy", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("char(36)");
+
+ b.Property("CreationDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property("Data")
+ .HasColumnType("longtext");
+
+ b.Property("Enabled")
+ .HasColumnType("tinyint(1)");
+
+ b.Property("OrganizationId")
+ .HasColumnType("char(36)");
+
+ b.Property("RevisionDate")
+ .HasColumnType("datetime(6)");
+
+ b.Property