Merge remote-tracking branch 'origin/v13/dev' into release/13.0
This commit is contained in:
@@ -68,18 +68,24 @@ public interface IFileSource
|
||||
/// <param name="fileTypes">A collection of file types which can store the files.</param>
|
||||
void GetFiles(IEnumerable<StringUdi> udis, IFileTypeCollection fileTypes);
|
||||
|
||||
// TODO (V14): Remove obsolete method and default implementation for GetFilesAsync overloads.
|
||||
|
||||
/// <summary>
|
||||
/// Gets files and store them using a file store.
|
||||
/// </summary>
|
||||
/// <param name="udis">The udis of the files to get.</param>
|
||||
/// <param name="fileTypes">A collection of file types which can store the files.</param>
|
||||
/// <param name="token">A cancellation token.</param>
|
||||
[Obsolete("Please use the method overload taking all parameters. This method overload will be removed in Umbraco 14.")]
|
||||
Task GetFilesAsync(IEnumerable<StringUdi> udis, IFileTypeCollection fileTypes, CancellationToken token);
|
||||
|
||||
///// <summary>
|
||||
///// Gets the content of a file as a bytes array.
|
||||
///// </summary>
|
||||
///// <param name="Udi">A file entity identifier.</param>
|
||||
///// <returns>A byte array containing the file content.</returns>
|
||||
// byte[] GetFileBytes(StringUdi Udi);
|
||||
/// <summary>
|
||||
/// Gets files and store them using a file store.
|
||||
/// </summary>
|
||||
/// <param name="udis">The udis of the files to get.</param>
|
||||
/// <param name="fileTypes">A collection of file types which can store the files.</param>
|
||||
/// <param name="continueOnFileNotFound">A flag indicating whether to continue if a file isn't found or to stop and throw a FileNotFoundException.</param>
|
||||
/// <param name="token">A cancellation token.</param>
|
||||
Task GetFilesAsync(IEnumerable<StringUdi> udis, IFileTypeCollection fileTypes, bool continueOnFileNotFound, CancellationToken token)
|
||||
=> GetFilesAsync(udis, fileTypes, token);
|
||||
}
|
||||
|
||||
23
src/Umbraco.Core/Routing/IRedirectTracker.cs
Normal file
23
src/Umbraco.Core/Routing/IRedirectTracker.cs
Normal file
@@ -0,0 +1,23 @@
|
||||
using Umbraco.Cms.Core.Models;
|
||||
|
||||
namespace Umbraco.Cms.Core.Routing
|
||||
{
|
||||
/// <summary>
|
||||
/// Determines and records redirects for a content item following an update that may change it's public URL.
|
||||
/// </summary>
|
||||
public interface IRedirectTracker
|
||||
{
|
||||
/// <summary>
|
||||
/// Stores the existing routes for a content item before update.
|
||||
/// </summary>
|
||||
/// <param name="entity">The content entity updated.</param>
|
||||
/// <param name="oldRoutes">The dictionary of routes for population.</param>
|
||||
void StoreOldRoute(IContent entity, Dictionary<(int ContentId, string Culture), (Guid ContentKey, string OldRoute)> oldRoutes);
|
||||
|
||||
/// <summary>
|
||||
/// Creates appropriate redirects for the content item following an update.
|
||||
/// </summary>
|
||||
/// <param name="oldRoutes">The populated dictionary of old routes;</param>
|
||||
void CreateRedirects(IDictionary<(int ContentId, string Culture), (Guid ContentKey, string OldRoute)> oldRoutes);
|
||||
}
|
||||
}
|
||||
@@ -52,6 +52,7 @@ using Umbraco.Cms.Infrastructure.Migrations.PostMigrations;
|
||||
using Umbraco.Cms.Infrastructure.Migrations.Upgrade.V_8_0_0.DataTypes;
|
||||
using Umbraco.Cms.Infrastructure.Persistence;
|
||||
using Umbraco.Cms.Infrastructure.Persistence.Mappers;
|
||||
using Umbraco.Cms.Infrastructure.Routing;
|
||||
using Umbraco.Cms.Infrastructure.Runtime;
|
||||
using Umbraco.Cms.Infrastructure.Runtime.RuntimeModeValidators;
|
||||
using Umbraco.Cms.Infrastructure.Scoping;
|
||||
@@ -216,6 +217,9 @@ public static partial class UmbracoBuilderExtensions
|
||||
builder.Services.AddSingleton<ICronTabParser, NCronTabParser>();
|
||||
|
||||
builder.Services.AddTransient<INodeCountService, NodeCountService>();
|
||||
|
||||
builder.Services.AddSingleton<IRedirectTracker, RedirectTracker>();
|
||||
|
||||
builder.AddInstaller();
|
||||
|
||||
// Services required to run background jobs (with out the handler)
|
||||
|
||||
125
src/Umbraco.Infrastructure/Routing/RedirectTracker.cs
Normal file
125
src/Umbraco.Infrastructure/Routing/RedirectTracker.cs
Normal file
@@ -0,0 +1,125 @@
|
||||
using System.Diagnostics.CodeAnalysis;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Umbraco.Cms.Core;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Models.PublishedContent;
|
||||
using Umbraco.Cms.Core.PublishedCache;
|
||||
using Umbraco.Cms.Core.Routing;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Cms.Core.Web;
|
||||
using Umbraco.Extensions;
|
||||
|
||||
namespace Umbraco.Cms.Infrastructure.Routing
|
||||
{
|
||||
internal class RedirectTracker : IRedirectTracker
|
||||
{
|
||||
private readonly IUmbracoContextFactory _umbracoContextFactory;
|
||||
private readonly IVariationContextAccessor _variationContextAccessor;
|
||||
private readonly ILocalizationService _localizationService;
|
||||
private readonly IRedirectUrlService _redirectUrlService;
|
||||
private readonly ILogger<RedirectTracker> _logger;
|
||||
|
||||
public RedirectTracker(
|
||||
IUmbracoContextFactory umbracoContextFactory,
|
||||
IVariationContextAccessor variationContextAccessor,
|
||||
ILocalizationService localizationService,
|
||||
IRedirectUrlService redirectUrlService,
|
||||
ILogger<RedirectTracker> logger)
|
||||
{
|
||||
_umbracoContextFactory = umbracoContextFactory;
|
||||
_variationContextAccessor = variationContextAccessor;
|
||||
_localizationService = localizationService;
|
||||
_redirectUrlService = redirectUrlService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void StoreOldRoute(IContent entity, Dictionary<(int ContentId, string Culture), (Guid ContentKey, string OldRoute)> oldRoutes)
|
||||
{
|
||||
using UmbracoContextReference reference = _umbracoContextFactory.EnsureUmbracoContext();
|
||||
IPublishedContentCache? contentCache = reference.UmbracoContext.Content;
|
||||
IPublishedContent? entityContent = contentCache?.GetById(entity.Id);
|
||||
if (entityContent is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Get the default affected cultures by going up the tree until we find the first culture variant entity (default to no cultures)
|
||||
var defaultCultures = new Lazy<string[]>(() => entityContent.AncestorsOrSelf().FirstOrDefault(a => a.Cultures.Any())?.Cultures.Keys.ToArray() ?? Array.Empty<string>());
|
||||
|
||||
// Get all language ISO codes (in case we're dealing with invariant content with variant ancestors)
|
||||
var languageIsoCodes = new Lazy<string[]>(() => _localizationService.GetAllLanguages().Select(x => x.IsoCode).ToArray());
|
||||
|
||||
foreach (IPublishedContent publishedContent in entityContent.DescendantsOrSelf(_variationContextAccessor))
|
||||
{
|
||||
// If this entity defines specific cultures, use those instead of the default ones
|
||||
IEnumerable<string> cultures = publishedContent.Cultures.Any() ? publishedContent.Cultures.Keys : defaultCultures.Value;
|
||||
|
||||
foreach (var culture in cultures)
|
||||
{
|
||||
try
|
||||
{
|
||||
var route = contentCache?.GetRouteById(publishedContent.Id, culture);
|
||||
if (IsValidRoute(route))
|
||||
{
|
||||
oldRoutes[(publishedContent.Id, culture)] = (publishedContent.Key, route);
|
||||
}
|
||||
else if (string.IsNullOrEmpty(culture))
|
||||
{
|
||||
// Retry using all languages, if this is invariant but has a variant ancestor.
|
||||
foreach (string languageIsoCode in languageIsoCodes.Value)
|
||||
{
|
||||
route = contentCache?.GetRouteById(publishedContent.Id, languageIsoCode);
|
||||
if (IsValidRoute(route))
|
||||
{
|
||||
oldRoutes[(publishedContent.Id, languageIsoCode)] = (publishedContent.Key, route);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogWarning(ex, "Could not register redirects because the old route couldn't be retrieved for content ID {ContentId} and culture '{Culture}'.", publishedContent.Id, culture);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <inheritdoc/>
|
||||
public void CreateRedirects(IDictionary<(int ContentId, string Culture), (Guid ContentKey, string OldRoute)> oldRoutes)
|
||||
{
|
||||
if (!oldRoutes.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
using UmbracoContextReference reference = _umbracoContextFactory.EnsureUmbracoContext();
|
||||
IPublishedContentCache? contentCache = reference.UmbracoContext.Content;
|
||||
if (contentCache == null)
|
||||
{
|
||||
_logger.LogWarning("Could not track redirects because there is no published content cache available on the current published snapshot.");
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (((int contentId, string culture), (Guid contentKey, string oldRoute)) in oldRoutes)
|
||||
{
|
||||
try
|
||||
{
|
||||
var newRoute = contentCache.GetRouteById(contentId, culture);
|
||||
if (!IsValidRoute(newRoute) || oldRoute == newRoute)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
_redirectUrlService.Register(oldRoute, contentKey, culture);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_logger.LogWarning(ex, "Could not track redirects because the new route couldn't be retrieved for content ID {ContentId} and culture '{Culture}'.", contentId, culture);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool IsValidRoute([NotNullWhen(true)] string? route) => route is not null && !route.StartsWith("err/");
|
||||
}
|
||||
}
|
||||
@@ -1,17 +1,11 @@
|
||||
// Copyright (c) Umbraco.
|
||||
// See LICENSE for more details.
|
||||
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Umbraco.Cms.Core.Configuration.Models;
|
||||
using Umbraco.Cms.Core.DependencyInjection;
|
||||
using Umbraco.Cms.Core.Events;
|
||||
using Umbraco.Cms.Core.Models;
|
||||
using Umbraco.Cms.Core.Models.PublishedContent;
|
||||
using Umbraco.Cms.Core.Notifications;
|
||||
using Umbraco.Cms.Core.PublishedCache;
|
||||
using Umbraco.Cms.Core.Services;
|
||||
using Umbraco.Extensions;
|
||||
|
||||
namespace Umbraco.Cms.Core.Routing;
|
||||
@@ -30,44 +24,17 @@ public sealed class RedirectTrackingHandler :
|
||||
INotificationHandler<ContentMovedNotification>
|
||||
{
|
||||
private const string NotificationStateKey = "Umbraco.Cms.Core.Routing.RedirectTrackingHandler";
|
||||
private readonly ILogger<RedirectTrackingHandler> _logger;
|
||||
private readonly IPublishedSnapshotAccessor _publishedSnapshotAccessor;
|
||||
private readonly IRedirectUrlService _redirectUrlService;
|
||||
private readonly IVariationContextAccessor _variationContextAccessor;private readonly ILocalizationService _localizationService;
|
||||
|
||||
private readonly IOptionsMonitor<WebRoutingSettings> _webRoutingSettings;
|
||||
private readonly IRedirectTracker _redirectTracker;
|
||||
|
||||
public RedirectTrackingHandler(
|
||||
ILogger<RedirectTrackingHandler> logger,
|
||||
IOptionsMonitor<WebRoutingSettings> webRoutingSettings,
|
||||
IPublishedSnapshotAccessor publishedSnapshotAccessor,
|
||||
IRedirectUrlService redirectUrlService,
|
||||
IVariationContextAccessor variationContextAccessor,
|
||||
ILocalizationService localizationService){
|
||||
_logger = logger;
|
||||
IRedirectTracker redirectTracker)
|
||||
{
|
||||
_webRoutingSettings = webRoutingSettings;
|
||||
_publishedSnapshotAccessor = publishedSnapshotAccessor;
|
||||
_redirectUrlService = redirectUrlService;
|
||||
_variationContextAccessor = variationContextAccessor;
|
||||
_localizationService = localizationService;
|
||||
}
|
||||
|
||||
[Obsolete("Use ctor with all params")]
|
||||
public RedirectTrackingHandler(
|
||||
ILogger<RedirectTrackingHandler> logger,
|
||||
IOptionsMonitor<WebRoutingSettings> webRoutingSettings,
|
||||
IPublishedSnapshotAccessor publishedSnapshotAccessor,
|
||||
IRedirectUrlService redirectUrlService,
|
||||
IVariationContextAccessor variationContextAccessor)
|
||||
:this(
|
||||
logger,
|
||||
webRoutingSettings,
|
||||
publishedSnapshotAccessor,
|
||||
redirectUrlService,
|
||||
variationContextAccessor,
|
||||
StaticServiceProvider.Instance.GetRequiredService<ILocalizationService>())
|
||||
{
|
||||
|
||||
}
|
||||
_redirectTracker = redirectTracker;
|
||||
}
|
||||
|
||||
public void Handle(ContentMovedNotification notification) => CreateRedirectsForOldRoutes(notification);
|
||||
|
||||
@@ -79,150 +46,40 @@ public sealed class RedirectTrackingHandler :
|
||||
public void Handle(ContentPublishingNotification notification) =>
|
||||
StoreOldRoutes(notification.PublishedEntities, notification);
|
||||
|
||||
private static bool IsNotRoute(string? route) =>
|
||||
|
||||
// null if content not found
|
||||
// err/- if collision or anomaly or ...
|
||||
route == null || route.StartsWith("err/");
|
||||
|
||||
private void StoreOldRoutes(IEnumerable<IContent> entities, IStatefulNotification notification)
|
||||
{
|
||||
// don't let the notification handlers kick in if Redirect Tracking is turned off in the config
|
||||
// Don't let the notification handlers kick in if redirect tracking is turned off in the config.
|
||||
if (_webRoutingSettings.CurrentValue.DisableRedirectUrlTracking)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
OldRoutesDictionary oldRoutes = GetOldRoutes(notification);
|
||||
Dictionary<(int ContentId, string Culture), (Guid ContentKey, string OldRoute)> oldRoutes = GetOldRoutes(notification);
|
||||
foreach (IContent entity in entities)
|
||||
{
|
||||
StoreOldRoute(entity, oldRoutes);
|
||||
_redirectTracker.StoreOldRoute(entity, oldRoutes);
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateRedirectsForOldRoutes(IStatefulNotification notification)
|
||||
{
|
||||
// don't let the notification handlers kick in if Redirect Tracking is turned off in the config
|
||||
// Don't let the notification handlers kick in if redirect tracking is turned off in the config.
|
||||
if (_webRoutingSettings.CurrentValue.DisableRedirectUrlTracking)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
OldRoutesDictionary oldRoutes = GetOldRoutes(notification);
|
||||
CreateRedirects(oldRoutes);
|
||||
Dictionary<(int ContentId, string Culture), (Guid ContentKey, string OldRoute)> oldRoutes = GetOldRoutes(notification);
|
||||
_redirectTracker.CreateRedirects(oldRoutes);
|
||||
}
|
||||
|
||||
private OldRoutesDictionary GetOldRoutes(IStatefulNotification notification)
|
||||
private Dictionary<(int ContentId, string Culture), (Guid ContentKey, string OldRoute)> GetOldRoutes(IStatefulNotification notification)
|
||||
{
|
||||
if (notification.State.ContainsKey(NotificationStateKey) == false)
|
||||
{
|
||||
notification.State[NotificationStateKey] = new OldRoutesDictionary();
|
||||
notification.State[NotificationStateKey] = new Dictionary<(int ContentId, string Culture), (Guid ContentKey, string OldRoute)>();
|
||||
}
|
||||
|
||||
return (OldRoutesDictionary?)notification.State[NotificationStateKey] ?? new OldRoutesDictionary();
|
||||
}
|
||||
|
||||
private void StoreOldRoute(IContent entity, OldRoutesDictionary oldRoutes)
|
||||
{
|
||||
if (!_publishedSnapshotAccessor.TryGetPublishedSnapshot(out IPublishedSnapshot? publishedSnapshot))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
IPublishedContentCache? contentCache = publishedSnapshot?.Content;
|
||||
IPublishedContent? entityContent = contentCache?.GetById(entity.Id);
|
||||
if (entityContent is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// get the default affected cultures by going up the tree until we find the first culture variant entity (default to no cultures)
|
||||
var defaultCultures = entityContent.AncestorsOrSelf().FirstOrDefault(a => a.Cultures.Any())?.Cultures.Keys
|
||||
.ToArray()
|
||||
?? Array.Empty<string>();
|
||||
|
||||
foreach (IPublishedContent publishedContent in entityContent.DescendantsOrSelf(_variationContextAccessor))
|
||||
{
|
||||
// if this entity defines specific cultures, use those instead of the default ones
|
||||
IEnumerable<string> cultures =
|
||||
publishedContent.Cultures.Any() ? publishedContent.Cultures.Keys : defaultCultures;
|
||||
|
||||
foreach (var culture in cultures)
|
||||
{
|
||||
var route = contentCache?.GetRouteById(publishedContent.Id, culture);
|
||||
if (!IsNotRoute(route))
|
||||
{
|
||||
oldRoutes[new ContentIdAndCulture(publishedContent.Id, culture)] = new ContentKeyAndOldRoute(publishedContent.Key, route!);
|
||||
}
|
||||
else if (string.IsNullOrEmpty(culture))
|
||||
{
|
||||
// Retry using all languages, if this is invariant but has a variant ancestor
|
||||
var languages = _localizationService.GetAllLanguages();
|
||||
foreach (var language in languages)
|
||||
{
|
||||
route = contentCache?.GetRouteById(publishedContent.Id, language.IsoCode);
|
||||
if (!IsNotRoute(route))
|
||||
{
|
||||
oldRoutes[new ContentIdAndCulture(publishedContent.Id, language.IsoCode)] =
|
||||
new ContentKeyAndOldRoute(publishedContent.Key, route!);
|
||||
}
|
||||
}
|
||||
}}
|
||||
}
|
||||
}
|
||||
|
||||
private void CreateRedirects(OldRoutesDictionary oldRoutes)
|
||||
{
|
||||
if (!_publishedSnapshotAccessor.TryGetPublishedSnapshot(out IPublishedSnapshot? publishedSnapshot))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
IPublishedContentCache? contentCache = publishedSnapshot?.Content;
|
||||
|
||||
if (contentCache == null)
|
||||
{
|
||||
_logger.LogWarning("Could not track redirects because there is no current published snapshot available.");
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (KeyValuePair<ContentIdAndCulture, ContentKeyAndOldRoute> oldRoute in oldRoutes)
|
||||
{
|
||||
var newRoute = contentCache.GetRouteById(oldRoute.Key.ContentId, oldRoute.Key.Culture);
|
||||
if (IsNotRoute(newRoute) || oldRoute.Value.OldRoute == newRoute)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
_redirectUrlService.Register(oldRoute.Value.OldRoute, oldRoute.Value.ContentKey, oldRoute.Key.Culture);
|
||||
}
|
||||
}
|
||||
|
||||
private class ContentIdAndCulture : Tuple<int, string>
|
||||
{
|
||||
public ContentIdAndCulture(int contentId, string culture)
|
||||
: base(contentId, culture)
|
||||
{
|
||||
}
|
||||
|
||||
public int ContentId => Item1;
|
||||
|
||||
public string Culture => Item2;
|
||||
}
|
||||
|
||||
private class ContentKeyAndOldRoute : Tuple<Guid, string>
|
||||
{
|
||||
public ContentKeyAndOldRoute(Guid contentKey, string oldRoute)
|
||||
: base(contentKey, oldRoute)
|
||||
{
|
||||
}
|
||||
|
||||
public Guid ContentKey => Item1;
|
||||
|
||||
public string OldRoute => Item2;
|
||||
}
|
||||
|
||||
private class OldRoutesDictionary : Dictionary<ContentIdAndCulture, ContentKeyAndOldRoute>
|
||||
{
|
||||
return (Dictionary<(int ContentId, string Culture), (Guid ContentKey, string OldRoute)>?)notification.State[NotificationStateKey]!;
|
||||
}
|
||||
}
|
||||
|
||||
203
src/Umbraco.Web.UI.Client/package-lock.json
generated
203
src/Umbraco.Web.UI.Client/package-lock.json
generated
@@ -7,7 +7,7 @@
|
||||
"name": "ui",
|
||||
"dependencies": {
|
||||
"@microsoft/signalr": "7.0.12",
|
||||
"ace-builds": "1.30.0",
|
||||
"ace-builds": "1.31.0",
|
||||
"angular": "1.8.3",
|
||||
"angular-animate": "1.8.3",
|
||||
"angular-aria": "1.8.3",
|
||||
@@ -47,7 +47,7 @@
|
||||
"@babel/preset-env": "7.21.5",
|
||||
"autoprefixer": "10.4.16",
|
||||
"cssnano": "6.0.1",
|
||||
"eslint": "8.51.0",
|
||||
"eslint": "8.52.0",
|
||||
"gulp": "4.0.2",
|
||||
"gulp-angular-embed-templates": "2.3.0",
|
||||
"gulp-babel": "8.0.0",
|
||||
@@ -296,9 +296,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
@@ -1875,9 +1875,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/js": {
|
||||
"version": "8.51.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz",
|
||||
"integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==",
|
||||
"version": "8.52.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.52.0.tgz",
|
||||
"integrity": "sha512-mjZVbpaeMZludF2fsWLD0Z9gCref1Tk4i9+wddjRvpUNqqcndPkBD09N/Mapey0b3jaXbLm2kICwFv2E64QinA==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
@@ -1991,12 +1991,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@humanwhocodes/config-array": {
|
||||
"version": "0.11.11",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz",
|
||||
"integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==",
|
||||
"version": "0.11.13",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz",
|
||||
"integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@humanwhocodes/object-schema": "^1.2.1",
|
||||
"@humanwhocodes/object-schema": "^2.0.1",
|
||||
"debug": "^4.1.1",
|
||||
"minimatch": "^3.0.5"
|
||||
},
|
||||
@@ -2018,9 +2018,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@humanwhocodes/object-schema": {
|
||||
"version": "1.2.1",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
|
||||
"integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
|
||||
"version": "2.0.1",
|
||||
"resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz",
|
||||
"integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@jridgewell/gen-mapping": {
|
||||
@@ -2170,10 +2170,13 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/cors": {
|
||||
"version": "2.8.12",
|
||||
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz",
|
||||
"integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==",
|
||||
"dev": true
|
||||
"version": "2.8.15",
|
||||
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.15.tgz",
|
||||
"integrity": "sha512-n91JxbNLD8eQIuXDIChAN1tCKNWCEgpceU9b7ZMbFA+P+Q4yIeh80jizFLEvolRPc1ES0VdwFlGv+kJTSirogw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/eslint": {
|
||||
"version": "8.44.5",
|
||||
@@ -2226,6 +2229,12 @@
|
||||
"dev": true,
|
||||
"optional": true
|
||||
},
|
||||
"node_modules/@ungap/structured-clone": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
|
||||
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/abab": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz",
|
||||
@@ -2257,9 +2266,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/ace-builds": {
|
||||
"version": "1.30.0",
|
||||
"resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.30.0.tgz",
|
||||
"integrity": "sha512-ZC+G1ozrrVCVL/KPkeU9R7TEwYeNJUYRrjnEvNhF8r2+WR2tkcCjmduL8M6D3abIdf/16ccEXHtpoRBhAnTyCw=="
|
||||
"version": "1.31.0",
|
||||
"resolved": "https://registry.npmjs.org/ace-builds/-/ace-builds-1.31.0.tgz",
|
||||
"integrity": "sha512-nitIhcUYA6wyO3lo2WZBPX5fcjllW6XFt4EFyHwcN2Fp70/IZwz8tdw6a0+8udDEwDj/ebt3aWEClIyCs/6qYA=="
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.9.0",
|
||||
@@ -2340,7 +2349,7 @@
|
||||
"node_modules/angular-chart.js": {
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/angular-chart.js/-/angular-chart.js-1.1.1.tgz",
|
||||
"integrity": "sha1-SfDhjQgXYrbUyXkeSHr/L7sw9a4=",
|
||||
"integrity": "sha512-6lqkeQvoEOMqtIzHLeOC68fdeqjdgeQ4b3bUG3Lm6X1Y6IBM0m91G6VuVA3EV0puwPuIWz4VYkzjd0DPHhIcpA==",
|
||||
"dependencies": {
|
||||
"angular": "1.x",
|
||||
"chart.js": "2.3.x"
|
||||
@@ -2349,7 +2358,7 @@
|
||||
"node_modules/angular-chart.js/node_modules/chart.js": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.3.0.tgz",
|
||||
"integrity": "sha1-QEYOSOLEF8BfwzJc2E97AA3H19Y=",
|
||||
"integrity": "sha512-LwJ6j1FNneojxFYewnz9QDQyjV++KN2s/Lgm0eipDUaKV3Fj5jOA3xtJg7AUGFcbhsYB4+Kn16c1bXwRxbOXow==",
|
||||
"dependencies": {
|
||||
"chartjs-color": "^2.0.0",
|
||||
"moment": "^2.10.6"
|
||||
@@ -3656,7 +3665,7 @@
|
||||
"node_modules/cacheable-request": {
|
||||
"version": "2.1.4",
|
||||
"resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
|
||||
"integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
|
||||
"integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
@@ -5528,9 +5537,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/engine.io": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz",
|
||||
"integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==",
|
||||
"version": "6.5.3",
|
||||
"resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.3.tgz",
|
||||
"integrity": "sha512-IML/R4eG/pUS5w7OfcDE0jKrljWS9nwnEfsxWCIJF5eO6AHo6+Hlv+lQbdlAYsiJPHzUthLm1RUjnBzWOs45cw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/cookie": "^0.4.1",
|
||||
@@ -5541,26 +5550,26 @@
|
||||
"cookie": "~0.4.1",
|
||||
"cors": "~2.8.5",
|
||||
"debug": "~4.3.1",
|
||||
"engine.io-parser": "~5.0.3",
|
||||
"ws": "~8.2.3"
|
||||
"engine.io-parser": "~5.2.1",
|
||||
"ws": "~8.11.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
"node": ">=10.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/engine.io-parser": {
|
||||
"version": "5.0.4",
|
||||
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.4.tgz",
|
||||
"integrity": "sha512-+nVFp+5z1E3HcToEnO7ZIj3g+3k9389DvWtvJZz0T6/eOCPIyyxehFcedoYrZQrp0LgQbD9pPXhpMBKMd5QURg==",
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.1.tgz",
|
||||
"integrity": "sha512-9JktcM3u18nU9N2Lz3bWeBgxVgOKpw7yhRaoxQA3FUDZzzw+9WlA6p4G4u0RixNkg14fH7EfEc/RhpurtiROTQ==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/engine.io/node_modules/ws": {
|
||||
"version": "8.2.3",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
|
||||
"integrity": "sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==",
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
|
||||
"integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
@@ -5797,18 +5806,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint": {
|
||||
"version": "8.51.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz",
|
||||
"integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==",
|
||||
"version": "8.52.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-8.52.0.tgz",
|
||||
"integrity": "sha512-zh/JHnaixqHZsolRB/w9/02akBk9EPrOs9JwcTP2ek7yL5bVvXuRariiaAjjoJ5DvuwQ1WAE/HsMz+w17YgBCg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.6.1",
|
||||
"@eslint/eslintrc": "^2.1.2",
|
||||
"@eslint/js": "8.51.0",
|
||||
"@humanwhocodes/config-array": "^0.11.11",
|
||||
"@eslint/js": "8.52.0",
|
||||
"@humanwhocodes/config-array": "^0.11.13",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
"@nodelib/fs.walk": "^1.2.8",
|
||||
"@ungap/structured-clone": "^1.2.0",
|
||||
"ajv": "^6.12.4",
|
||||
"chalk": "^4.0.0",
|
||||
"cross-spawn": "^7.0.2",
|
||||
@@ -6785,18 +6795,18 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/fast-xml-parser": {
|
||||
"version": "4.2.4",
|
||||
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.4.tgz",
|
||||
"integrity": "sha512-fbfMDvgBNIdDJLdLOwacjFAPYt67tr31H9ZhWSm45CDAxvd0I6WTlSOUo7K2P/K5sA5JgMKG64PI3DMcaFdWpQ==",
|
||||
"version": "4.3.2",
|
||||
"resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz",
|
||||
"integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==",
|
||||
"dev": true,
|
||||
"funding": [
|
||||
{
|
||||
"type": "paypal",
|
||||
"url": "https://paypal.me/naturalintelligence"
|
||||
},
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/NaturalIntelligence"
|
||||
},
|
||||
{
|
||||
"type": "paypal",
|
||||
"url": "https://paypal.me/naturalintelligence"
|
||||
}
|
||||
],
|
||||
"optional": true,
|
||||
@@ -7355,9 +7365,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/gifsicle": {
|
||||
"version": "5.2.1",
|
||||
"resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-5.2.1.tgz",
|
||||
"integrity": "sha512-9ewIQQCAnSmkU2DhuWafd1DdsgzAkKqIWnY+023xBLSiK9Az2TDUozWQW+SyRQgFMclbe6RQldUk/49TRO3Aqw==",
|
||||
"version": "5.3.0",
|
||||
"resolved": "https://registry.npmjs.org/gifsicle/-/gifsicle-5.3.0.tgz",
|
||||
"integrity": "sha512-FJTpgdj1Ow/FITB7SVza5HlzXa+/lqEY0tHQazAJbuAdvyJtkH4wIdsR2K414oaTwRXHFLLF+tYbipj+OpYg+Q==",
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"optional": true,
|
||||
@@ -7526,7 +7536,7 @@
|
||||
"node_modules/glob-base": {
|
||||
"version": "0.3.0",
|
||||
"resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz",
|
||||
"integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=",
|
||||
"integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"glob-parent": "^2.0.0",
|
||||
@@ -7539,7 +7549,7 @@
|
||||
"node_modules/glob-base/node_modules/glob-parent": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz",
|
||||
"integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=",
|
||||
"integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"is-glob": "^2.0.0"
|
||||
@@ -7569,7 +7579,7 @@
|
||||
"node_modules/glob-parent": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
|
||||
"integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
|
||||
"integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"is-glob": "^3.1.0",
|
||||
@@ -7591,7 +7601,7 @@
|
||||
"node_modules/glob-stream": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
|
||||
"integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
|
||||
"integrity": "sha512-uMbLGAP3S2aDOHUDfdoYcdIePUCfysbAd0IAoWVZbeGU/oNQ8asHVSshLDJUPWxfzj8zsCG7/XeHPHTtow0nsw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"extend": "^3.0.0",
|
||||
@@ -7789,7 +7799,7 @@
|
||||
"node_modules/gulp-angular-embed-templates": {
|
||||
"version": "2.3.0",
|
||||
"resolved": "https://registry.npmjs.org/gulp-angular-embed-templates/-/gulp-angular-embed-templates-2.3.0.tgz",
|
||||
"integrity": "sha1-wBDv3VlN7pRRMoNFN9eSOt6EDXk=",
|
||||
"integrity": "sha512-D4lOP2G9JYbRpuZo6rsiF5f/PpzU1BgaaAxbgxNQtyNp4zME/E3c/0F73F5J/nK+ZRMwdYblgqa4vCgRS9iVwg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"gulp-util": "^3.0.6",
|
||||
@@ -8516,7 +8526,7 @@
|
||||
"node_modules/gulp-util": {
|
||||
"version": "3.0.8",
|
||||
"resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz",
|
||||
"integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=",
|
||||
"integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==",
|
||||
"deprecated": "gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
@@ -8586,7 +8596,7 @@
|
||||
"node_modules/gulp-util/node_modules/lodash.template": {
|
||||
"version": "3.6.2",
|
||||
"resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
|
||||
"integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=",
|
||||
"integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"lodash._basecopy": "^3.0.0",
|
||||
@@ -8717,7 +8727,7 @@
|
||||
"node_modules/gulp-watch/node_modules/braces": {
|
||||
"version": "1.8.5",
|
||||
"resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz",
|
||||
"integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=",
|
||||
"integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"expand-range": "^1.8.1",
|
||||
@@ -8802,7 +8812,7 @@
|
||||
"node_modules/gulp-watch/node_modules/micromatch": {
|
||||
"version": "2.3.11",
|
||||
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz",
|
||||
"integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=",
|
||||
"integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"arr-diff": "^2.0.0",
|
||||
@@ -8860,7 +8870,7 @@
|
||||
"node_modules/gulp-wrap-js": {
|
||||
"version": "0.4.1",
|
||||
"resolved": "https://registry.npmjs.org/gulp-wrap-js/-/gulp-wrap-js-0.4.1.tgz",
|
||||
"integrity": "sha1-3uYqpISqupVHqT0f9c0MPQvtwDE=",
|
||||
"integrity": "sha512-5bWQ6ZQrUDVN0w3ufWP1ZtY8qcGQABKCSb84++qGzyqw6F8kFVeTxIQtEqF4Qzi1YOpLo0NvPlNATqBqKpA6eg==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"escodegen": "^1.6.1",
|
||||
@@ -11231,9 +11241,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/make-dir/node_modules/semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
|
||||
"version": "6.3.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
|
||||
"integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
@@ -11902,9 +11912,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/node-notifier/node_modules/semver": {
|
||||
"version": "7.3.7",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
|
||||
"integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
|
||||
"version": "7.5.4",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
|
||||
"integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"lru-cache": "^6.0.0"
|
||||
@@ -12590,7 +12600,7 @@
|
||||
"node_modules/parse-glob": {
|
||||
"version": "3.0.4",
|
||||
"resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz",
|
||||
"integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=",
|
||||
"integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"glob-base": "^0.3.0",
|
||||
@@ -14455,9 +14465,9 @@
|
||||
"integrity": "sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0="
|
||||
},
|
||||
"node_modules/semver": {
|
||||
"version": "5.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
|
||||
"integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver"
|
||||
@@ -14776,27 +14786,52 @@
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/socket.io": {
|
||||
"version": "4.5.3",
|
||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.5.3.tgz",
|
||||
"integrity": "sha512-zdpnnKU+H6mOp7nYRXH4GNv1ux6HL6+lHL8g7Ds7Lj8CkdK1jJK/dlwsKDculbyOHifcJ0Pr/yeXnZQ5GeFrcg==",
|
||||
"version": "4.7.2",
|
||||
"resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.2.tgz",
|
||||
"integrity": "sha512-bvKVS29/I5fl2FGLNHuXlQaUH/BlzX1IN6S+NKLNZpBsPZIDH+90eQmCs2Railn4YUiww4SzUedJ6+uzwFnKLw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"accepts": "~1.3.4",
|
||||
"base64id": "~2.0.0",
|
||||
"cors": "~2.8.5",
|
||||
"debug": "~4.3.2",
|
||||
"engine.io": "~6.2.0",
|
||||
"socket.io-adapter": "~2.4.0",
|
||||
"socket.io-parser": "~4.2.0"
|
||||
"engine.io": "~6.5.2",
|
||||
"socket.io-adapter": "~2.5.2",
|
||||
"socket.io-parser": "~4.2.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
"node": ">=10.2.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socket.io-adapter": {
|
||||
"version": "2.4.0",
|
||||
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.4.0.tgz",
|
||||
"integrity": "sha512-W4N+o69rkMEGVuk2D/cvca3uYsvGlMwsySWV447y99gUPghxq42BxqLNMndb+a1mm/5/7NeXVQS7RLa2XyXvYg==",
|
||||
"dev": true
|
||||
"version": "2.5.2",
|
||||
"resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz",
|
||||
"integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ws": "~8.11.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socket.io-adapter/node_modules/ws": {
|
||||
"version": "8.11.0",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
|
||||
"integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==",
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"utf-8-validate": "^5.0.2"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"bufferutil": {
|
||||
"optional": true
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/socket.io-parser": {
|
||||
"version": "4.2.4",
|
||||
@@ -15874,7 +15909,7 @@
|
||||
"node_modules/trim-newlines": {
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
|
||||
"integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
|
||||
"integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==",
|
||||
"dev": true,
|
||||
"optional": true,
|
||||
"engines": {
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@microsoft/signalr": "7.0.12",
|
||||
"ace-builds": "1.30.0",
|
||||
"ace-builds": "1.31.0",
|
||||
"angular": "1.8.3",
|
||||
"angular-animate": "1.8.3",
|
||||
"angular-aria": "1.8.3",
|
||||
@@ -59,7 +59,7 @@
|
||||
"@babel/preset-env": "7.21.5",
|
||||
"autoprefixer": "10.4.16",
|
||||
"cssnano": "6.0.1",
|
||||
"eslint": "8.51.0",
|
||||
"eslint": "8.52.0",
|
||||
"gulp": "4.0.2",
|
||||
"gulp-angular-embed-templates": "2.3.0",
|
||||
"gulp-babel": "8.0.0",
|
||||
|
||||
8
src/Umbraco.Web.UI.Login/package-lock.json
generated
8
src/Umbraco.Web.UI.Login/package-lock.json
generated
@@ -14,7 +14,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.2.2",
|
||||
"vite": "^4.4.11"
|
||||
"vite": "^4.5.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=20.8",
|
||||
@@ -2555,9 +2555,9 @@
|
||||
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
|
||||
},
|
||||
"node_modules/vite": {
|
||||
"version": "4.4.11",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz",
|
||||
"integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==",
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz",
|
||||
"integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"esbuild": "^0.18.10",
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.2.2",
|
||||
"vite": "^4.4.11"
|
||||
"vite": "^4.5.0"
|
||||
},
|
||||
"msw": {
|
||||
"workerDirectory": "public"
|
||||
|
||||
Reference in New Issue
Block a user