From ff05e1e5474b230f38a4cb9de01ba404571a074d Mon Sep 17 00:00:00 2001 From: alin Date: Thu, 3 Oct 2024 15:08:40 +0200 Subject: [PATCH 01/72] Add Configuration Path and Configuration Loader Callback type aliases --- packages/contracts/src/config/types.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/packages/contracts/src/config/types.ts b/packages/contracts/src/config/types.ts index 0d97e44b..c5324939 100644 --- a/packages/contracts/src/config/types.ts +++ b/packages/contracts/src/config/types.ts @@ -1,7 +1,15 @@ /** - * Configuration Items - * - * A general type for describing a key-value store containing configuration items - * for an application or component. + * A key-value store containing configuration items for an application or component. */ -export type Items = Record; /* eslint-disable-line @typescript-eslint/no-explicit-any */ \ No newline at end of file +export type Items = Record; /* eslint-disable-line @typescript-eslint/no-explicit-any */ + +/** + * A [module-name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import#modulename) from + * where configuration {@link Items} are to be loaded from. + */ +export type ConfigurationPath = string; + +/** + * Callback that is responsible for loading configuration {@link Items}. + */ +export type ConfigurationLoaderCallback = () => Promise; \ No newline at end of file From 9866f996028c56160eb9748f79eaeed4521bc055 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 09:31:58 +0200 Subject: [PATCH 02/72] Replace ConfigurationPath with ModuleName type alias --- packages/contracts/src/config/types.ts | 6 ------ packages/contracts/src/types.ts | 8 +++++++- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/contracts/src/config/types.ts b/packages/contracts/src/config/types.ts index c5324939..7648ec83 100644 --- a/packages/contracts/src/config/types.ts +++ b/packages/contracts/src/config/types.ts @@ -3,12 +3,6 @@ */ export type Items = Record; /* eslint-disable-line @typescript-eslint/no-explicit-any */ -/** - * A [module-name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import#modulename) from - * where configuration {@link Items} are to be loaded from. - */ -export type ConfigurationPath = string; - /** * Callback that is responsible for loading configuration {@link Items}. */ diff --git a/packages/contracts/src/types.ts b/packages/contracts/src/types.ts index 12e5128a..171acfc1 100644 --- a/packages/contracts/src/types.ts +++ b/packages/contracts/src/types.ts @@ -52,4 +52,10 @@ export type ClassMethodName = { * Array that contains either a class constructor or class instance, and the method name * that must be processed at some point. E.g. the method to be invoked. */ -export type ClassMethodReference = [ Constructor | T, ClassMethodName ]; \ No newline at end of file +export type ClassMethodReference = [ Constructor | T, ClassMethodName ]; + +/** + * A [module-name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import#modulename) to + * be imported. This is often a relative or absolute URL to *.js file that contains the module itself. + */ +export type ModuleName = string; \ No newline at end of file From 5201c31ac10a031b2bc31597a1ace5fe23a03302 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 09:33:18 +0200 Subject: [PATCH 03/72] Shorten type alias --- packages/contracts/src/config/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts/src/config/types.ts b/packages/contracts/src/config/types.ts index 7648ec83..dbed55e5 100644 --- a/packages/contracts/src/config/types.ts +++ b/packages/contracts/src/config/types.ts @@ -6,4 +6,4 @@ export type Items = Record; /* eslint-disable-line @typescript /** * Callback that is responsible for loading configuration {@link Items}. */ -export type ConfigurationLoaderCallback = () => Promise; \ No newline at end of file +export type LoaderCallback = () => Promise; \ No newline at end of file From 7c32e17828f95cc2f5a8495d6862cfff1e728243 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 09:33:28 +0200 Subject: [PATCH 04/72] Change release notes --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cc57f75..97588da8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * `isPromise()` utility in `@aedart/support/reflections`. * `BindingTuple`, `IdentifierInstanceTuple` and `IdentifierAliasTuple` type aliases in `@aedart/contracts/container`. * `isBindingTuple` util in `@aedart/container`. +* `ModuleName` type alias in `@aedart/contracts`. * `test:fast` script in `packages.json`, to allow testing without (re)transpiling all packages. * `@types/jasmine` as development dependency (_in root package only_). From 4c4c16d405875c90c2b26505b3b1a0899acadb54 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 10:17:49 +0200 Subject: [PATCH 05/72] Add Path and Source type aliases The idea is to also allow configuration items to be "loaded" asynchronously, due to eventual usage of env(), which might not have been set / loaded, before the configuration items have been imported! --- packages/contracts/src/config/types.ts | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/contracts/src/config/types.ts b/packages/contracts/src/config/types.ts index dbed55e5..eda3b6c7 100644 --- a/packages/contracts/src/config/types.ts +++ b/packages/contracts/src/config/types.ts @@ -1,9 +1,21 @@ +import { ModuleName } from "@aedart/contracts"; + /** - * A key-value store containing configuration items for an application or component. + * A key-value store containing configuration items for an application, its service, and or component. */ export type Items = Record; /* eslint-disable-line @typescript-eslint/no-explicit-any */ +/** + * Path ([module-name]{@link ModuleName}) from where to load configuration {@link Items}. + */ +export type Path = ModuleName; + /** * Callback that is responsible for loading configuration {@link Items}. */ -export type LoaderCallback = () => Promise; \ No newline at end of file +export type LoaderCallback = () => Promise; + +/** + * A source that ultimately must resolve into configuration {@link Items}. + */ +export type Source = Items | Path | LoaderCallback; \ No newline at end of file From 5072f338f1f726d88b8192dadb362ff11fe9b2e0 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 10:56:17 +0200 Subject: [PATCH 06/72] Add configuration loader interface --- packages/contracts/src/config/loaders/Loader.ts | 16 ++++++++++++++++ .../src/config/loaders/LoaderConstructor.ts | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 packages/contracts/src/config/loaders/Loader.ts create mode 100644 packages/contracts/src/config/loaders/LoaderConstructor.ts diff --git a/packages/contracts/src/config/loaders/Loader.ts b/packages/contracts/src/config/loaders/Loader.ts new file mode 100644 index 00000000..08314540 --- /dev/null +++ b/packages/contracts/src/config/loaders/Loader.ts @@ -0,0 +1,16 @@ +import { Items } from '../types'; + +/** + * Configuration Loader + */ +export default interface Loader +{ + /** + * Load configuration {@link Items} + * + * @return {Promise} + * + * @throws {import('@aedart/contracts/config').LoaderException} + */ + load(): Promise; +} \ No newline at end of file diff --git a/packages/contracts/src/config/loaders/LoaderConstructor.ts b/packages/contracts/src/config/loaders/LoaderConstructor.ts new file mode 100644 index 00000000..7be2a1ae --- /dev/null +++ b/packages/contracts/src/config/loaders/LoaderConstructor.ts @@ -0,0 +1,16 @@ +import Loader from './Loader'; + +/** + * Configuration Loader Constructor + */ +export default interface LoaderConstructor +{ + /** + * Create a new configuration loader instance + * + * @param {...any} [args] + * + * @return {Loader} + */ + new (...args: any[]): Loader; +} \ No newline at end of file From 3b01e89ffa2c721f2b9d4575f4733c1d5180c454 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 10:56:31 +0200 Subject: [PATCH 07/72] Add configuration loader exception interface --- .../contracts/src/config/exceptions/LoaderException.ts | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 packages/contracts/src/config/exceptions/LoaderException.ts diff --git a/packages/contracts/src/config/exceptions/LoaderException.ts b/packages/contracts/src/config/exceptions/LoaderException.ts new file mode 100644 index 00000000..1da9da3b --- /dev/null +++ b/packages/contracts/src/config/exceptions/LoaderException.ts @@ -0,0 +1,9 @@ +import { Throwable } from "@aedart/contracts/support/exceptions"; + +/** + * Configuration Loader Exception + * + * General exception to be thrown whenever a configuration load is unable to load items. + */ +export default interface LoaderException extends Throwable +{} \ No newline at end of file From 06c9c153d2308c94aabedec3e840acd9be8946a4 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 10:56:48 +0200 Subject: [PATCH 08/72] Add interface for configuration loader factory --- .../contracts/src/config/loaders/Factory.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 packages/contracts/src/config/loaders/Factory.ts diff --git a/packages/contracts/src/config/loaders/Factory.ts b/packages/contracts/src/config/loaders/Factory.ts new file mode 100644 index 00000000..b1043eca --- /dev/null +++ b/packages/contracts/src/config/loaders/Factory.ts @@ -0,0 +1,19 @@ +import { Source } from '../types'; +import Loader from './Loader'; + +/** + * Configuration Loader Factory + */ +export default interface Factory +{ + /** + * Returns a new configuration loader for given source + * + * @param {Source} source + * + * @return {Loader} + * + * @throws {import('@aedart/contracts/config').LoaderException} + */ + make(source: Source): Loader; +} \ No newline at end of file From e0697700bd1a1e2cda46eb65be802e13d6a90bdc Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 10:57:23 +0200 Subject: [PATCH 09/72] Export exceptions --- packages/contracts/src/config/exceptions/index.ts | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 packages/contracts/src/config/exceptions/index.ts diff --git a/packages/contracts/src/config/exceptions/index.ts b/packages/contracts/src/config/exceptions/index.ts new file mode 100644 index 00000000..41012bd9 --- /dev/null +++ b/packages/contracts/src/config/exceptions/index.ts @@ -0,0 +1,4 @@ +import LoaderException from "./LoaderException"; +export { + type LoaderException +} \ No newline at end of file From dad0c0ec28c1bb2a66ea75b9127823e63e7f8e00 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 10:57:34 +0200 Subject: [PATCH 10/72] Export loaders --- packages/contracts/src/config/loaders/index.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 packages/contracts/src/config/loaders/index.ts diff --git a/packages/contracts/src/config/loaders/index.ts b/packages/contracts/src/config/loaders/index.ts new file mode 100644 index 00000000..630bf89e --- /dev/null +++ b/packages/contracts/src/config/loaders/index.ts @@ -0,0 +1,6 @@ +import Loader from './Loader'; +import LoaderConstructor from "./LoaderConstructor"; +export { + type Loader, + type LoaderConstructor +} \ No newline at end of file From 56d92c9dbf6159eccbfed3db3647b740791b777e Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 10:57:57 +0200 Subject: [PATCH 11/72] Add identifier for config loader factory Also, export exceptions and loaders --- packages/contracts/src/config/index.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/contracts/src/config/index.ts b/packages/contracts/src/config/index.ts index 1309b15d..8961523e 100644 --- a/packages/contracts/src/config/index.ts +++ b/packages/contracts/src/config/index.ts @@ -5,9 +5,18 @@ */ export const CONFIG: unique symbol = Symbol('@aedart/contracts/config'); +/** + * Configuration Loader Factory identifier + * + * @type {Symbol} + */ +export const CONFIG_LOADER_FACTORY: unique symbol = Symbol('@aedart/contracts/config/loaders/factory'); + import Repository from './Repository'; export { type Repository } +export * from './loaders/index'; +export * from './exceptions/index'; export type * from './types'; \ No newline at end of file From 289890dad2401b34787764755b69efc895e1f73d Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 11:01:19 +0200 Subject: [PATCH 12/72] Add Loader Error --- packages/config/src/exceptions/LoaderError.ts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 packages/config/src/exceptions/LoaderError.ts diff --git a/packages/config/src/exceptions/LoaderError.ts b/packages/config/src/exceptions/LoaderError.ts new file mode 100644 index 00000000..36f76ed4 --- /dev/null +++ b/packages/config/src/exceptions/LoaderError.ts @@ -0,0 +1,23 @@ +import type { LoaderException } from "@aedart/contracts/config"; +import { configureCustomError } from "@aedart/support/exceptions"; + +/** + * Configuration Loader Error + * + * @see {LoaderException} + */ +export default class LoaderError extends Error implements LoaderException +{ + /** + * Create new Configuration Loader Error instance + * + * @param {string} [message] + * @param {ErrorOptions} [options] + */ + constructor(message?: string, options?: ErrorOptions) + { + super(message, options); + + configureCustomError(this); + } +} \ No newline at end of file From 3427bc8970fcbc466d06382d4ccf02ce3dc91c77 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 11:01:28 +0200 Subject: [PATCH 13/72] Export exceptions --- packages/config/src/exceptions/index.ts | 4 ++++ packages/config/src/index.ts | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 packages/config/src/exceptions/index.ts diff --git a/packages/config/src/exceptions/index.ts b/packages/config/src/exceptions/index.ts new file mode 100644 index 00000000..446ffa32 --- /dev/null +++ b/packages/config/src/exceptions/index.ts @@ -0,0 +1,4 @@ +import LoaderError from "./LoaderError"; +export { + LoaderError +} \ No newline at end of file diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index 605cd5eb..a5b1b314 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -3,4 +3,5 @@ export { Repository } -export * from './providers/index'; \ No newline at end of file +export * from './providers/index'; +export * from './exceptions/index'; \ No newline at end of file From 7b799f24591c92103522ddedb1d58e008af89c57 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 11:05:17 +0200 Subject: [PATCH 14/72] Add unsupported source exception interface --- .../config/exceptions/UnsupportedSourceException.ts | 10 ++++++++++ packages/contracts/src/config/exceptions/index.ts | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 packages/contracts/src/config/exceptions/UnsupportedSourceException.ts diff --git a/packages/contracts/src/config/exceptions/UnsupportedSourceException.ts b/packages/contracts/src/config/exceptions/UnsupportedSourceException.ts new file mode 100644 index 00000000..fe923413 --- /dev/null +++ b/packages/contracts/src/config/exceptions/UnsupportedSourceException.ts @@ -0,0 +1,10 @@ +import LoaderException from "./LoaderException"; + +/** + * Unsupported Configuration Source Exception + * + * To be thrown whenever a configuration loader factory is unable to resolve an appropriate + * configuration loader, for the given [source]{@link import('@aedart/contracts/config').Source}. + */ +export default interface UnsupportedSourceException extends LoaderException +{} \ No newline at end of file diff --git a/packages/contracts/src/config/exceptions/index.ts b/packages/contracts/src/config/exceptions/index.ts index 41012bd9..cdb63641 100644 --- a/packages/contracts/src/config/exceptions/index.ts +++ b/packages/contracts/src/config/exceptions/index.ts @@ -1,4 +1,6 @@ import LoaderException from "./LoaderException"; +import UnsupportedSourceException from "./UnsupportedSourceException"; export { - type LoaderException + type LoaderException, + type UnsupportedSourceException } \ No newline at end of file From a108315240b44870ab8ed63af40ea19f267c3be1 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 11:05:38 +0200 Subject: [PATCH 15/72] Change thrown exception to "unsupported source" --- packages/contracts/src/config/loaders/Factory.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts/src/config/loaders/Factory.ts b/packages/contracts/src/config/loaders/Factory.ts index b1043eca..2e653d94 100644 --- a/packages/contracts/src/config/loaders/Factory.ts +++ b/packages/contracts/src/config/loaders/Factory.ts @@ -13,7 +13,7 @@ export default interface Factory * * @return {Loader} * - * @throws {import('@aedart/contracts/config').LoaderException} + * @throws {import('@aedart/contracts/config').UnsupportedSourceException} */ make(source: Source): Loader; } \ No newline at end of file From 6d0ac090698d60267f69d13be56078bba0d34aab Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 11:08:45 +0200 Subject: [PATCH 16/72] Add Unsupported Source Error --- .../src/exceptions/UnsupportedSourceError.ts | 24 +++++++++++++++++++ packages/config/src/exceptions/index.ts | 4 +++- 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 packages/config/src/exceptions/UnsupportedSourceError.ts diff --git a/packages/config/src/exceptions/UnsupportedSourceError.ts b/packages/config/src/exceptions/UnsupportedSourceError.ts new file mode 100644 index 00000000..fa21aa55 --- /dev/null +++ b/packages/config/src/exceptions/UnsupportedSourceError.ts @@ -0,0 +1,24 @@ +import type { UnsupportedSourceException } from "@aedart/contracts/config"; +import { configureCustomError } from "@aedart/support/exceptions"; +import LoaderError from "./LoaderError"; + +/** + * Unsupported Configuration Source Error + * + * @see {UnsupportedSourceException} + */ +export default class UnsupportedSourceError extends LoaderError implements UnsupportedSourceException +{ + /** + * Create new Unsupported Source Error instance + * + * @param {string} [message] + * @param {ErrorOptions} [options] + */ + constructor(message?: string, options?: ErrorOptions) + { + super(message, options); + + configureCustomError(this); + } +} \ No newline at end of file diff --git a/packages/config/src/exceptions/index.ts b/packages/config/src/exceptions/index.ts index 446ffa32..673220fd 100644 --- a/packages/config/src/exceptions/index.ts +++ b/packages/config/src/exceptions/index.ts @@ -1,4 +1,6 @@ import LoaderError from "./LoaderError"; +import UnsupportedSourceError from "./UnsupportedSourceError"; export { - LoaderError + LoaderError, + UnsupportedSourceError } \ No newline at end of file From e05eafb13d098dbf6d34f35661d4d3248270b0fa Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 11:17:08 +0200 Subject: [PATCH 17/72] Add "base" loader --- packages/config/src/loaders/BaseLoader.ts | 34 +++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 packages/config/src/loaders/BaseLoader.ts diff --git a/packages/config/src/loaders/BaseLoader.ts b/packages/config/src/loaders/BaseLoader.ts new file mode 100644 index 00000000..c02f6d73 --- /dev/null +++ b/packages/config/src/loaders/BaseLoader.ts @@ -0,0 +1,34 @@ +import type { AbstractConstructor } from "@aedart/contracts"; +import type { Items, Loader } from "@aedart/contracts/config"; +import { AbstractClassError } from "@aedart/support/exceptions"; + +/** + * Base Configuration Loader + * + * @see {Loader} + */ +export default abstract class BaseLoader implements Loader +{ + /** + * Create new loader instance + * + * @param {...any} [args] + * + * @protected + */ + protected constructor(...args: any[] /* eslint-disable-line @typescript-eslint/no-unused-vars */) + { + if (new.target === BaseLoader) { + throw new AbstractClassError(BaseLoader as AbstractConstructor); + } + } + + /** + * Load configuration {@link Items} + * + * @return {Promise} + * + * @throws {import('@aedart/contracts/config').LoaderException} + */ + abstract load(): Promise; +} \ No newline at end of file From 9f1cdc77558c91768e92ea4e376b27fc2cea44ee Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 11:17:17 +0200 Subject: [PATCH 18/72] Export loaders --- packages/config/src/index.ts | 1 + packages/config/src/loaders/index.ts | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 packages/config/src/loaders/index.ts diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index a5b1b314..1d23fc32 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -3,5 +3,6 @@ export { Repository } +export * from './loaders/index'; export * from './providers/index'; export * from './exceptions/index'; \ No newline at end of file diff --git a/packages/config/src/loaders/index.ts b/packages/config/src/loaders/index.ts new file mode 100644 index 00000000..005ceeb5 --- /dev/null +++ b/packages/config/src/loaders/index.ts @@ -0,0 +1,4 @@ +import BaseLoader from "./BaseLoader"; +export { + BaseLoader +} \ No newline at end of file From 4f8a4c810b5dc18b25ee98cac3ae9bf63e37fcb5 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 11:21:53 +0200 Subject: [PATCH 19/72] Add configuration loader blueprint --- .../config/src/loaders/LoaderBlueprint.ts | 19 +++++++++++++++++++ packages/config/src/loaders/index.ts | 6 ++++-- 2 files changed, 23 insertions(+), 2 deletions(-) create mode 100644 packages/config/src/loaders/LoaderBlueprint.ts diff --git a/packages/config/src/loaders/LoaderBlueprint.ts b/packages/config/src/loaders/LoaderBlueprint.ts new file mode 100644 index 00000000..d003f1d4 --- /dev/null +++ b/packages/config/src/loaders/LoaderBlueprint.ts @@ -0,0 +1,19 @@ +import type { ClassBlueprint } from "@aedart/contracts/support/reflections"; + +/** + * Configuration Loader Blueprint + * + * Defines the minimum members that a target class should contain, before it is + * considered to "look like" a [Loader]{@link import('@aedart/contracts/config').Loader} + * + * @type {ClassBlueprint} + */ +export const LoaderBlueprint: ClassBlueprint = { + staticMembers: [ + 'constructor' + ], + + members: [ + 'load', + ] +}; \ No newline at end of file diff --git a/packages/config/src/loaders/index.ts b/packages/config/src/loaders/index.ts index 005ceeb5..3c162565 100644 --- a/packages/config/src/loaders/index.ts +++ b/packages/config/src/loaders/index.ts @@ -1,4 +1,6 @@ import BaseLoader from "./BaseLoader"; export { - BaseLoader -} \ No newline at end of file + BaseLoader, +} + +export * from './LoaderBlueprint'; \ No newline at end of file From 21df00367866bacf2ef198979e3350c8ce7ec2c8 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 11:28:41 +0200 Subject: [PATCH 20/72] Add isConfigurationLoaderConstructor() util --- packages/config/src/loaders/index.ts | 3 ++- .../isConfigurationLoaderConstructor.ts | 23 +++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 packages/config/src/loaders/isConfigurationLoaderConstructor.ts diff --git a/packages/config/src/loaders/index.ts b/packages/config/src/loaders/index.ts index 3c162565..3ecd5c4b 100644 --- a/packages/config/src/loaders/index.ts +++ b/packages/config/src/loaders/index.ts @@ -3,4 +3,5 @@ export { BaseLoader, } -export * from './LoaderBlueprint'; \ No newline at end of file +export * from './LoaderBlueprint'; +export * from './isConfigurationLoaderConstructor'; \ No newline at end of file diff --git a/packages/config/src/loaders/isConfigurationLoaderConstructor.ts b/packages/config/src/loaders/isConfigurationLoaderConstructor.ts new file mode 100644 index 00000000..6a57223e --- /dev/null +++ b/packages/config/src/loaders/isConfigurationLoaderConstructor.ts @@ -0,0 +1,23 @@ +import type { ConstructorLike } from "@aedart/contracts"; +import { isset } from "@aedart/support/misc"; +import { isSubclassOrLooksLike } from "@aedart/support/reflections"; +import BaseLoader from "./BaseLoader"; +import { LoaderBlueprint } from "./LoaderBlueprint"; + +/** + * Determine if target is a [Configuration Loader Constructor]{@link import('@aedart/contracts/config').LoaderConstructor} + * + * @param {any} target + * + * @return {boolean} + */ +export function isConfigurationLoaderConstructor( + target: any /* eslint-disable-line @typescript-eslint/no-explicit-any */ +): boolean +{ + if (!isset(target) || typeof target !== 'function') { + return false; + } + + return isSubclassOrLooksLike(target, BaseLoader as ConstructorLike, LoaderBlueprint); +} \ No newline at end of file From 58832862d1041fa8c19eff4b1e59c441fd3b7a35 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 11:31:32 +0200 Subject: [PATCH 21/72] Add isConfigurationLoader() util --- packages/config/src/loaders/index.ts | 1 + .../src/loaders/isConfigurationLoader.ts | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 packages/config/src/loaders/isConfigurationLoader.ts diff --git a/packages/config/src/loaders/index.ts b/packages/config/src/loaders/index.ts index 3ecd5c4b..780ffddb 100644 --- a/packages/config/src/loaders/index.ts +++ b/packages/config/src/loaders/index.ts @@ -4,4 +4,5 @@ export { } export * from './LoaderBlueprint'; +export * from './isConfigurationLoader'; export * from './isConfigurationLoaderConstructor'; \ No newline at end of file diff --git a/packages/config/src/loaders/isConfigurationLoader.ts b/packages/config/src/loaders/isConfigurationLoader.ts new file mode 100644 index 00000000..5d2ee588 --- /dev/null +++ b/packages/config/src/loaders/isConfigurationLoader.ts @@ -0,0 +1,27 @@ +import { isset } from "@aedart/support/misc"; +import { isConfigurationLoaderConstructor } from "./isConfigurationLoaderConstructor"; +import BaseLoader from "./BaseLoader"; + +/** + * Determine if given object is a [Configuration Loader]{@link import('@aedart/contracts/config').Loader} + * + * @param {object} instance + * + * @returns {boolean} + */ +export function isConfigurationLoader(instance: object): boolean +{ + if (!isset(instance) || typeof instance !== 'object') { + return false; + } + + if (instance instanceof BaseLoader) { + return true; + } + + if (!Reflect.has(instance, 'constructor')) { + return false; + } + + return isConfigurationLoaderConstructor(instance.constructor); +} \ No newline at end of file From 5c29b4c48464884fc83308d35ed678d63e1e9b8f Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 12:11:45 +0200 Subject: [PATCH 22/72] Add tests for "is config loader" utils --- .../loaders/isConfigurationLoader.test.js | 46 +++++++++++++++++++ .../isConfigurationLoaderConstructor.test.js | 46 +++++++++++++++++++ 2 files changed, 92 insertions(+) create mode 100644 tests/browser/packages/config/loaders/isConfigurationLoader.test.js create mode 100644 tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js diff --git a/tests/browser/packages/config/loaders/isConfigurationLoader.test.js b/tests/browser/packages/config/loaders/isConfigurationLoader.test.js new file mode 100644 index 00000000..ff2b57e3 --- /dev/null +++ b/tests/browser/packages/config/loaders/isConfigurationLoader.test.js @@ -0,0 +1,46 @@ +import { BaseLoader, isConfigurationLoader } from "@aedart/config"; + +describe('@aedart/config', () => { + describe('loaders', () => { + + describe('isConfigurationLoader', () => { + + it('can determine if target is a configuration loader instance', () => { + + class A {} + + class B { + load(){} + } + + class C extends B {} + + class D extends BaseLoader {} + + class E extends D {} + + // ------------------------------------------------------------------------------------ // + + const data = [ + { value: null, expected: false, name: 'Null' }, + { value: [], expected: false, name: 'Array' }, + { value: {}, expected: false, name: 'Object (empty)' }, + { value: new A(), expected: false, name: 'Class A (empty)' }, + + { value: new B(), expected: true, name: 'Class B (custom implementation of loader)' }, + { value: new C(), expected: true, name: 'Class C (inherits from custom implementation)' }, + { value: new D(), expected: true, name: 'Class D (inherits from BaseLoader abstraction)' }, + { value: new E(), expected: true, name: 'Class E (inherits from a base that inherits from BaseLoader abstraction)' }, + ]; + + for (const entry of data) { + expect(isConfigurationLoader(entry.value)) + .withContext(`${entry.name} was expected to ${entry.expected.toString()}`) + .toBe(entry.expected); + } + }); + + }); + + }); +}); \ No newline at end of file diff --git a/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js b/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js new file mode 100644 index 00000000..de657af1 --- /dev/null +++ b/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js @@ -0,0 +1,46 @@ +import { BaseLoader, isConfigurationLoaderConstructor } from "@aedart/config"; + +describe('@aedart/config', () => { + describe('loaders', () => { + + describe('isConfigurationLoaderConstructor', () => { + + it('can determine if target is a configuration loader constructor', () => { + + class A {} + + class B { + load() {} + } + + class C extends B {} + + class D extends BaseLoader {} + + class E extends D {} + + // ------------------------------------------------------------------------------------ // + + const data = [ + { value: null, expected: false, name: 'Null' }, + { value: [], expected: false, name: 'Array' }, + { value: {}, expected: false, name: 'Object (empty)' }, + { value: A, expected: false, name: 'Class A (empty)' }, + + { value: B, expected: true, name: 'Class B (custom implementation of loader)' }, + { value: C, expected: true, name: 'Class C (inherits from custom implementation)' }, + { value: D, expected: true, name: 'Class D (inherits from BaseLoader abstraction)' }, + { value: E, expected: true, name: 'Class E (inherits from a base that inherits from BaseLoader abstraction)' }, + ]; + + for (const entry of data) { + expect(isConfigurationLoaderConstructor(entry.value)) + .withContext(`${entry.name} was expected to ${entry.expected.toString()}`) + .toBe(entry.expected); + } + }); + + }); + + }); +}); \ No newline at end of file From d2ce02179ba499b67da8bd3782c822f80a432ede Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 12:38:07 +0200 Subject: [PATCH 23/72] Expand the Source type alias to also allow Loader --- packages/contracts/src/config/types.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/contracts/src/config/types.ts b/packages/contracts/src/config/types.ts index eda3b6c7..0fbf29ca 100644 --- a/packages/contracts/src/config/types.ts +++ b/packages/contracts/src/config/types.ts @@ -1,4 +1,6 @@ import { ModuleName } from "@aedart/contracts"; +import Loader from "./loaders/Loader"; +import LoaderConstructor from "./loaders/LoaderConstructor"; /** * A key-value store containing configuration items for an application, its service, and or component. @@ -18,4 +20,4 @@ export type LoaderCallback = () => Promise; /** * A source that ultimately must resolve into configuration {@link Items}. */ -export type Source = Items | Path | LoaderCallback; \ No newline at end of file +export type Source = Items | Path | Loader | LoaderConstructor | LoaderCallback; \ No newline at end of file From 3a6bcff3d81c8c453c499e4b2f0271a9adf5735c Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 12:43:58 +0200 Subject: [PATCH 24/72] Add Items Loader --- packages/config/src/loaders/ItemsLoader.ts | 43 ++++++++++++++++++++++ packages/config/src/loaders/index.ts | 2 + 2 files changed, 45 insertions(+) create mode 100644 packages/config/src/loaders/ItemsLoader.ts diff --git a/packages/config/src/loaders/ItemsLoader.ts b/packages/config/src/loaders/ItemsLoader.ts new file mode 100644 index 00000000..c26327c3 --- /dev/null +++ b/packages/config/src/loaders/ItemsLoader.ts @@ -0,0 +1,43 @@ +import BaseLoader from "./BaseLoader"; +import type { Items } from "@aedart/contracts/config"; + +/** + * Items Loader + * + * @see {BaseLoader} + */ +export default class ItemsLoader extends BaseLoader +{ + /** + * Configuration Items + * + * @type {Items} + * + * @protected + */ + protected items: Items; + + /** + * Create new Configuration Loader instance + * + * @param {Items} items + */ + public constructor(items: Items) + { + super(items); + + this.items = items; + } + + /** + * Load configuration {@link Items} + * + * @return {Promise} + * + * @throws {import('@aedart/contracts/config').LoaderException} + */ + public async load(): Promise + { + return Promise.resolve(this.items); + } +} \ No newline at end of file diff --git a/packages/config/src/loaders/index.ts b/packages/config/src/loaders/index.ts index 780ffddb..9e661099 100644 --- a/packages/config/src/loaders/index.ts +++ b/packages/config/src/loaders/index.ts @@ -1,6 +1,8 @@ import BaseLoader from "./BaseLoader"; +import ItemsLoader from "./ItemsLoader"; export { BaseLoader, + ItemsLoader, } export * from './LoaderBlueprint'; From 44376e517f71ef792ca4692aa13b7f7e9b555307 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 12:48:06 +0200 Subject: [PATCH 25/72] Export Factory --- packages/contracts/src/config/loaders/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/contracts/src/config/loaders/index.ts b/packages/contracts/src/config/loaders/index.ts index 630bf89e..13c88e9f 100644 --- a/packages/contracts/src/config/loaders/index.ts +++ b/packages/contracts/src/config/loaders/index.ts @@ -1,6 +1,8 @@ +import Factory from './Factory'; import Loader from './Loader'; import LoaderConstructor from "./LoaderConstructor"; export { + type Factory, type Loader, type LoaderConstructor } \ No newline at end of file From 2e0309773bba116494a6e11124b648b3ea06a1e2 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 13:18:06 +0200 Subject: [PATCH 26/72] Add configuration loader factory (incomplete) --- .../src/loaders/ConfigurationLoaderFactory.ts | 70 +++++++++++++++++++ packages/config/src/loaders/index.ts | 2 + 2 files changed, 72 insertions(+) create mode 100644 packages/config/src/loaders/ConfigurationLoaderFactory.ts diff --git a/packages/config/src/loaders/ConfigurationLoaderFactory.ts b/packages/config/src/loaders/ConfigurationLoaderFactory.ts new file mode 100644 index 00000000..802db512 --- /dev/null +++ b/packages/config/src/loaders/ConfigurationLoaderFactory.ts @@ -0,0 +1,70 @@ +import type { Application } from "@aedart/contracts/core"; +import type { + Factory, + Loader, + LoaderConstructor, + Source +} from '@aedart/contracts/config'; +import UnsupportedSourceError from '../exceptions/UnsupportedSourceError'; +import ItemsLoader from './ItemsLoader'; + +/** + * Configuration Loader Factory + * + * @see {import('@aedart/contracts/config').Factory} + */ +export default class ConfigurationLoaderFactory implements Factory +{ + /** + * Core Application instance + * + * @type {Application} + * + * @protected + */ + protected app: Application; + + /** + * Create a new Configuration Loader Factory instance + * + * @param {Application} app + */ + public constructor(app: Application) { + this.app = app; + } + + /** + * Returns a new configuration loader for given source + * + * @param {Source} source + * + * @return {Loader} + * + * @throws {import('@aedart/contracts/config').UnsupportedSourceException} + */ + public make(source: Source): Loader + { + if (typeof source === 'object') { + return this.makeLoader(ItemsLoader, [ source ]); + } + + // TODO: ...handle path, loader instance / constructor, callback... etc. + + throw new UnsupportedSourceError('Unable to make Configuration Loader for provided source', { cause: { source: source } }); + } + + /** + * Returns a new configuration loader instance + * + * @param {LoaderConstructor} loader + * @param {any[]} [args] + * + * @return {Loader} + * + * @protected + */ + protected makeLoader(loader: LoaderConstructor, args: any[] = []): Loader + { + return this.app.make(loader, args); + } +} \ No newline at end of file diff --git a/packages/config/src/loaders/index.ts b/packages/config/src/loaders/index.ts index 9e661099..03116cfa 100644 --- a/packages/config/src/loaders/index.ts +++ b/packages/config/src/loaders/index.ts @@ -1,6 +1,8 @@ +import ConfigurationLoaderFactory from "./ConfigurationLoaderFactory"; import BaseLoader from "./BaseLoader"; import ItemsLoader from "./ItemsLoader"; export { + ConfigurationLoaderFactory, BaseLoader, ItemsLoader, } From ff01a1828984aabb8ccf6ddd7952be5237d66cfc Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 13:18:21 +0200 Subject: [PATCH 27/72] Bind configuration loader factory --- packages/config/src/providers/ConfigServiceProvider.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/config/src/providers/ConfigServiceProvider.ts b/packages/config/src/providers/ConfigServiceProvider.ts index e453feb5..b3c0c39c 100644 --- a/packages/config/src/providers/ConfigServiceProvider.ts +++ b/packages/config/src/providers/ConfigServiceProvider.ts @@ -1,6 +1,8 @@ -import { CONFIG } from "@aedart/contracts/config"; +import type { Application } from "@aedart/contracts/core"; +import { CONFIG, CONFIG_LOADER_FACTORY } from "@aedart/contracts/config"; import { ServiceProvider } from "@aedart/support/services"; import Repository from '../Repository'; +import ConfigurationLoaderFactory from "../loaders/ConfigurationLoaderFactory"; /** * Configuration Service Provider @@ -14,6 +16,10 @@ export default class ConfigServiceProvider extends ServiceProvider { this.app .singleton(CONFIG, Repository) - .alias(CONFIG, 'config'); + .alias(CONFIG, 'config') + + .singleton(CONFIG_LOADER_FACTORY, (app) => { + return new ConfigurationLoaderFactory(app as Application); + }); } } \ No newline at end of file From b99a0c7af40bbd39ee8e3efde59b0a0e6736a371 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 13:23:58 +0200 Subject: [PATCH 28/72] Mark contracts/core as external --- packages/config/rollup.config.mjs | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/config/rollup.config.mjs b/packages/config/rollup.config.mjs index b76997a6..101e0542 100644 --- a/packages/config/rollup.config.mjs +++ b/packages/config/rollup.config.mjs @@ -5,6 +5,7 @@ export default createConfig({ external: [ '@aedart/contracts/config', '@aedart/contracts/container', + '@aedart/contracts/core', '@aedart/contracts/support', '@aedart/contracts/support/arrays', '@aedart/contracts/support/container', From d39b1fbdf2dccc06926050342654960e008208de Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 13:27:04 +0200 Subject: [PATCH 29/72] Add test helper for creating factory --- .../packages/config/helpers/makeLoaderFactory.js | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 tests/browser/packages/config/helpers/makeLoaderFactory.js diff --git a/tests/browser/packages/config/helpers/makeLoaderFactory.js b/tests/browser/packages/config/helpers/makeLoaderFactory.js new file mode 100644 index 00000000..7e92c2b0 --- /dev/null +++ b/tests/browser/packages/config/helpers/makeLoaderFactory.js @@ -0,0 +1,16 @@ +import { Application } from "@aedart/core"; +import { ConfigurationLoaderFactory } from "@aedart/config"; + +/** + * Returns a new configuration loader factory instance + * + * @param {Application} [app] + * + * @return {import('@aedart/contracts/config').Factory} + */ +export default function makeLoaderFactory(app) +{ + app = app || new Application(); + + return new ConfigurationLoaderFactory(app); +} \ No newline at end of file From c98197f0e55f09c3c994bb94102b666578ab85ca Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 13:44:54 +0200 Subject: [PATCH 30/72] Add tests for configuration loader factory and its supported loaders --- .../ConfigurationLoaderFactory.test.js | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js diff --git a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js new file mode 100644 index 00000000..88b1705f --- /dev/null +++ b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js @@ -0,0 +1,66 @@ +import { + UnsupportedSourceError, + ItemsLoader, +} from "@aedart/config"; +import makeLoaderFactory from "../helpers/makeLoaderFactory"; + +describe('@aedart/config', () => { + describe('loaders', () => { + + describe('ConfigurationLoaderFactory', () => { + + it('can create factory instance', () => { + const result = makeLoaderFactory(); + + // If this does not fail, then test is a success + expect(result) + .not + .toBeUndefined(); + }); + + it('fails when attempting to make loader for unsupported source', () => { + + const factory = makeLoaderFactory(); + + const result = () => { + factory.make(false); + } + + expect(result) + .toThrowError(UnsupportedSourceError); + }); + + it('can make loaders and load items', async () => { + + const factory = makeLoaderFactory(); + + const data = [ + { + name: 'ItemsLoader', + source: { + foo: 'bar' + }, + loader: ItemsLoader, + expected: { foo: 'bar' } + } + ]; + + // ------------------------------------------------------------------------------------ // + + for (const entry of data) { + + const loader = factory.make(entry.source); + expect(loader) + .withContext(`Incorrect loader resolved from factory, for ${entry.name}`) + .toBeInstanceOf(entry.loader); + + const result = await loader.load(); + expect(result) + .withContext(`Loaded configuration appears to be invalid, for ${entry.name}`) + .toEqual(entry.expected); + } + }); + + }); + }); +}); \ No newline at end of file From 6d4612e8b29131957f5150ea2a22ccb830732f77 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 13:49:30 +0200 Subject: [PATCH 31/72] Improve assert message --- .../packages/config/loaders/ConfigurationLoaderFactory.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js index 88b1705f..40d41e11 100644 --- a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js +++ b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js @@ -56,7 +56,7 @@ describe('@aedart/config', () => { const result = await loader.load(); expect(result) - .withContext(`Loaded configuration appears to be invalid, for ${entry.name}`) + .withContext(`Loaded configuration items appear to be invalid, for ${entry.name}`) .toEqual(entry.expected); } }); From 6685176c5d5e388f4ba296a96a7d58ab8d2c4d83 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 13:52:54 +0200 Subject: [PATCH 32/72] Cleanup --- packages/config/src/loaders/ItemsLoader.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/config/src/loaders/ItemsLoader.ts b/packages/config/src/loaders/ItemsLoader.ts index c26327c3..9a641d68 100644 --- a/packages/config/src/loaders/ItemsLoader.ts +++ b/packages/config/src/loaders/ItemsLoader.ts @@ -1,5 +1,5 @@ -import BaseLoader from "./BaseLoader"; import type { Items } from "@aedart/contracts/config"; +import BaseLoader from "./BaseLoader"; /** * Items Loader From 2bf496c71301a7b25e756c08dface48d93cb7005 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 14:00:04 +0200 Subject: [PATCH 33/72] Add Path Loader --- packages/config/src/loaders/PathLoader.ts | 50 +++++++++++++++++++++++ packages/config/src/loaders/index.ts | 2 + 2 files changed, 52 insertions(+) create mode 100644 packages/config/src/loaders/PathLoader.ts diff --git a/packages/config/src/loaders/PathLoader.ts b/packages/config/src/loaders/PathLoader.ts new file mode 100644 index 00000000..62d5caa0 --- /dev/null +++ b/packages/config/src/loaders/PathLoader.ts @@ -0,0 +1,50 @@ +import type { Items, Path } from "@aedart/contracts/config"; +import { getErrorMessage } from "@aedart/support/exceptions"; +import BaseLoader from './BaseLoader'; +import LoaderError from '../exceptions/LoaderError'; + +/** + * Path (module) Loader + * + * @see {BaseLoader} + */ +export default class PathLoader extends BaseLoader +{ + /** + * Path (module-name) to configuration items module + * + * @type {Path} + * + * @protected + */ + protected path: Path; + + /** + * Create new Configuration Loader instance + * + * @param {Path} path + */ + public constructor(path: Path) + { + super(path); + + this.path = path; + } + + /** + * Load configuration {@link Items} + * + * @return {Promise} + * + * @throws {import('@aedart/contracts/config').LoaderException} + */ + public async load(): Promise + { + try { + return await import(this.path); + } catch (e) { + const reason: string = getErrorMessage(e); + throw new LoaderError(`Unable to load configuration items from path: ${reason}`, { cause: { path: this.path, previous: e } }); + } + } +} \ No newline at end of file diff --git a/packages/config/src/loaders/index.ts b/packages/config/src/loaders/index.ts index 03116cfa..bffae69b 100644 --- a/packages/config/src/loaders/index.ts +++ b/packages/config/src/loaders/index.ts @@ -1,10 +1,12 @@ import ConfigurationLoaderFactory from "./ConfigurationLoaderFactory"; import BaseLoader from "./BaseLoader"; import ItemsLoader from "./ItemsLoader"; +import PathLoader from "./PathLoader"; export { ConfigurationLoaderFactory, BaseLoader, ItemsLoader, + PathLoader } export * from './LoaderBlueprint'; From 5f41ff566b125228272f1a5ef10f497be02301af Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 14:01:34 +0200 Subject: [PATCH 34/72] Add handling of path(s) --- packages/config/src/loaders/ConfigurationLoaderFactory.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/config/src/loaders/ConfigurationLoaderFactory.ts b/packages/config/src/loaders/ConfigurationLoaderFactory.ts index 802db512..095da753 100644 --- a/packages/config/src/loaders/ConfigurationLoaderFactory.ts +++ b/packages/config/src/loaders/ConfigurationLoaderFactory.ts @@ -7,6 +7,7 @@ import type { } from '@aedart/contracts/config'; import UnsupportedSourceError from '../exceptions/UnsupportedSourceError'; import ItemsLoader from './ItemsLoader'; +import PathLoader from './PathLoader'; /** * Configuration Loader Factory @@ -44,6 +45,10 @@ export default class ConfigurationLoaderFactory implements Factory */ public make(source: Source): Loader { + if (typeof source === 'string') { + return this.makeLoader(PathLoader, [ source ]); + } + if (typeof source === 'object') { return this.makeLoader(ItemsLoader, [ source ]); } From 3afca6730073353dc0be74bb9f5000a35154ac74 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 15:56:21 +0200 Subject: [PATCH 35/72] Enable additional babel plugins for handling dynamic imports --- babel.config.json | 4 +- package-lock.json | 2488 ++++++++++++++++++++++++++++----------------- package.json | 2 + 3 files changed, 1542 insertions(+), 952 deletions(-) diff --git a/babel.config.json b/babel.config.json index fc507b8c..4a0948bf 100644 --- a/babel.config.json +++ b/babel.config.json @@ -17,6 +17,8 @@ ], "@babel/plugin-proposal-class-properties", "@babel/plugin-proposal-private-methods", - "@babel/plugin-transform-class-static-block" + "@babel/plugin-transform-class-static-block", + "@babel/plugin-syntax-dynamic-import", + "@babel/plugin-syntax-import-attributes" ] } diff --git a/package-lock.json b/package-lock.json index 6eedeb57..764bb97f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,8 @@ "@babel/plugin-proposal-class-properties": "^7.18.6", "@babel/plugin-proposal-decorators": "^7.24.7", "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-import-attributes": "^7.25.7", "@babel/plugin-transform-class-static-block": "^7.24.7", "@babel/preset-env": "^7.25.4", "@babel/runtime": "^7.25.6", @@ -114,9 +116,9 @@ } }, "node_modules/@babel/cli": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.25.6.tgz", - "integrity": "sha512-Z+Doemr4VtvSD2SNHTrkiFZ1LX+JI6tyRXAAOb4N9khIuPyoEPmTPJarPm8ljJV1D6bnMQjyHMWTT9NeKbQuXA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.25.7.tgz", + "integrity": "sha512-vQw4QjrqjLSuL0Tt3gfVXbxEHOfsCcHN8tKyTclpSMYLq3Bp0BTzWYZfMKBs3PQ+to8q3BnumBIAsMdOqDJ6nw==", "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", @@ -143,11 +145,11 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/highlight": "^7.25.7", "picocolors": "^1.0.0" }, "engines": { @@ -155,30 +157,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", - "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.7.tgz", + "integrity": "sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", - "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.7.tgz", + "integrity": "sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.0", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-module-transforms": "^7.25.2", - "@babel/helpers": "^7.25.0", - "@babel/parser": "^7.25.0", - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.2", - "@babel/types": "^7.25.2", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7", "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -194,54 +196,54 @@ } }, "node_modules/@babel/generator": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", - "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", "dev": true, "dependencies": { - "@babel/types": "^7.25.6", + "@babel/types": "^7.25.7", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", - "jsesc": "^2.5.1" + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", - "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.7.tgz", + "integrity": "sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==", "dev": true, "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz", - "integrity": "sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.25.7.tgz", + "integrity": "sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", - "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.25.2", - "@babel/helper-validator-option": "^7.24.8", - "browserslist": "^4.23.1", + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -250,17 +252,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", - "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.7.tgz", + "integrity": "sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/traverse": "^7.25.7", "semver": "^6.3.1" }, "engines": { @@ -271,13 +273,13 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.2.tgz", - "integrity": "sha512-+wqVGP+DFmqwFD3EH6TMTfUNeqDehV3E/dl+Sd54eaXqm17tEUNbEIn4sVivVowbvUpOtIGxdo3GoXyDH9N/9g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.25.7.tgz", + "integrity": "sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "regexpu-core": "^5.3.1", + "@babel/helper-annotate-as-pure": "^7.25.7", + "regexpu-core": "^6.1.1", "semver": "^6.3.1" }, "engines": { @@ -304,41 +306,41 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", - "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.7.tgz", + "integrity": "sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.8", - "@babel/types": "^7.24.8" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", - "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", - "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-simple-access": "^7.24.7", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.2" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -348,35 +350,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", - "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.7.tgz", + "integrity": "sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==", "dev": true, "dependencies": { - "@babel/types": "^7.24.7" + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", - "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.0.tgz", - "integrity": "sha512-NhavI2eWEIz/H9dbrG0TuOicDhNexze43i5z7lEqwYm0WEZVTwnPpA0EafUTP7+6/W79HWIP2cTe3Z5NiSTVpw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.7.tgz", + "integrity": "sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-wrap-function": "^7.25.0", - "@babel/traverse": "^7.25.0" + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-wrap-function": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -386,14 +388,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", - "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.7.tgz", + "integrity": "sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==", "dev": true, "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.24.8", - "@babel/helper-optimise-call-expression": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-member-expression-to-functions": "^7.25.7", + "@babel/helper-optimise-call-expression": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -403,89 +405,89 @@ } }, "node_modules/@babel/helper-simple-access": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", - "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", - "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.7.tgz", + "integrity": "sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==", "dev": true, "dependencies": { - "@babel/traverse": "^7.24.7", - "@babel/types": "^7.24.7" + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", - "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", - "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.0.tgz", - "integrity": "sha512-s6Q1ebqutSiZnEjaofc/UKDyC4SbzV5n5SrA2Gq8UawLycr3i04f1dX4OzoQVnexm6aOCh37SQNYlJ/8Ku+PMQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.25.7.tgz", + "integrity": "sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==", "dev": true, "dependencies": { - "@babel/template": "^7.25.0", - "@babel/traverse": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", - "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", "dev": true, "dependencies": { - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6" + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.7", "chalk": "^2.4.2", "js-tokens": "^4.0.0", "picocolors": "^1.0.0" @@ -495,11 +497,11 @@ } }, "node_modules/@babel/parser": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", - "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.7.tgz", + "integrity": "sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==", "dependencies": { - "@babel/types": "^7.25.6" + "@babel/types": "^7.25.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -509,13 +511,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.3.tgz", - "integrity": "sha512-wUrcsxZg6rqBXG05HG1FPYgsP6EvwF4WpBbxIpWIIYnH8wG0gzx3yZY3dtEHas4sTAOGkbTsc9EGPxwff8lRoA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.7.tgz", + "integrity": "sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.3" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -525,12 +527,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.0.tgz", - "integrity": "sha512-Bm4bH2qsX880b/3ziJ8KD711LT7z4u8CFudmjqle65AZj/HNUFhEf90dqYv6O86buWvSBmeQDjv0Tn2aF/bIBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.7.tgz", + "integrity": "sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -540,12 +542,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.0.tgz", - "integrity": "sha512-lXwdNZtTmeVOOFtwM/WDe7yg1PL8sYhRk/XH0FzbR2HDQ0xC+EnQ/JHeoMYSavtU115tnUk0q9CDyq8si+LMAA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.7.tgz", + "integrity": "sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -555,14 +557,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz", - "integrity": "sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.7.tgz", + "integrity": "sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -572,13 +574,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.0.tgz", - "integrity": "sha512-tggFrk1AIShG/RUQbEwt2Tr/E+ObkfwrPjR6BjbRvsx24+PSjK8zrq0GWPNCjo8qpRx4DuJzlcvWJqlm+0h3kw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.7.tgz", + "integrity": "sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.0" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -605,14 +607,14 @@ } }, "node_modules/@babel/plugin-proposal-decorators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz", - "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.25.7.tgz", + "integrity": "sha512-q1mqqqH0e1lhmsEQHV5U8OmdueBC2y0RFr2oUzZoFRtN3MvPmt2fsFRcNQAoGLTSNdHBFUYGnlgcRFhkBbKjPw==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/plugin-syntax-decorators": "^7.24.7" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/plugin-syntax-decorators": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -690,12 +692,12 @@ } }, "node_modules/@babel/plugin-syntax-decorators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz", - "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.25.7.tgz", + "integrity": "sha512-oXduHo642ZhstLVYTe2z2GSJIruU0c/W3/Ghr6A5yGMsVrvdnxO1z+3pbTcT7f3/Clnt+1z8D/w1r1f1SHaCHw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -729,12 +731,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.6.tgz", - "integrity": "sha512-aABl0jHw9bZ2karQ/uUD6XP4u0SG22SJrOHFoL6XB1R7dTovOP4TzTlsxOYC5yQ1pdscVK2JTUnF6QL3ARoAiQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.25.7.tgz", + "integrity": "sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -744,12 +746,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", - "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.7.tgz", + "integrity": "sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -901,12 +903,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz", - "integrity": "sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.7.tgz", + "integrity": "sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -916,15 +918,15 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.4.tgz", - "integrity": "sha512-jz8cV2XDDTqjKPwVPJBIjORVEmSGYhdRa8e5k5+vN+uwcjSrSxUaebBRa4ko1jqNF2uxyg8G6XYk30Jv285xzg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.25.7.tgz", + "integrity": "sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-remap-async-to-generator": "^7.25.0", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7", "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/traverse": "^7.25.4" + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -934,14 +936,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz", - "integrity": "sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.7.tgz", + "integrity": "sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-remap-async-to-generator": "^7.24.7" + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-remap-async-to-generator": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -951,12 +953,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz", - "integrity": "sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.25.7.tgz", + "integrity": "sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -966,12 +968,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.0.tgz", - "integrity": "sha512-yBQjYoOjXlFv9nlXb3f1casSHOZkWr29NX+zChVanLg5Nc157CrbEX9D7hxxtTpuFy7Q0YzmmWfJxzvps4kXrQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.25.7.tgz", + "integrity": "sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -981,13 +983,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.4.tgz", - "integrity": "sha512-nZeZHyCWPfjkdU5pA/uHiTaDAFUEqkpzf1YoQT2NeSynCGYq9rxfyI3XpQbfx/a0hSnFH6TGlEXvae5Vi7GD8g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.7.tgz", + "integrity": "sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -997,13 +999,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz", - "integrity": "sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.25.7.tgz", + "integrity": "sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, "engines": { @@ -1014,16 +1016,16 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.4.tgz", - "integrity": "sha512-oexUfaQle2pF/b6E0dwsxQtAol9TLSO88kQvym6HHBWFliV2lGdrPieX+WgMRLSJDVzdYywk7jXbLPuO2KLTLg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.7.tgz", + "integrity": "sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-replace-supers": "^7.25.0", - "@babel/traverse": "^7.25.4", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7", + "@babel/traverse": "^7.25.7", "globals": "^11.1.0" }, "engines": { @@ -1034,13 +1036,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz", - "integrity": "sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.7.tgz", + "integrity": "sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/template": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/template": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1050,12 +1052,12 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.8.tgz", - "integrity": "sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.7.tgz", + "integrity": "sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1065,13 +1067,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz", - "integrity": "sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.7.tgz", + "integrity": "sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1081,12 +1083,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz", - "integrity": "sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.7.tgz", + "integrity": "sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1096,13 +1098,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.0.tgz", - "integrity": "sha512-YLpb4LlYSc3sCUa35un84poXoraOiQucUTTu8X1j18JV+gNa8E0nyUf/CjZ171IRGr4jEguF+vzJU66QZhn29g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1112,12 +1114,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz", - "integrity": "sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.7.tgz", + "integrity": "sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3" }, "engines": { @@ -1128,13 +1130,13 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz", - "integrity": "sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.25.7.tgz", + "integrity": "sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1144,12 +1146,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz", - "integrity": "sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.7.tgz", + "integrity": "sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-export-namespace-from": "^7.8.3" }, "engines": { @@ -1160,13 +1162,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz", - "integrity": "sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.25.7.tgz", + "integrity": "sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1176,14 +1178,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.25.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.1.tgz", - "integrity": "sha512-TVVJVdW9RKMNgJJlLtHsKDTydjZAbwIsn6ySBPQaEAUU5+gVvlJt/9nRmqVbsV/IBanRjzWoaAQKLoamWVOUuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.7.tgz", + "integrity": "sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/traverse": "^7.25.1" + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1193,12 +1195,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz", - "integrity": "sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.7.tgz", + "integrity": "sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-json-strings": "^7.8.3" }, "engines": { @@ -1209,12 +1211,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.25.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.2.tgz", - "integrity": "sha512-HQI+HcTbm9ur3Z2DkO+jgESMAMcYLuN/A7NRw9juzxAezN9AvqvUTnpKP/9kkYANz6u7dFlAyOu44ejuGySlfw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.7.tgz", + "integrity": "sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1224,12 +1226,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz", - "integrity": "sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.7.tgz", + "integrity": "sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" }, "engines": { @@ -1240,12 +1242,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz", - "integrity": "sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.7.tgz", + "integrity": "sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1255,13 +1257,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz", - "integrity": "sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.7.tgz", + "integrity": "sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1271,14 +1273,14 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.8.tgz", - "integrity": "sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.25.7.tgz", + "integrity": "sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.24.8", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-simple-access": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1288,15 +1290,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.0.tgz", - "integrity": "sha512-YPJfjQPDXxyQWg/0+jHKj1llnY5f/R6a0p/vP4lPymxLu7Lvl4k2WMitqi08yxwQcCVUUdG9LCUj4TNEgAp3Jw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.7.tgz", + "integrity": "sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.25.0", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", - "@babel/traverse": "^7.25.0" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1306,13 +1308,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz", - "integrity": "sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.7.tgz", + "integrity": "sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1322,13 +1324,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz", - "integrity": "sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.7.tgz", + "integrity": "sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1338,12 +1340,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz", - "integrity": "sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.7.tgz", + "integrity": "sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1353,12 +1355,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz", - "integrity": "sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.25.7.tgz", + "integrity": "sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" }, "engines": { @@ -1369,12 +1371,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz", - "integrity": "sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.7.tgz", + "integrity": "sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-numeric-separator": "^7.10.4" }, "engines": { @@ -1385,15 +1387,15 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz", - "integrity": "sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.7.tgz", + "integrity": "sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.24.7" + "@babel/plugin-transform-parameters": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1403,13 +1405,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz", - "integrity": "sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.7.tgz", + "integrity": "sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-replace-supers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-replace-supers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1419,12 +1421,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz", - "integrity": "sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.7.tgz", + "integrity": "sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" }, "engines": { @@ -1435,13 +1437,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.8.tgz", - "integrity": "sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.7.tgz", + "integrity": "sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7", "@babel/plugin-syntax-optional-chaining": "^7.8.3" }, "engines": { @@ -1452,12 +1454,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz", - "integrity": "sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.7.tgz", + "integrity": "sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1467,13 +1469,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.4.tgz", - "integrity": "sha512-ao8BG7E2b/URaUQGqN3Tlsg+M3KlHY6rJ1O1gXAEUnZoyNQnvKyH87Kfg+FoxSeyWUB8ISZZsC91C44ZuBFytw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.7.tgz", + "integrity": "sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.25.4", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1483,14 +1485,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz", - "integrity": "sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.7.tgz", + "integrity": "sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==", "dev": true, "dependencies": { - "@babel/helper-annotate-as-pure": "^7.24.7", - "@babel/helper-create-class-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-annotate-as-pure": "^7.25.7", + "@babel/helper-create-class-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, "engines": { @@ -1501,12 +1503,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz", - "integrity": "sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.7.tgz", + "integrity": "sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1516,12 +1518,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz", - "integrity": "sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.25.7.tgz", + "integrity": "sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-plugin-utils": "^7.25.7", "regenerator-transform": "^0.15.2" }, "engines": { @@ -1532,12 +1534,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz", - "integrity": "sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.7.tgz", + "integrity": "sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1547,12 +1549,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz", - "integrity": "sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.7.tgz", + "integrity": "sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1562,13 +1564,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz", - "integrity": "sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.7.tgz", + "integrity": "sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1578,12 +1580,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz", - "integrity": "sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.7.tgz", + "integrity": "sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1593,12 +1595,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz", - "integrity": "sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.25.7.tgz", + "integrity": "sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1608,12 +1610,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.8.tgz", - "integrity": "sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.25.7.tgz", + "integrity": "sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1623,12 +1625,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz", - "integrity": "sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.7.tgz", + "integrity": "sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==", "dev": true, "dependencies": { - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1638,13 +1640,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz", - "integrity": "sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.7.tgz", + "integrity": "sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1654,13 +1656,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz", - "integrity": "sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.7.tgz", + "integrity": "sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.24.7", - "@babel/helper-plugin-utils": "^7.24.7" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1670,13 +1672,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.4.tgz", - "integrity": "sha512-qesBxiWkgN1Q+31xUE9RcMk79eOXXDCv6tfyGMRSs4RGlioSg2WVyQAm07k726cSE56pa+Kb0y9epX2qaXzTvA==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.7.tgz", + "integrity": "sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8" + "@babel/helper-create-regexp-features-plugin": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7" }, "engines": { "node": ">=6.9.0" @@ -1686,28 +1688,28 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.25.4", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.4.tgz", - "integrity": "sha512-W9Gyo+KmcxjGahtt3t9fb14vFRWvPpu5pT6GBlovAK6BTBcxgjfVMSQCfJl4oi35ODrxP6xx2Wr8LNST57Mraw==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.25.4", - "@babel/helper-compilation-targets": "^7.25.2", - "@babel/helper-plugin-utils": "^7.24.8", - "@babel/helper-validator-option": "^7.24.8", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.3", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.0", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.0", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.24.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.0", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.25.7.tgz", + "integrity": "sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-plugin-utils": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.25.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.25.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.25.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.25.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.25.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.24.7", - "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-assertions": "^7.25.7", + "@babel/plugin-syntax-import-attributes": "^7.25.7", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1719,60 +1721,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.24.7", - "@babel/plugin-transform-async-generator-functions": "^7.25.4", - "@babel/plugin-transform-async-to-generator": "^7.24.7", - "@babel/plugin-transform-block-scoped-functions": "^7.24.7", - "@babel/plugin-transform-block-scoping": "^7.25.0", - "@babel/plugin-transform-class-properties": "^7.25.4", - "@babel/plugin-transform-class-static-block": "^7.24.7", - "@babel/plugin-transform-classes": "^7.25.4", - "@babel/plugin-transform-computed-properties": "^7.24.7", - "@babel/plugin-transform-destructuring": "^7.24.8", - "@babel/plugin-transform-dotall-regex": "^7.24.7", - "@babel/plugin-transform-duplicate-keys": "^7.24.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.0", - "@babel/plugin-transform-dynamic-import": "^7.24.7", - "@babel/plugin-transform-exponentiation-operator": "^7.24.7", - "@babel/plugin-transform-export-namespace-from": "^7.24.7", - "@babel/plugin-transform-for-of": "^7.24.7", - "@babel/plugin-transform-function-name": "^7.25.1", - "@babel/plugin-transform-json-strings": "^7.24.7", - "@babel/plugin-transform-literals": "^7.25.2", - "@babel/plugin-transform-logical-assignment-operators": "^7.24.7", - "@babel/plugin-transform-member-expression-literals": "^7.24.7", - "@babel/plugin-transform-modules-amd": "^7.24.7", - "@babel/plugin-transform-modules-commonjs": "^7.24.8", - "@babel/plugin-transform-modules-systemjs": "^7.25.0", - "@babel/plugin-transform-modules-umd": "^7.24.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.24.7", - "@babel/plugin-transform-new-target": "^7.24.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.24.7", - "@babel/plugin-transform-numeric-separator": "^7.24.7", - "@babel/plugin-transform-object-rest-spread": "^7.24.7", - "@babel/plugin-transform-object-super": "^7.24.7", - "@babel/plugin-transform-optional-catch-binding": "^7.24.7", - "@babel/plugin-transform-optional-chaining": "^7.24.8", - "@babel/plugin-transform-parameters": "^7.24.7", - "@babel/plugin-transform-private-methods": "^7.25.4", - "@babel/plugin-transform-private-property-in-object": "^7.24.7", - "@babel/plugin-transform-property-literals": "^7.24.7", - "@babel/plugin-transform-regenerator": "^7.24.7", - "@babel/plugin-transform-reserved-words": "^7.24.7", - "@babel/plugin-transform-shorthand-properties": "^7.24.7", - "@babel/plugin-transform-spread": "^7.24.7", - "@babel/plugin-transform-sticky-regex": "^7.24.7", - "@babel/plugin-transform-template-literals": "^7.24.7", - "@babel/plugin-transform-typeof-symbol": "^7.24.8", - "@babel/plugin-transform-unicode-escapes": "^7.24.7", - "@babel/plugin-transform-unicode-property-regex": "^7.24.7", - "@babel/plugin-transform-unicode-regex": "^7.24.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.25.4", + "@babel/plugin-transform-arrow-functions": "^7.25.7", + "@babel/plugin-transform-async-generator-functions": "^7.25.7", + "@babel/plugin-transform-async-to-generator": "^7.25.7", + "@babel/plugin-transform-block-scoped-functions": "^7.25.7", + "@babel/plugin-transform-block-scoping": "^7.25.7", + "@babel/plugin-transform-class-properties": "^7.25.7", + "@babel/plugin-transform-class-static-block": "^7.25.7", + "@babel/plugin-transform-classes": "^7.25.7", + "@babel/plugin-transform-computed-properties": "^7.25.7", + "@babel/plugin-transform-destructuring": "^7.25.7", + "@babel/plugin-transform-dotall-regex": "^7.25.7", + "@babel/plugin-transform-duplicate-keys": "^7.25.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-dynamic-import": "^7.25.7", + "@babel/plugin-transform-exponentiation-operator": "^7.25.7", + "@babel/plugin-transform-export-namespace-from": "^7.25.7", + "@babel/plugin-transform-for-of": "^7.25.7", + "@babel/plugin-transform-function-name": "^7.25.7", + "@babel/plugin-transform-json-strings": "^7.25.7", + "@babel/plugin-transform-literals": "^7.25.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.25.7", + "@babel/plugin-transform-member-expression-literals": "^7.25.7", + "@babel/plugin-transform-modules-amd": "^7.25.7", + "@babel/plugin-transform-modules-commonjs": "^7.25.7", + "@babel/plugin-transform-modules-systemjs": "^7.25.7", + "@babel/plugin-transform-modules-umd": "^7.25.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.25.7", + "@babel/plugin-transform-new-target": "^7.25.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.25.7", + "@babel/plugin-transform-numeric-separator": "^7.25.7", + "@babel/plugin-transform-object-rest-spread": "^7.25.7", + "@babel/plugin-transform-object-super": "^7.25.7", + "@babel/plugin-transform-optional-catch-binding": "^7.25.7", + "@babel/plugin-transform-optional-chaining": "^7.25.7", + "@babel/plugin-transform-parameters": "^7.25.7", + "@babel/plugin-transform-private-methods": "^7.25.7", + "@babel/plugin-transform-private-property-in-object": "^7.25.7", + "@babel/plugin-transform-property-literals": "^7.25.7", + "@babel/plugin-transform-regenerator": "^7.25.7", + "@babel/plugin-transform-reserved-words": "^7.25.7", + "@babel/plugin-transform-shorthand-properties": "^7.25.7", + "@babel/plugin-transform-spread": "^7.25.7", + "@babel/plugin-transform-sticky-regex": "^7.25.7", + "@babel/plugin-transform-template-literals": "^7.25.7", + "@babel/plugin-transform-typeof-symbol": "^7.25.7", + "@babel/plugin-transform-unicode-escapes": "^7.25.7", + "@babel/plugin-transform-unicode-property-regex": "^7.25.7", + "@babel/plugin-transform-unicode-regex": "^7.25.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.25.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.10", "babel-plugin-polyfill-corejs3": "^0.10.6", "babel-plugin-polyfill-regenerator": "^0.6.1", - "core-js-compat": "^3.37.1", + "core-js-compat": "^3.38.1", "semver": "^6.3.1" }, "engines": { @@ -1796,16 +1798,10 @@ "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "dev": true - }, "node_modules/@babel/runtime": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", - "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.7.tgz", + "integrity": "sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==", "dev": true, "dependencies": { "regenerator-runtime": "^0.14.0" @@ -1815,30 +1811,30 @@ } }, "node_modules/@babel/template": { - "version": "7.25.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", - "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/parser": "^7.25.0", - "@babel/types": "^7.25.0" + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", - "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.24.7", - "@babel/generator": "^7.25.6", - "@babel/parser": "^7.25.6", - "@babel/template": "^7.25.0", - "@babel/types": "^7.25.6", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -1847,12 +1843,12 @@ } }, "node_modules/@babel/types": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", - "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.7.tgz", + "integrity": "sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==", "dependencies": { - "@babel/helper-string-parser": "^7.24.8", - "@babel/helper-validator-identifier": "^7.24.7", + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1878,9 +1874,9 @@ } }, "node_modules/@emnapi/core": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.2.0.tgz", - "integrity": "sha512-E7Vgw78I93we4ZWdYCb4DGAwRROGkMIXk7/y87UmANR+J6qsWusmC3gLt0H+O0KOt5e6O38U8oJamgbudrES/w==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.0.tgz", + "integrity": "sha512-9hRqVlhwqBqCoToZ3hFcNVqL+uyHV06Y47ax4UB8L6XgVRqYz7MFnfessojo6+5TK89pKwJnpophwjTMOeKI9Q==", "dev": true, "dependencies": { "@emnapi/wasi-threads": "1.0.1", @@ -1888,9 +1884,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", - "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.0.tgz", + "integrity": "sha512-XMBySMuNZs3DM96xcJmLW4EfGnf+uGmFNjzpehMjuX5PLB5j87ar2Zc4e3PVeZ3I5g3tYtAqskB28manlF69Zw==", "dev": true, "dependencies": { "tslib": "^2.4.0" @@ -4042,12 +4038,12 @@ } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "13.2.5", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.5.tgz", - "integrity": "sha512-c4pRWi7OUSFM4E6frfUs+qsAf052aOWt1x2qFQ6llQcd1J0HqQ/0Egfs2lm33IixXeXXhZ+GmC9tf92qbOs25Q==", + "version": "13.2.6", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.6.tgz", + "integrity": "sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==", "dev": true, "dependencies": { - "@octokit/types": "^13.6.0" + "@octokit/types": "^13.6.1" }, "engines": { "node": ">= 18" @@ -4099,9 +4095,9 @@ } }, "node_modules/@octokit/types": { - "version": "13.6.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.0.tgz", - "integrity": "sha512-CrooV/vKCXqwLa+osmHLIMUb87brpgUqlqkPGc6iE2wCkUvTrHiXFMhAKoDDaAAYJrtKtrFTgSQTg5nObBEaew==", + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.1.tgz", + "integrity": "sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==", "dev": true, "dependencies": { "@octokit/openapi-types": "^22.2.0" @@ -4815,9 +4811,9 @@ "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==" }, "node_modules/@types/lodash": { - "version": "4.17.9", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.9.tgz", - "integrity": "sha512-w9iWudx1XWOHW5lQRS9iKpK/XuRhnN+0T7HvdCCd802FYkT1AMTnxndJHGrNJwRoRHkslGr4S29tjm1cT7x/7w==", + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==", "peer": true }, "node_modules/@types/lodash-es": { @@ -5212,36 +5208,36 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.10.tgz", - "integrity": "sha512-iXWlk+Cg/ag7gLvY0SfVucU8Kh2CjysYZjhhP70w9qI4MvSox4frrP+vDGvtQuzIcgD8+sxM6lZvCtdxGunTAA==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.11.tgz", + "integrity": "sha512-PwAdxs7/9Hc3ieBO12tXzmTD+Ln4qhT/56S+8DvrrZ4kLDn4Z/AMUr8tXJD0axiJBS0RKIoNaR0yMuQB9v9Udg==", "dependencies": { "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.10", + "@vue/shared": "3.5.11", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.10.tgz", - "integrity": "sha512-DyxHC6qPcktwYGKOIy3XqnHRrrXyWR2u91AjP+nLkADko380srsC2DC3s7Y1Rk6YfOlxOlvEQKa9XXmLI+W4ZA==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.11.tgz", + "integrity": "sha512-pyGf8zdbDDRkBrEzf8p7BQlMKNNF5Fk/Cf/fQ6PiUz9at4OaUfyXW0dGJTo2Vl1f5U9jSLCNf0EZJEogLXoeew==", "dependencies": { - "@vue/compiler-core": "3.5.10", - "@vue/shared": "3.5.10" + "@vue/compiler-core": "3.5.11", + "@vue/shared": "3.5.11" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.10.tgz", - "integrity": "sha512-to8E1BgpakV7224ZCm8gz1ZRSyjNCAWEplwFMWKlzCdP9DkMKhRRwt0WkCjY7jkzi/Vz3xgbpeig5Pnbly4Tow==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.11.tgz", + "integrity": "sha512-gsbBtT4N9ANXXepprle+X9YLg2htQk1sqH/qGJ/EApl+dgpUBdTv3yP7YlR535uHZY3n6XaR0/bKo0BgwwDniw==", "dependencies": { "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.10", - "@vue/compiler-dom": "3.5.10", - "@vue/compiler-ssr": "3.5.10", - "@vue/shared": "3.5.10", + "@vue/compiler-core": "3.5.11", + "@vue/compiler-dom": "3.5.11", + "@vue/compiler-ssr": "3.5.11", + "@vue/shared": "3.5.11", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.47", @@ -5249,12 +5245,12 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.10.tgz", - "integrity": "sha512-hxP4Y3KImqdtyUKXDRSxKSRkSm1H9fCvhojEYrnaoWhE4w/y8vwWhnosJoPPe2AXm5sU7CSbYYAgkt2ZPhDz+A==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.11.tgz", + "integrity": "sha512-P4+GPjOuC2aFTk1Z4WANvEhyOykcvEd5bIj2KVNGKGfM745LaXGr++5njpdBTzVz5pZifdlR1kpYSJJpIlSePA==", "dependencies": { - "@vue/compiler-dom": "3.5.10", - "@vue/shared": "3.5.10" + "@vue/compiler-dom": "3.5.11", + "@vue/shared": "3.5.11" } }, "node_modules/@vue/devtools-api": { @@ -5288,49 +5284,49 @@ } }, "node_modules/@vue/reactivity": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.10.tgz", - "integrity": "sha512-kW08v06F6xPSHhid9DJ9YjOGmwNDOsJJQk0ax21wKaUYzzuJGEuoKNU2Ujux8FLMrP7CFJJKsHhXN9l2WOVi2g==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.11.tgz", + "integrity": "sha512-Nqo5VZEn8MJWlCce8XoyVqHZbd5P2NH+yuAaFzuNSR96I+y1cnuUiq7xfSG+kyvLSiWmaHTKP1r3OZY4mMD50w==", "dependencies": { - "@vue/shared": "3.5.10" + "@vue/shared": "3.5.11" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.10.tgz", - "integrity": "sha512-9Q86I5Qq3swSkFfzrZ+iqEy7Vla325M7S7xc1NwKnRm/qoi1Dauz0rT6mTMmscqx4qz0EDJ1wjB+A36k7rl8mA==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.11.tgz", + "integrity": "sha512-7PsxFGqwfDhfhh0OcDWBG1DaIQIVOLgkwA5q6MtkPiDFjp5gohVnJEahSktwSFLq7R5PtxDKy6WKURVN1UDbzA==", "dependencies": { - "@vue/reactivity": "3.5.10", - "@vue/shared": "3.5.10" + "@vue/reactivity": "3.5.11", + "@vue/shared": "3.5.11" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.10.tgz", - "integrity": "sha512-t3x7ht5qF8ZRi1H4fZqFzyY2j+GTMTDxRheT+i8M9Ph0oepUxoadmbwlFwMoW7RYCpNQLpP2Yx3feKs+fyBdpA==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.11.tgz", + "integrity": "sha512-GNghjecT6IrGf0UhuYmpgaOlN7kxzQBhxWEn08c/SQDxv1yy4IXI1bn81JgEpQ4IXjRxWtPyI8x0/7TF5rPfYQ==", "dependencies": { - "@vue/reactivity": "3.5.10", - "@vue/runtime-core": "3.5.10", - "@vue/shared": "3.5.10", + "@vue/reactivity": "3.5.11", + "@vue/runtime-core": "3.5.11", + "@vue/shared": "3.5.11", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.10.tgz", - "integrity": "sha512-IVE97tt2kGKwHNq9yVO0xdh1IvYfZCShvDSy46JIh5OQxP1/EXSpoDqetVmyIzL7CYOWnnmMkVqd7YK2QSWkdw==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.11.tgz", + "integrity": "sha512-cVOwYBxR7Wb1B1FoxYvtjJD8X/9E5nlH4VSkJy2uMA1MzYNdzAAB//l8nrmN9py/4aP+3NjWukf9PZ3TeWULaA==", "dependencies": { - "@vue/compiler-ssr": "3.5.10", - "@vue/shared": "3.5.10" + "@vue/compiler-ssr": "3.5.11", + "@vue/shared": "3.5.11" }, "peerDependencies": { - "vue": "3.5.10" + "vue": "3.5.11" } }, "node_modules/@vue/shared": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.10.tgz", - "integrity": "sha512-VkkBhU97Ki+XJ0xvl4C9YJsIZ2uIlQ7HqPpZOS3m9VCvmROPaChZU6DexdMJqvz9tbgG+4EtFVrSuailUq5KGQ==" + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.11.tgz", + "integrity": "sha512-W8GgysJVnFo81FthhzurdRAWP/byq3q2qIw70e0JWblzVhjgOMiC2GyovXrZTFQJnFVryYaKGP3Tc9vYzYm6PQ==" }, "node_modules/@vuepress/bundler-webpack": { "version": "2.0.0-rc.17", @@ -5753,9 +5749,9 @@ } }, "node_modules/@vuepress/plugin-palette/node_modules/readdirp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", - "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "dev": true, "engines": { "node": ">= 14.16.0" @@ -7093,9 +7089,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001666", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001666.tgz", - "integrity": "sha512-gD14ICmoV5ZZM1OdzPWmpx+q4GyefaK06zi8hmfHV5xe4/2nOQX3+Dw5o+fSqOws2xVwL9j+anOPFwHzdEdV4g==", + "version": "1.0.30001667", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001667.tgz", + "integrity": "sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==", "funding": [ { "type": "opencollective", @@ -8400,9 +8396,9 @@ } }, "node_modules/deepmerge-ts": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.0.tgz", - "integrity": "sha512-q6bNsfNBtgr8ZOQqmZbl94MmYWm+QcDNIkqCxVWiw1vKvf+y/N2dZQKdnDXn4c5Ygt/y63tDof6OCN+2YwWVEg==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/deepmerge-ts/-/deepmerge-ts-7.1.1.tgz", + "integrity": "sha512-M27OAbyR/XgJujhAd6ZlYvZGzejbzvGPSZWwuzezPCdKLT9VMtK0kpRNDc5LeUDYqFN3e254gWG1yKpjidCtow==", "dev": true, "engines": { "node": ">=16.0.0" @@ -8794,9 +8790,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.5.31", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.31.tgz", - "integrity": "sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==" + "version": "1.5.32", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.32.tgz", + "integrity": "sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw==" }, "node_modules/emoji-regex": { "version": "10.4.0", @@ -11362,9 +11358,9 @@ } }, "node_modules/jasmine": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-5.3.0.tgz", - "integrity": "sha512-Vrv5VWTXVZ/5xcNawlYCmE24pOaZu3KduLr9iAaENoMJ8W8Ryvhfpw2cf3rI4Unc2ajvu2t4tCKjS72TnraBGQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-5.3.1.tgz", + "integrity": "sha512-3zeUCfr3d1iga3s+NgDpggCP+ex5sdbNgqNn+Tq4yw/QfnwGrWC/ZvXX1IRm5deSIZ1LnvoeGY55F/ztbVOXPQ==", "dev": true, "dependencies": { "glob": "^10.2.2", @@ -11657,15 +11653,15 @@ "dev": true }, "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", "dev": true, "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -13356,9 +13352,9 @@ } }, "node_modules/npm": { - "version": "10.8.3", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.8.3.tgz", - "integrity": "sha512-0IQlyAYvVtQ7uOhDFYZCGK8kkut2nh8cpAdA9E6FvRSJaTgtZRZgNjlC5ZCct//L73ygrpY93CxXpRJDtNqPVg==", + "version": "10.9.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.9.0.tgz", + "integrity": "sha512-ZanDioFylI9helNhl2LNd+ErmVD+H5I53ry41ixlLyCBgkuYb+58CvbAp99hW+zr5L9W4X7CchSoeqKdngOLSw==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -13432,18 +13428,18 @@ "dev": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^7.5.4", - "@npmcli/config": "^8.3.4", - "@npmcli/fs": "^3.1.1", - "@npmcli/map-workspaces": "^3.0.6", - "@npmcli/package-json": "^5.2.0", - "@npmcli/promise-spawn": "^7.0.2", - "@npmcli/redact": "^2.0.1", - "@npmcli/run-script": "^8.1.0", + "@npmcli/arborist": "^8.0.0", + "@npmcli/config": "^9.0.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/package-json": "^6.0.1", + "@npmcli/promise-spawn": "^8.0.1", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^9.0.1", "@sigstore/tuf": "^2.3.4", - "abbrev": "^2.0.0", + "abbrev": "^3.0.0", "archy": "~1.0.0", - "cacache": "^18.0.4", + "cacache": "^19.0.1", "chalk": "^5.3.0", "ci-info": "^4.0.0", "cli-columns": "^4.0.0", @@ -13451,54 +13447,54 @@ "fs-minipass": "^3.0.3", "glob": "^10.4.5", "graceful-fs": "^4.2.11", - "hosted-git-info": "^7.0.2", - "ini": "^4.1.3", - "init-package-json": "^6.0.3", + "hosted-git-info": "^8.0.0", + "ini": "^5.0.0", + "init-package-json": "^7.0.1", "is-cidr": "^5.1.0", - "json-parse-even-better-errors": "^3.0.2", - "libnpmaccess": "^8.0.6", - "libnpmdiff": "^6.1.4", - "libnpmexec": "^8.1.4", - "libnpmfund": "^5.0.12", - "libnpmhook": "^10.0.5", - "libnpmorg": "^6.0.6", - "libnpmpack": "^7.0.4", - "libnpmpublish": "^9.0.9", - "libnpmsearch": "^7.0.6", - "libnpmteam": "^6.0.5", - "libnpmversion": "^6.0.3", - "make-fetch-happen": "^13.0.1", + "json-parse-even-better-errors": "^4.0.0", + "libnpmaccess": "^9.0.0", + "libnpmdiff": "^7.0.0", + "libnpmexec": "^9.0.0", + "libnpmfund": "^6.0.0", + "libnpmhook": "^11.0.0", + "libnpmorg": "^7.0.0", + "libnpmpack": "^8.0.0", + "libnpmpublish": "^10.0.0", + "libnpmsearch": "^8.0.0", + "libnpmteam": "^7.0.0", + "libnpmversion": "^7.0.0", + "make-fetch-happen": "^14.0.1", "minimatch": "^9.0.5", "minipass": "^7.1.1", "minipass-pipeline": "^1.2.4", "ms": "^2.1.2", "node-gyp": "^10.2.0", - "nopt": "^7.2.1", - "normalize-package-data": "^6.0.2", - "npm-audit-report": "^5.0.0", - "npm-install-checks": "^6.3.0", - "npm-package-arg": "^11.0.3", - "npm-pick-manifest": "^9.1.0", - "npm-profile": "^10.0.0", - "npm-registry-fetch": "^17.1.0", - "npm-user-validate": "^2.0.1", + "nopt": "^8.0.0", + "normalize-package-data": "^7.0.0", + "npm-audit-report": "^6.0.0", + "npm-install-checks": "^7.1.0", + "npm-package-arg": "^12.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-profile": "^11.0.1", + "npm-registry-fetch": "^18.0.1", + "npm-user-validate": "^3.0.0", "p-map": "^4.0.0", - "pacote": "^18.0.6", - "parse-conflict-json": "^3.0.1", - "proc-log": "^4.2.0", + "pacote": "^19.0.0", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", "qrcode-terminal": "^0.12.0", - "read": "^3.0.1", + "read": "^4.0.0", "semver": "^7.6.3", "spdx-expression-parse": "^4.0.0", - "ssri": "^10.0.6", + "ssri": "^12.0.0", "supports-color": "^9.4.0", "tar": "^6.2.1", "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^3.0.0", - "validate-npm-package-name": "^5.0.1", - "which": "^4.0.0", - "write-file-atomic": "^5.0.1" + "validate-npm-package-name": "^6.0.0", + "which": "^5.0.0", + "write-file-atomic": "^6.0.0" }, "bin": { "npm": "bin/npm-cli.js", @@ -13732,6 +13728,18 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, + "node_modules/npm/node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", "dev": true, @@ -13739,7 +13747,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/agent": { - "version": "2.2.2", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -13751,48 +13759,48 @@ "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "7.5.4", + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.1", - "@npmcli/installed-package-contents": "^2.1.0", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.1.1", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.1.0", - "@npmcli/query": "^3.1.0", - "@npmcli/redact": "^2.0.0", - "@npmcli/run-script": "^8.1.0", - "bin-links": "^4.0.4", - "cacache": "^18.0.3", + "@npmcli/fs": "^4.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/metavuln-calculator": "^8.0.0", + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.1", + "@npmcli/query": "^4.0.0", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^9.0.1", + "bin-links": "^5.0.0", + "cacache": "^19.0.1", "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.2", - "json-parse-even-better-errors": "^3.0.2", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", "json-stringify-nice": "^1.1.4", "lru-cache": "^10.2.2", "minimatch": "^9.0.4", - "nopt": "^7.2.1", - "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.2", - "npm-pick-manifest": "^9.0.1", - "npm-registry-fetch": "^17.0.1", - "pacote": "^18.0.6", - "parse-conflict-json": "^3.0.0", - "proc-log": "^4.2.0", - "proggy": "^2.0.0", + "nopt": "^8.0.0", + "npm-install-checks": "^7.1.0", + "npm-package-arg": "^12.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.1", + "pacote": "^19.0.0", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "proggy": "^3.0.0", "promise-all-reject-late": "^1.0.0", "promise-call-limit": "^3.0.1", - "read-package-json-fast": "^3.0.2", + "read-package-json-fast": "^4.0.0", "semver": "^7.3.7", - "ssri": "^10.0.6", + "ssri": "^12.0.0", "treeverse": "^3.0.0", "walk-up-path": "^3.0.1" }, @@ -13800,30 +13808,30 @@ "arborist": "bin/index.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "8.3.4", + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/package-json": "^5.1.1", + "@npmcli/map-workspaces": "^4.0.1", + "@npmcli/package-json": "^6.0.1", "ci-info": "^4.0.0", - "ini": "^4.1.2", - "nopt": "^7.2.1", - "proc-log": "^4.2.0", + "ini": "^5.0.0", + "nopt": "^8.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", "walk-up-path": "^3.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/fs": { - "version": "3.1.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -13831,160 +13839,160 @@ "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "5.0.8", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "ini": "^4.1.3", + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", "promise-inflight": "^1.0.1", "promise-retry": "^2.0.1", "semver": "^7.3.5", - "which": "^4.0.0" + "which": "^5.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" }, "bin": { "installed-package-contents": "bin/index.js" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "3.0.6", + "version": "4.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/package-json": "^6.0.0", "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" + "minimatch": "^9.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { - "version": "7.1.1", + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "cacache": "^18.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^18.0.0", - "proc-log": "^4.1.0", + "cacache": "^19.0.0", + "json-parse-even-better-errors": "^4.0.0", + "pacote": "^19.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/name-from-folder": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/node-gyp": { - "version": "3.0.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/package-json": { - "version": "5.2.0", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^5.0.0", + "@npmcli/git": "^6.0.0", "glob": "^10.2.2", - "hosted-git-info": "^7.0.0", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "proc-log": "^4.0.0", + "hosted-git-info": "^8.0.0", + "json-parse-even-better-errors": "^4.0.0", + "normalize-package-data": "^7.0.0", + "proc-log": "^5.0.0", "semver": "^7.5.3" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "7.0.2", + "version": "8.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "which": "^4.0.0" + "which": "^5.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/query": { - "version": "3.1.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "postcss-selector-parser": "^6.0.10" + "postcss-selector-parser": "^6.1.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/redact": { - "version": "2.0.1", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "8.1.0", + "version": "9.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", - "which": "^4.0.0" + "proc-log": "^5.0.0", + "which": "^5.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/@pkgjs/parseargs": { @@ -14044,57 +14052,99 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "2.3.4", + "node_modules/npm/node_modules/@sigstore/sign/node_modules/@npmcli/agent": { + "version": "2.2.2", "dev": true, "inBundle": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/@sigstore/verify": { - "version": "1.2.1", + "node_modules/npm/node_modules/@sigstore/sign/node_modules/@npmcli/fs": { + "version": "3.1.1", "dev": true, "inBundle": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign/node_modules/cacache": { + "version": "18.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/@tufjs/canonical-json": { - "version": "2.0.0", + "node_modules/npm/node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "13.0.1", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/@tufjs/models": { - "version": "2.0.1", + "node_modules/npm/node_modules/@sigstore/sign/node_modules/minipass-fetch": { + "version": "3.0.5", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/npm/node_modules/abbrev": { - "version": "2.0.0", + "node_modules/npm/node_modules/@sigstore/sign/node_modules/proc-log": { + "version": "4.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -14102,26 +14152,120 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/agent-base": { - "version": "7.1.1", + "node_modules/npm/node_modules/@sigstore/sign/node_modules/ssri": { + "version": "10.0.6", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "debug": "^4.3.4" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 14" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/aggregate-error": { - "version": "3.1.0", + "node_modules/npm/node_modules/@sigstore/sign/node_modules/unique-filename": { + "version": "3.0.0", "dev": true, "inBundle": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/sign/node_modules/unique-slug": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/tuf": { + "version": "2.3.4", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "1.2.1", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@tufjs/models": { + "version": "2.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/abbrev": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/agent-base": { + "version": "7.1.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/npm/node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { "node": ">=8" @@ -14167,18 +14311,19 @@ "license": "MIT" }, "node_modules/npm/node_modules/bin-links": { - "version": "4.0.4", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "cmd-shim": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "read-cmd-shim": "^4.0.0", - "write-file-atomic": "^5.0.0" + "cmd-shim": "^7.0.0", + "npm-normalize-package-bin": "^4.0.0", + "proc-log": "^5.0.0", + "read-cmd-shim": "^5.0.0", + "write-file-atomic": "^6.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/binary-extensions": { @@ -14203,12 +14348,12 @@ } }, "node_modules/npm/node_modules/cacache": { - "version": "18.0.4", + "version": "19.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^3.1.0", + "@npmcli/fs": "^4.0.0", "fs-minipass": "^3.0.0", "glob": "^10.2.2", "lru-cache": "^10.0.1", @@ -14216,13 +14361,88 @@ "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", - "p-map": "^4.0.0", - "ssri": "^10.0.0", - "tar": "^6.1.11", - "unique-filename": "^3.0.0" + "p-map": "^7.0.2", + "ssri": "^12.0.0", + "tar": "^7.4.3", + "unique-filename": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/chownr": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/minizlib": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/mkdirp": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/p-map": { + "version": "7.0.2", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/tar": { + "version": "7.4.3", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/npm/node_modules/cacache/node_modules/yallist": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, "node_modules/npm/node_modules/chalk": { @@ -14296,12 +14516,12 @@ } }, "node_modules/npm/node_modules/cmd-shim": { - "version": "6.0.3", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/color-convert": { @@ -14508,7 +14728,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/hosted-git-info": { - "version": "7.0.2", + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -14516,7 +14736,7 @@ "lru-cache": "^10.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/http-cache-semantics": { @@ -14565,7 +14785,7 @@ } }, "node_modules/npm/node_modules/ignore-walk": { - "version": "6.0.5", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -14573,7 +14793,7 @@ "minimatch": "^9.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/imurmurhash": { @@ -14595,30 +14815,30 @@ } }, "node_modules/npm/node_modules/ini": { - "version": "4.1.3", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/init-package-json": { - "version": "6.0.3", + "version": "7.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/package-json": "^5.0.0", - "npm-package-arg": "^11.0.0", - "promzard": "^1.0.0", - "read": "^3.0.1", + "@npmcli/package-json": "^6.0.0", + "npm-package-arg": "^12.0.0", + "promzard": "^2.0.0", + "read": "^4.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^5.0.0" + "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/ip-address": { @@ -14701,12 +14921,12 @@ "license": "MIT" }, "node_modules/npm/node_modules/json-parse-even-better-errors": { - "version": "3.0.2", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/json-stringify-nice": { @@ -14740,169 +14960,169 @@ "license": "MIT" }, "node_modules/npm/node_modules/libnpmaccess": { - "version": "8.0.6", + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1" + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "6.1.4", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.5.4", - "@npmcli/installed-package-contents": "^2.1.0", + "@npmcli/arborist": "^8.0.0", + "@npmcli/installed-package-contents": "^3.0.0", "binary-extensions": "^2.3.0", "diff": "^5.1.0", "minimatch": "^9.0.4", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0", "tar": "^6.2.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "8.1.4", + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.5.4", - "@npmcli/run-script": "^8.1.0", + "@npmcli/arborist": "^8.0.0", + "@npmcli/run-script": "^9.0.1", "ci-info": "^4.0.0", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6", - "proc-log": "^4.2.0", - "read": "^3.0.1", - "read-package-json-fast": "^3.0.2", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0", + "proc-log": "^5.0.0", + "read": "^4.0.0", + "read-package-json-fast": "^4.0.0", "semver": "^7.3.7", "walk-up-path": "^3.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "5.0.12", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.5.4" + "@npmcli/arborist": "^8.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmhook": { - "version": "10.0.5", + "version": "11.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmorg": { - "version": "6.0.6", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "7.0.4", + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/arborist": "^7.5.4", - "@npmcli/run-script": "^8.1.0", - "npm-package-arg": "^11.0.2", - "pacote": "^18.0.6" + "@npmcli/arborist": "^8.0.0", + "@npmcli/run-script": "^9.0.1", + "npm-package-arg": "^12.0.0", + "pacote": "^19.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "9.0.9", + "version": "10.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "ci-info": "^4.0.0", - "normalize-package-data": "^6.0.1", - "npm-package-arg": "^11.0.2", - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.2.0", + "normalize-package-data": "^7.0.0", + "npm-package-arg": "^12.0.0", + "npm-registry-fetch": "^18.0.1", + "proc-log": "^5.0.0", "semver": "^7.3.7", "sigstore": "^2.2.0", - "ssri": "^10.0.6" + "ssri": "^12.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmsearch": { - "version": "7.0.6", + "version": "8.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmteam": { - "version": "6.0.5", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "aproba": "^2.0.0", - "npm-registry-fetch": "^17.0.1" + "npm-registry-fetch": "^18.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "6.0.3", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^5.0.7", - "@npmcli/run-script": "^8.1.0", - "json-parse-even-better-errors": "^3.0.2", - "proc-log": "^4.2.0", + "@npmcli/git": "^6.0.1", + "@npmcli/run-script": "^9.0.1", + "json-parse-even-better-errors": "^4.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.7" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/lru-cache": { @@ -14912,26 +15132,25 @@ "license": "ISC" }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "13.0.1", + "version": "14.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/agent": "^2.0.0", - "cacache": "^18.0.0", + "@npmcli/agent": "^3.0.0", + "cacache": "^19.0.1", "http-cache-semantics": "^4.1.1", - "is-lambda": "^1.0.1", "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", + "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", "negotiator": "^0.6.3", - "proc-log": "^4.2.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "ssri": "^10.0.0" + "ssri": "^12.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/minimatch": { @@ -14971,22 +15190,35 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "3.0.5", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" + "minizlib": "^3.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" }, "optionalDependencies": { "encoding": "^0.1.13" } }, + "node_modules/npm/node_modules/minipass-fetch/node_modules/minizlib": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" + } + }, "node_modules/npm/node_modules/minipass-flush": { "version": "1.0.5", "dev": true, @@ -15103,12 +15335,12 @@ "license": "MIT" }, "node_modules/npm/node_modules/mute-stream": { - "version": "1.0.0", + "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/negotiator": { @@ -15144,7 +15376,116 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/nopt": { + "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/agent": { + "version": "2.2.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/@npmcli/fs": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/abbrev": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/cacache": { + "version": "18.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/isexe": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": ">=16" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/make-fetch-happen": { + "version": "13.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/minipass-fetch": { + "version": "3.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/nopt": { "version": "7.2.1", "dev": true, "inBundle": true, @@ -15159,43 +15500,127 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/node-gyp/node_modules/proc-log": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/ssri": { + "version": "10.0.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/unique-filename": { + "version": "3.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/unique-slug": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/node-gyp/node_modules/which": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/nopt": { + "version": "8.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "abbrev": "^2.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/nopt/node_modules/abbrev": { + "version": "2.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/normalize-package-data": { - "version": "6.0.2", + "version": "7.0.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "dependencies": { - "hosted-git-info": "^7.0.0", + "hosted-git-info": "^8.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-audit-report": { - "version": "5.0.0", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-bundled": { - "version": "3.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^3.0.0" + "npm-normalize-package-bin": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-install-checks": { - "version": "6.3.0", + "version": "7.1.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause", @@ -15203,99 +15628,112 @@ "semver": "^7.1.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-normalize-package-bin": { - "version": "3.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "11.0.3", + "version": "12.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-packlist": { - "version": "8.0.2", + "version": "9.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "ignore-walk": "^6.0.4" + "ignore-walk": "^7.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-pick-manifest": { - "version": "9.1.0", + "version": "10.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", "semver": "^7.3.5" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-profile": { - "version": "10.0.0", + "version": "11.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^17.0.1", - "proc-log": "^4.0.0" + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0" }, "engines": { - "node": ">=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "17.1.0", + "version": "18.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/redact": "^2.0.0", + "@npmcli/redact": "^3.0.0", "jsonparse": "^1.3.1", - "make-fetch-happen": "^13.0.0", + "make-fetch-happen": "^14.0.0", "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^12.0.0", + "proc-log": "^5.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/npm-registry-fetch/node_modules/minizlib": { + "version": "3.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.4", + "rimraf": "^5.0.5" + }, + "engines": { + "node": ">= 18" } }, "node_modules/npm/node_modules/npm-user-validate": { - "version": "2.0.1", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "BSD-2-Clause", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/p-map": { @@ -15320,48 +15758,48 @@ "license": "BlueOak-1.0.0" }, "node_modules/npm/node_modules/pacote": { - "version": "18.0.6", + "version": "19.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", - "cacache": "^18.0.0", + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^6.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^9.0.0", + "cacache": "^19.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", + "npm-package-arg": "^12.0.0", + "npm-packlist": "^9.0.0", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^18.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", "sigstore": "^2.2.0", - "ssri": "^10.0.0", + "ssri": "^12.0.0", "tar": "^6.1.11" }, "bin": { "pacote": "bin/index.js" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/parse-conflict-json": { - "version": "3.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "json-parse-even-better-errors": "^3.0.0", + "json-parse-even-better-errors": "^4.0.0", "just-diff": "^6.0.0", "just-diff-apply": "^5.2.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/path-key": { @@ -15403,21 +15841,21 @@ } }, "node_modules/npm/node_modules/proc-log": { - "version": "4.2.0", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/proggy": { - "version": "2.0.0", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/promise-all-reject-late": { @@ -15458,15 +15896,15 @@ } }, "node_modules/npm/node_modules/promzard": { - "version": "1.0.2", + "version": "2.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "read": "^3.0.1" + "read": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/qrcode-terminal": { @@ -15478,37 +15916,37 @@ } }, "node_modules/npm/node_modules/read": { - "version": "3.0.1", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "mute-stream": "^1.0.0" + "mute-stream": "^2.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/read-cmd-shim": { - "version": "4.0.0", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/read-package-json-fast": { - "version": "3.0.2", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "json-parse-even-better-errors": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" + "json-parse-even-better-errors": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/retry": { @@ -15520,6 +15958,21 @@ "node": ">= 4" } }, + "node_modules/npm/node_modules/rimraf": { + "version": "5.0.10", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/npm/node_modules/safer-buffer": { "version": "2.1.2", "dev": true, @@ -15676,7 +16129,7 @@ "license": "BSD-3-Clause" }, "node_modules/npm/node_modules/ssri": { - "version": "10.0.6", + "version": "12.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -15684,7 +16137,7 @@ "minipass": "^7.0.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/string-width": { @@ -15838,7 +16291,119 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/unique-filename": { + "node_modules/npm/node_modules/tuf-js/node_modules/@npmcli/agent": { + "version": "2.2.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^10.0.1", + "socks-proxy-agent": "^8.0.3" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js/node_modules/@npmcli/fs": { + "version": "3.1.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js/node_modules/cacache": { + "version": "18.0.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^10.0.1", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js/node_modules/make-fetch-happen": { + "version": "13.0.1", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "@npmcli/agent": "^2.0.0", + "cacache": "^18.0.0", + "http-cache-semantics": "^4.1.1", + "is-lambda": "^1.0.1", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js/node_modules/minipass-fetch": { + "version": "3.0.5", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.0.3", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/npm/node_modules/tuf-js/node_modules/proc-log": { + "version": "4.2.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js/node_modules/ssri": { + "version": "10.0.6", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/tuf-js/node_modules/unique-filename": { "version": "3.0.0", "dev": true, "inBundle": true, @@ -15850,7 +16415,7 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/unique-slug": { + "node_modules/npm/node_modules/tuf-js/node_modules/unique-slug": { "version": "4.0.0", "dev": true, "inBundle": true, @@ -15862,6 +16427,30 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/unique-filename": { + "version": "4.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/npm/node_modules/unique-slug": { + "version": "5.0.0", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/npm/node_modules/util-deprecate": { "version": "1.0.2", "dev": true, @@ -15889,12 +16478,12 @@ } }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "5.0.1", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/walk-up-path": { @@ -15904,7 +16493,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/which": { - "version": "4.0.0", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -15915,7 +16504,7 @@ "node-which": "bin/which.js" }, "engines": { - "node": "^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/which/node_modules/isexe": { @@ -16028,7 +16617,7 @@ } }, "node_modules/npm/node_modules/write-file-atomic": { - "version": "5.0.1", + "version": "6.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -16037,7 +16626,7 @@ "signal-exit": "^4.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm/node_modules/yallist": { @@ -18273,15 +18862,15 @@ } }, "node_modules/regexpu-core": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", - "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.1.1.tgz", + "integrity": "sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==", "dev": true, "dependencies": { - "@babel/regjsgen": "^0.8.0", "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", + "regenerate-unicode-properties": "^10.2.0", + "regjsgen": "^0.8.0", + "regjsparser": "^0.11.0", "unicode-match-property-ecmascript": "^2.0.0", "unicode-match-property-value-ecmascript": "^2.1.0" }, @@ -18289,27 +18878,24 @@ "node": ">=4" } }, + "node_modules/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==", + "dev": true + }, "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.11.0.tgz", + "integrity": "sha512-vTbzVAjQDzwQdKuvj7qEq6OlAprCjE656khuGQ4QaBLg7abQ9I9ISpmLuc6inWe7zP75AECjqUa4g4sdQvOXhg==", "dev": true, "dependencies": { - "jsesc": "~0.5.0" + "jsesc": "~3.0.2" }, "bin": { "regjsparser": "bin/parser" } }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, "node_modules/relateurl": { "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", @@ -18972,9 +19558,9 @@ } }, "node_modules/sass/node_modules/readdirp": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.1.tgz", - "integrity": "sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", "engines": { "node": ">= 14.16.0" }, @@ -20735,15 +21321,15 @@ } }, "node_modules/vue": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.10.tgz", - "integrity": "sha512-Vy2kmJwHPlouC/tSnIgXVg03SG+9wSqT1xu1Vehc+ChsXsRd7jLkKgMltVEFOzUdBr3uFwBCG+41LJtfAcBRng==", - "dependencies": { - "@vue/compiler-dom": "3.5.10", - "@vue/compiler-sfc": "3.5.10", - "@vue/runtime-dom": "3.5.10", - "@vue/server-renderer": "3.5.10", - "@vue/shared": "3.5.10" + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.11.tgz", + "integrity": "sha512-/8Wurrd9J3lb72FTQS7gRMNQD4nztTtKPmuDuPuhqXmmpD6+skVjAeahNpVzsuky6Sy9gy7wn8UadqPtt9SQIg==", + "dependencies": { + "@vue/compiler-dom": "3.5.11", + "@vue/compiler-sfc": "3.5.11", + "@vue/runtime-dom": "3.5.11", + "@vue/server-renderer": "3.5.11", + "@vue/shared": "3.5.11" }, "peerDependencies": { "typescript": "*" diff --git a/package.json b/package.json index 6a93f100..5f055490 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,8 @@ "@babel/plugin-proposal-decorators": "^7.24.7", "@babel/plugin-proposal-private-methods": "^7.18.6", "@babel/plugin-transform-class-static-block": "^7.24.7", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-import-attributes": "^7.25.7", "@babel/preset-env": "^7.25.4", "@babel/runtime": "^7.25.6", "@lerna-lite/changed": "^3.9.1", From b8ca1d305d4f2f22ac2c8a3f3e70cc8a3a23d2fc Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 15:56:30 +0200 Subject: [PATCH 36/72] Change release ntoes --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 97588da8..d02cf153 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * `ModuleName` type alias in `@aedart/contracts`. * `test:fast` script in `packages.json`, to allow testing without (re)transpiling all packages. * `@types/jasmine` as development dependency (_in root package only_). +* `@babel/plugin-syntax-dynamic-import` and `@babel/plugin-syntax-import-attributes` as development dependency (_in root package, for testing_). ### Changed From 86b98c8454f46d1041c19939f672d1ff30fe1c20 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 16:17:10 +0200 Subject: [PATCH 37/72] Remove @babel/plugin-syntax-import-attributes --- babel.config.json | 3 +-- package-lock.json | 1 - package.json | 1 - 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/babel.config.json b/babel.config.json index 4a0948bf..466c031f 100644 --- a/babel.config.json +++ b/babel.config.json @@ -18,7 +18,6 @@ "@babel/plugin-proposal-class-properties", "@babel/plugin-proposal-private-methods", "@babel/plugin-transform-class-static-block", - "@babel/plugin-syntax-dynamic-import", - "@babel/plugin-syntax-import-attributes" + "@babel/plugin-syntax-dynamic-import" ] } diff --git a/package-lock.json b/package-lock.json index 764bb97f..edb5c0d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,7 +16,6 @@ "@babel/plugin-proposal-decorators": "^7.24.7", "@babel/plugin-proposal-private-methods": "^7.18.6", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-import-attributes": "^7.25.7", "@babel/plugin-transform-class-static-block": "^7.24.7", "@babel/preset-env": "^7.25.4", "@babel/runtime": "^7.25.6", diff --git a/package.json b/package.json index 5f055490..56eb6149 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,6 @@ "@babel/plugin-proposal-private-methods": "^7.18.6", "@babel/plugin-transform-class-static-block": "^7.24.7", "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-import-attributes": "^7.25.7", "@babel/preset-env": "^7.25.4", "@babel/runtime": "^7.25.6", "@lerna-lite/changed": "^3.9.1", From 47cbe39668f9d99d9188a4270247a6044a397b78 Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 16:17:39 +0200 Subject: [PATCH 38/72] Change release notes --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d02cf153..b824d142 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,7 +25,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * `ModuleName` type alias in `@aedart/contracts`. * `test:fast` script in `packages.json`, to allow testing without (re)transpiling all packages. * `@types/jasmine` as development dependency (_in root package only_). -* `@babel/plugin-syntax-dynamic-import` and `@babel/plugin-syntax-import-attributes` as development dependency (_in root package, for testing_). +* `@babel/plugin-syntax-dynamic-import` as development dependency (_in root package, for testing_). ### Changed From 62b1fd95270578d6cd5699139392ffe49fbb2c7f Mon Sep 17 00:00:00 2001 From: alin Date: Fri, 4 Oct 2024 16:18:07 +0200 Subject: [PATCH 39/72] Fix default export not returned Also improved error message --- packages/config/src/loaders/PathLoader.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/config/src/loaders/PathLoader.ts b/packages/config/src/loaders/PathLoader.ts index 62d5caa0..635dbbda 100644 --- a/packages/config/src/loaders/PathLoader.ts +++ b/packages/config/src/loaders/PathLoader.ts @@ -41,10 +41,12 @@ export default class PathLoader extends BaseLoader public async load(): Promise { try { - return await import(this.path); + const module = await import(this.path); + + return module?.default; } catch (e) { const reason: string = getErrorMessage(e); - throw new LoaderError(`Unable to load configuration items from path: ${reason}`, { cause: { path: this.path, previous: e } }); + throw new LoaderError(`Unable to load configuration items: ${reason}`, { cause: { path: this.path, previous: e } }); } } } \ No newline at end of file From db1a79946a9297f5da4e78824d1fe718b9a7ecce Mon Sep 17 00:00:00 2001 From: alin Date: Sat, 5 Oct 2024 11:03:36 +0200 Subject: [PATCH 40/72] Add test configuration to be imported dynamically --- tests/browser/packages/config/fixtures/my-config.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 tests/browser/packages/config/fixtures/my-config.js diff --git a/tests/browser/packages/config/fixtures/my-config.js b/tests/browser/packages/config/fixtures/my-config.js new file mode 100644 index 00000000..ae901cb9 --- /dev/null +++ b/tests/browser/packages/config/fixtures/my-config.js @@ -0,0 +1,5 @@ +export default { + app: { + name: 'Foo' + } +} \ No newline at end of file From 8fe10762927fb5aab5b40d628632a183b63a9762 Mon Sep 17 00:00:00 2001 From: alin Date: Sat, 5 Oct 2024 11:04:54 +0200 Subject: [PATCH 41/72] Add loader test (incomplete) There is a problem getting the dynamic import() to work here. Not sure what causes it, but more tinkering is required --- .../ConfigurationLoaderFactory.test.js | 68 ++++++++++++++++++- 1 file changed, 66 insertions(+), 2 deletions(-) diff --git a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js index 40d41e11..b52a5577 100644 --- a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js +++ b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js @@ -1,6 +1,7 @@ import { UnsupportedSourceError, ItemsLoader, + PathLoader, } from "@aedart/config"; import makeLoaderFactory from "../helpers/makeLoaderFactory"; @@ -30,9 +31,50 @@ describe('@aedart/config', () => { .toThrowError(UnsupportedSourceError); }); - it('can make loaders and load items', async () => { + xit('can make loaders and load items', async () => { + + // ------------------------------------------------------------------------------------ // + + console.info('FILE URL', import.meta.url); + console.info('FILE URL # 2', (new URL('../fixtures/my-config.js', import.meta.url)).toString()); + console.info('FILE URL # 3', (new URL('../fixtures/my-config.js', import.meta.url)).href); + console.info('FILE URL # 4', (new URL('../fixtures/my-config.js', import.meta.url)).pathname); + + class MyLoader { + async load(path) { + try { + return await import(path).default; + } catch (e) { + throw new Error(`Unable to load: ${e.message}`); + } + } + } - const factory = makeLoaderFactory(); + const fn = async (p) => { + const c = await import(p); + return c?.default; + } + + // TODO: WORKS + const raw = (await import('../fixtures/my-config.js')).default; + console.log('Raw import', raw); + + // TODO: + const viaFn = await fn('../fixtures/my-config.js'); + console.log('Fn import', viaFn); + + // const tmp = await (new MyLoader()).load('../fixtures/my-config.js'); + // const tmp = await (new MyLoader()).load((new URL('../fixtures/my-config.js', import.meta.url)).href); + // const tmp = await (new MyLoader()).load( + // 'file://' + (new URL('../fixtures/my-config.js', import.meta.url)).href + // ); + // const tmp = await (new MyLoader()).load( + // (new URL('../fixtures/my-config.js', import.meta.url)).toString() + // ); + const tmp = await (new MyLoader()).load( + (new URL('../fixtures/my-config.js', import.meta.url)) + ); + console.log('LOADED via MyLoader', tmp); const data = [ { @@ -42,10 +84,32 @@ describe('@aedart/config', () => { }, loader: ItemsLoader, expected: { foo: 'bar' } + }, + { + name: 'PathLoader', + //source: '../fixtures/my-config.js', // Relative does not seem to work here... + // source: path.resolve('../fixtures/my-config.js'), + // source: import.meta.url + '/../fixtures/my-config.js', + // source: '/home/alin/code/ion/tests/browser/packages/config/fixtures/my-config.js', + //source: '/home/alin/code/ion/tests/browser/packages/config/fixtures/my-config.js', + // source: (new URL('../fixtures/my-config.js', import.meta.url)).toString(), + + // source: (new URL('../fixtures/my-config.js', import.meta.url)).href, + + //source: 'file://' + (new URL('../fixtures/my-config.js', import.meta.url)).href, + + source: (new URL('../fixtures/my-config.js', import.meta.url)).href, + loader: PathLoader, + expected: { + app: { + name: 'Foo' + } + } } ]; // ------------------------------------------------------------------------------------ // + const factory = makeLoaderFactory(); for (const entry of data) { From ade784f70432b405594b4aaf4f13862b557d1774 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 14:28:50 +0200 Subject: [PATCH 42/72] Inject absolute path to tests directory --- shared/tests/webpack.config.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/shared/tests/webpack.config.js b/shared/tests/webpack.config.js index ff69cb6d..fa09aa58 100644 --- a/shared/tests/webpack.config.js +++ b/shared/tests/webpack.config.js @@ -1,4 +1,5 @@ const fs = require('node:fs'); +const path = require('node:path'); const dotEnv = require('dotenv'); const webpack = require('webpack'); @@ -47,10 +48,13 @@ module.exports = { }, plugins: [ - // Inject environment variables into token // @see https://webpack.js.org/plugins/define-plugin/ new webpack.DefinePlugin({ - __ENV__: JSON.stringify(ENV) - }) + // Inject environment variables into token + __ENV__: JSON.stringify(ENV), + + // Inject absolute path to where tests are located + __TESTS_PATH__: JSON.stringify(path.resolve(__dirname, '../../tests')), + }), ] }; From a35f97f2c820fb7e21399739ef4a4628204d8a9e Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:09:44 +0200 Subject: [PATCH 43/72] Attempt to resolve dynamic import by specifying predefined path This sadly fails in the tests. A different approach is need for handling dynamic imports of configuration files. --- packages/config/src/loaders/PathLoader.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/config/src/loaders/PathLoader.ts b/packages/config/src/loaders/PathLoader.ts index 635dbbda..c1027e34 100644 --- a/packages/config/src/loaders/PathLoader.ts +++ b/packages/config/src/loaders/PathLoader.ts @@ -41,9 +41,17 @@ export default class PathLoader extends BaseLoader public async load(): Promise { try { - const module = await import(this.path); + // Warning: depending on what bundler is used, fully dynamic imports might not be supported. + // This means that `(await import(this.path)).default` cannot work. When using Vite, Webpack, + // Rollup,...etc., part of the import path must be pre-specified, such that the bundler can + // perform some static analysis of what file(s) to load. + // + // @see https://webpack.js.org/api/module-methods/#dynamic-expressions-in-import + // @see https://vite.dev/guide/features#dynamic-import + // @see https://rollupjs.org/es-module-syntax/#dynamic-import (see dynamic import vars plugin) + // @see https://github.com/rollup/plugins/tree/master/packages/dynamic-import-vars - return module?.default; + return (await import(`./config/${this.path}.js`)).default; } catch (e) { const reason: string = getErrorMessage(e); throw new LoaderError(`Unable to load configuration items: ${reason}`, { cause: { path: this.path, previous: e } }); From 4ff9724e3b5dd23da39f184067297f918069ef91 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:11:30 +0200 Subject: [PATCH 44/72] Add additional dynamic import experiments Attempted several ways to get the dynamic import to work - some do work, but the constant issue is that the transpiled code in the @aedart/config package cannot accept a full dynamic path. A different approach is needed to resolve this issue. --- .../ConfigurationLoaderFactory.test.js | 82 +++++++++++++------ 1 file changed, 58 insertions(+), 24 deletions(-) diff --git a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js index b52a5577..d9671b8b 100644 --- a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js +++ b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js @@ -39,41 +39,73 @@ describe('@aedart/config', () => { console.info('FILE URL # 2', (new URL('../fixtures/my-config.js', import.meta.url)).toString()); console.info('FILE URL # 3', (new URL('../fixtures/my-config.js', import.meta.url)).href); console.info('FILE URL # 4', (new URL('../fixtures/my-config.js', import.meta.url)).pathname); + console.info('WEBPACK __TESTS_PATH__', __TESTS_PATH__); + // const RELATIVE_PATH = '../fixtures/my-config.js'; + // const FULL_PATH = __TESTS_PATH__ + '/browser/packages/config/fixtures/my-config.js'; + + + + // TODO: WORKS + const raw = (await import('../fixtures/my-config.js')).default; + console.log('Raw import', raw); + + // TODO: WORKS + const otherRaw = (await import( + __TESTS_PATH__ + '/browser/packages/config/fixtures/my-config.js' + )).default; + console.log('Other Raw import', otherRaw); + + // TODO: WORKS + const fnA = async () => { + try { + return (await import('../fixtures/my-config.js')).default; + } catch (e) { + console.error('fff', e.message); + } + } + const viaFnA = await fnA(); + console.log('Fn (A)', viaFnA); + + // TODO: WORKS + const fnB = async (p) => { + try { + // Acc. to webpack docs: "[...] The import() must contain at least some + // information about where the module is located [...]" + // @see https://webpack.js.org/api/module-methods/#dynamic-expressions-in-import + return (await import( + `../${p}` + )).default; + } catch(e) { + console.error(e.message); + throw e; + } + } + const viaFnB = await fnB('fixtures/my-config.js'); + console.log('Fn (B)', viaFnB); + + // TODO: + // console.log('baseURI', document.baseURI); + // console.log('URL (current dir)', (new URL('./', import.meta.url)).toString()); class MyLoader { async load(path) { try { - return await import(path).default; + // return (await import(`./${path}.js`)).default; + return (await import(`../${path}`)).default; } catch (e) { throw new Error(`Unable to load: ${e.message}`); } } } - - const fn = async (p) => { - const c = await import(p); - return c?.default; - } - - // TODO: WORKS - const raw = (await import('../fixtures/my-config.js')).default; - console.log('Raw import', raw); - // TODO: - const viaFn = await fn('../fixtures/my-config.js'); - console.log('Fn import', viaFn); - - // const tmp = await (new MyLoader()).load('../fixtures/my-config.js'); - // const tmp = await (new MyLoader()).load((new URL('../fixtures/my-config.js', import.meta.url)).href); - // const tmp = await (new MyLoader()).load( - // 'file://' + (new URL('../fixtures/my-config.js', import.meta.url)).href - // ); - // const tmp = await (new MyLoader()).load( - // (new URL('../fixtures/my-config.js', import.meta.url)).toString() - // ); const tmp = await (new MyLoader()).load( - (new URL('../fixtures/my-config.js', import.meta.url)) + // (new URL('../fixtures/my-config.js', import.meta.url)).href + // (new URL(__TESTS_PATH__ + '/browser/packages/config/fixtures/my-config.js', import.meta.url)).href + 'fixtures/my-config.js' ); + // const tmp = await (new MyLoader()).load( + // '../fixtures/my-config' + // ); console.log('LOADED via MyLoader', tmp); const data = [ @@ -98,7 +130,9 @@ describe('@aedart/config', () => { //source: 'file://' + (new URL('../fixtures/my-config.js', import.meta.url)).href, - source: (new URL('../fixtures/my-config.js', import.meta.url)).href, + // source: (new URL('../fixtures/my-config.js', import.meta.url)).href, + // source: __TESTS_PATH__ + '/browser/packages/config/fixtures/my-config.js', + source: 'my-config', loader: PathLoader, expected: { app: { From fd4a0188badeeeb649c7dd6570ead7bdb89d9ac4 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:17:21 +0200 Subject: [PATCH 45/72] Deprecate Configuration Loader(s) and Factory See previous commits for additional details. --- packages/config/src/exceptions/LoaderError.ts | 2 ++ packages/config/src/loaders/BaseLoader.ts | 2 ++ packages/config/src/loaders/ConfigurationLoaderFactory.ts | 2 ++ packages/config/src/loaders/ItemsLoader.ts | 2 ++ packages/config/src/loaders/LoaderBlueprint.ts | 2 ++ packages/config/src/loaders/PathLoader.ts | 2 ++ packages/config/src/loaders/isConfigurationLoader.ts | 2 ++ .../config/src/loaders/isConfigurationLoaderConstructor.ts | 2 ++ packages/contracts/src/config/loaders/Factory.ts | 2 ++ packages/contracts/src/config/loaders/Loader.ts | 2 ++ packages/contracts/src/config/loaders/LoaderConstructor.ts | 2 ++ tests/browser/packages/config/helpers/makeLoaderFactory.js | 2 ++ .../packages/config/loaders/ConfigurationLoaderFactory.test.js | 3 +++ .../packages/config/loaders/isConfigurationLoader.test.js | 3 +++ .../config/loaders/isConfigurationLoaderConstructor.test.js | 3 +++ 15 files changed, 33 insertions(+) diff --git a/packages/config/src/exceptions/LoaderError.ts b/packages/config/src/exceptions/LoaderError.ts index 36f76ed4..827455c9 100644 --- a/packages/config/src/exceptions/LoaderError.ts +++ b/packages/config/src/exceptions/LoaderError.ts @@ -2,6 +2,8 @@ import type { LoaderException } from "@aedart/contracts/config"; import { configureCustomError } from "@aedart/support/exceptions"; /** + * @deprecated TODO: Rename this, e.g. Configuration Resolve Error + * * Configuration Loader Error * * @see {LoaderException} diff --git a/packages/config/src/loaders/BaseLoader.ts b/packages/config/src/loaders/BaseLoader.ts index c02f6d73..61f65e83 100644 --- a/packages/config/src/loaders/BaseLoader.ts +++ b/packages/config/src/loaders/BaseLoader.ts @@ -3,6 +3,8 @@ import type { Items, Loader } from "@aedart/contracts/config"; import { AbstractClassError } from "@aedart/support/exceptions"; /** + * @deprecated TODO: Remove this... + * * Base Configuration Loader * * @see {Loader} diff --git a/packages/config/src/loaders/ConfigurationLoaderFactory.ts b/packages/config/src/loaders/ConfigurationLoaderFactory.ts index 095da753..d07eaa4b 100644 --- a/packages/config/src/loaders/ConfigurationLoaderFactory.ts +++ b/packages/config/src/loaders/ConfigurationLoaderFactory.ts @@ -10,6 +10,8 @@ import ItemsLoader from './ItemsLoader'; import PathLoader from './PathLoader'; /** + * @deprecated TODO: Remove this... + * * Configuration Loader Factory * * @see {import('@aedart/contracts/config').Factory} diff --git a/packages/config/src/loaders/ItemsLoader.ts b/packages/config/src/loaders/ItemsLoader.ts index 9a641d68..0491f1cb 100644 --- a/packages/config/src/loaders/ItemsLoader.ts +++ b/packages/config/src/loaders/ItemsLoader.ts @@ -2,6 +2,8 @@ import type { Items } from "@aedart/contracts/config"; import BaseLoader from "./BaseLoader"; /** + * @deprecated TODO: Remove this... + * * Items Loader * * @see {BaseLoader} diff --git a/packages/config/src/loaders/LoaderBlueprint.ts b/packages/config/src/loaders/LoaderBlueprint.ts index d003f1d4..00a806c3 100644 --- a/packages/config/src/loaders/LoaderBlueprint.ts +++ b/packages/config/src/loaders/LoaderBlueprint.ts @@ -1,6 +1,8 @@ import type { ClassBlueprint } from "@aedart/contracts/support/reflections"; /** + * @deprecated TODO: Remove this... + * * Configuration Loader Blueprint * * Defines the minimum members that a target class should contain, before it is diff --git a/packages/config/src/loaders/PathLoader.ts b/packages/config/src/loaders/PathLoader.ts index c1027e34..b5b0836b 100644 --- a/packages/config/src/loaders/PathLoader.ts +++ b/packages/config/src/loaders/PathLoader.ts @@ -4,6 +4,8 @@ import BaseLoader from './BaseLoader'; import LoaderError from '../exceptions/LoaderError'; /** + * @deprecated TODO: Remove this... + * * Path (module) Loader * * @see {BaseLoader} diff --git a/packages/config/src/loaders/isConfigurationLoader.ts b/packages/config/src/loaders/isConfigurationLoader.ts index 5d2ee588..d0cc31ab 100644 --- a/packages/config/src/loaders/isConfigurationLoader.ts +++ b/packages/config/src/loaders/isConfigurationLoader.ts @@ -3,6 +3,8 @@ import { isConfigurationLoaderConstructor } from "./isConfigurationLoaderConstru import BaseLoader from "./BaseLoader"; /** + * @deprecated TODO: Remove this... + * * Determine if given object is a [Configuration Loader]{@link import('@aedart/contracts/config').Loader} * * @param {object} instance diff --git a/packages/config/src/loaders/isConfigurationLoaderConstructor.ts b/packages/config/src/loaders/isConfigurationLoaderConstructor.ts index 6a57223e..a57438ad 100644 --- a/packages/config/src/loaders/isConfigurationLoaderConstructor.ts +++ b/packages/config/src/loaders/isConfigurationLoaderConstructor.ts @@ -5,6 +5,8 @@ import BaseLoader from "./BaseLoader"; import { LoaderBlueprint } from "./LoaderBlueprint"; /** + * @deprecated TODO: Remove this... + * * Determine if target is a [Configuration Loader Constructor]{@link import('@aedart/contracts/config').LoaderConstructor} * * @param {any} target diff --git a/packages/contracts/src/config/loaders/Factory.ts b/packages/contracts/src/config/loaders/Factory.ts index 2e653d94..ca58bdb7 100644 --- a/packages/contracts/src/config/loaders/Factory.ts +++ b/packages/contracts/src/config/loaders/Factory.ts @@ -2,6 +2,8 @@ import { Source } from '../types'; import Loader from './Loader'; /** + * @deprecated TODO: Remove this... + * * Configuration Loader Factory */ export default interface Factory diff --git a/packages/contracts/src/config/loaders/Loader.ts b/packages/contracts/src/config/loaders/Loader.ts index 08314540..77c61577 100644 --- a/packages/contracts/src/config/loaders/Loader.ts +++ b/packages/contracts/src/config/loaders/Loader.ts @@ -1,6 +1,8 @@ import { Items } from '../types'; /** + * @deprecated TODO: Remove this... + * * Configuration Loader */ export default interface Loader diff --git a/packages/contracts/src/config/loaders/LoaderConstructor.ts b/packages/contracts/src/config/loaders/LoaderConstructor.ts index 7be2a1ae..ec703dbc 100644 --- a/packages/contracts/src/config/loaders/LoaderConstructor.ts +++ b/packages/contracts/src/config/loaders/LoaderConstructor.ts @@ -1,6 +1,8 @@ import Loader from './Loader'; /** + * @deprecated TODO: Remove this... + * * Configuration Loader Constructor */ export default interface LoaderConstructor diff --git a/tests/browser/packages/config/helpers/makeLoaderFactory.js b/tests/browser/packages/config/helpers/makeLoaderFactory.js index 7e92c2b0..28687fca 100644 --- a/tests/browser/packages/config/helpers/makeLoaderFactory.js +++ b/tests/browser/packages/config/helpers/makeLoaderFactory.js @@ -2,6 +2,8 @@ import { Application } from "@aedart/core"; import { ConfigurationLoaderFactory } from "@aedart/config"; /** + * @deprecated TODO: Remove this... + * * Returns a new configuration loader factory instance * * @param {Application} [app] diff --git a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js index d9671b8b..20c3c7b6 100644 --- a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js +++ b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js @@ -5,6 +5,9 @@ import { } from "@aedart/config"; import makeLoaderFactory from "../helpers/makeLoaderFactory"; +/** + * @deprecated TODO: Remove this... + */ describe('@aedart/config', () => { describe('loaders', () => { diff --git a/tests/browser/packages/config/loaders/isConfigurationLoader.test.js b/tests/browser/packages/config/loaders/isConfigurationLoader.test.js index ff2b57e3..4641c853 100644 --- a/tests/browser/packages/config/loaders/isConfigurationLoader.test.js +++ b/tests/browser/packages/config/loaders/isConfigurationLoader.test.js @@ -1,5 +1,8 @@ import { BaseLoader, isConfigurationLoader } from "@aedart/config"; +/** + * @deprecated TODO: Remove this... + */ describe('@aedart/config', () => { describe('loaders', () => { diff --git a/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js b/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js index de657af1..6fe09e8f 100644 --- a/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js +++ b/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js @@ -1,5 +1,8 @@ import { BaseLoader, isConfigurationLoaderConstructor } from "@aedart/config"; +/** + * @deprecated TODO: Remove this... + */ describe('@aedart/config', () => { describe('loaders', () => { From 78e1ae299e8296d1d2b4e6d99fe603231d99dfa5 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:20:00 +0200 Subject: [PATCH 46/72] Deprecate Module Name type alias --- packages/contracts/src/types.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/contracts/src/types.ts b/packages/contracts/src/types.ts index 171acfc1..ab85bfd6 100644 --- a/packages/contracts/src/types.ts +++ b/packages/contracts/src/types.ts @@ -55,6 +55,8 @@ export type ClassMethodName = { export type ClassMethodReference = [ Constructor | T, ClassMethodName ]; /** + * @deprecated TODO: Remove this ... + * * A [module-name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import#modulename) to * be imported. This is often a relative or absolute URL to *.js file that contains the module itself. */ From 271871ff1a6c38d2412e2551d5319c8d1f30e7fc Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:20:36 +0200 Subject: [PATCH 47/72] Deprecate Path and simplify Source type alias --- packages/contracts/src/config/types.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/contracts/src/config/types.ts b/packages/contracts/src/config/types.ts index 0fbf29ca..717262c5 100644 --- a/packages/contracts/src/config/types.ts +++ b/packages/contracts/src/config/types.ts @@ -8,6 +8,8 @@ import LoaderConstructor from "./loaders/LoaderConstructor"; export type Items = Record; /* eslint-disable-line @typescript-eslint/no-explicit-any */ /** + * @deprecated TODO: Remove this + * * Path ([module-name]{@link ModuleName}) from where to load configuration {@link Items}. */ export type Path = ModuleName; @@ -20,4 +22,4 @@ export type LoaderCallback = () => Promise; /** * A source that ultimately must resolve into configuration {@link Items}. */ -export type Source = Items | Path | Loader | LoaderConstructor | LoaderCallback; \ No newline at end of file +export type Source = Items | LoaderCallback; \ No newline at end of file From 7c6a471a51f95a9033607c47489f90ac12f3bb2c Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:22:13 +0200 Subject: [PATCH 48/72] Rename LoaderCallback to ResolveCallback --- packages/contracts/src/config/types.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/contracts/src/config/types.ts b/packages/contracts/src/config/types.ts index 717262c5..1838ffbe 100644 --- a/packages/contracts/src/config/types.ts +++ b/packages/contracts/src/config/types.ts @@ -15,11 +15,11 @@ export type Items = Record; /* eslint-disable-line @typescript export type Path = ModuleName; /** - * Callback that is responsible for loading configuration {@link Items}. + * Callback that is responsible for resolving configuration {@link Items}. */ -export type LoaderCallback = () => Promise; +export type ResolveCallback = () => Promise; /** * A source that ultimately must resolve into configuration {@link Items}. */ -export type Source = Items | LoaderCallback; \ No newline at end of file +export type Source = Items | ResolveCallback; \ No newline at end of file From 31b9f899cdefa963dd31623f8922742a95d11d11 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:23:20 +0200 Subject: [PATCH 49/72] Deprecate Loader Exception --- packages/contracts/src/config/exceptions/LoaderException.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/contracts/src/config/exceptions/LoaderException.ts b/packages/contracts/src/config/exceptions/LoaderException.ts index 1da9da3b..87b291e6 100644 --- a/packages/contracts/src/config/exceptions/LoaderException.ts +++ b/packages/contracts/src/config/exceptions/LoaderException.ts @@ -1,6 +1,8 @@ import { Throwable } from "@aedart/contracts/support/exceptions"; /** + * @deprecated TODO: Remove this... + * * Configuration Loader Exception * * General exception to be thrown whenever a configuration load is unable to load items. From 8378db1265bcdaa88f131b5a7db5bfece20a552f Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:25:55 +0200 Subject: [PATCH 50/72] Add Configuration Resolve Exception interface --- .../src/config/exceptions/ResolveException.ts | 10 ++++++++++ packages/contracts/src/config/exceptions/index.ts | 2 ++ 2 files changed, 12 insertions(+) create mode 100644 packages/contracts/src/config/exceptions/ResolveException.ts diff --git a/packages/contracts/src/config/exceptions/ResolveException.ts b/packages/contracts/src/config/exceptions/ResolveException.ts new file mode 100644 index 00000000..5eeb1574 --- /dev/null +++ b/packages/contracts/src/config/exceptions/ResolveException.ts @@ -0,0 +1,10 @@ +import { Throwable } from "@aedart/contracts/support/exceptions"; + +/** + * Configuration Resolve Exception + * + * To be thrown whenever configuration [items]{@link import('@aedart/contracts/config').Items} + * cannot be resolved. + */ +export default interface ResolveException extends Throwable +{} \ No newline at end of file diff --git a/packages/contracts/src/config/exceptions/index.ts b/packages/contracts/src/config/exceptions/index.ts index cdb63641..0d6c0689 100644 --- a/packages/contracts/src/config/exceptions/index.ts +++ b/packages/contracts/src/config/exceptions/index.ts @@ -1,6 +1,8 @@ import LoaderException from "./LoaderException"; +import ResolveException from "./ResolveException"; import UnsupportedSourceException from "./UnsupportedSourceException"; export { type LoaderException, + type ResolveException, type UnsupportedSourceException } \ No newline at end of file From ae233b0b7492c6418cab8080271da9797885cff8 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:27:59 +0200 Subject: [PATCH 51/72] Deprecate CONFIG_LOADER_FACTORY identifier --- packages/contracts/src/config/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/contracts/src/config/index.ts b/packages/contracts/src/config/index.ts index 8961523e..c2c87dcc 100644 --- a/packages/contracts/src/config/index.ts +++ b/packages/contracts/src/config/index.ts @@ -6,6 +6,8 @@ export const CONFIG: unique symbol = Symbol('@aedart/contracts/config'); /** + * @deprecated TODO: Remove this .... + * * Configuration Loader Factory identifier * * @type {Symbol} From 24f74595bf4c96791211d42fe200ec49a1cf5a08 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:31:18 +0200 Subject: [PATCH 52/72] Change exception, inherit from Resolve Exception --- .../src/config/exceptions/UnsupportedSourceException.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/contracts/src/config/exceptions/UnsupportedSourceException.ts b/packages/contracts/src/config/exceptions/UnsupportedSourceException.ts index fe923413..f6f7502f 100644 --- a/packages/contracts/src/config/exceptions/UnsupportedSourceException.ts +++ b/packages/contracts/src/config/exceptions/UnsupportedSourceException.ts @@ -1,10 +1,10 @@ -import LoaderException from "./LoaderException"; +import ResolveException from './ResolveException'; /** * Unsupported Configuration Source Exception * - * To be thrown whenever a configuration loader factory is unable to resolve an appropriate - * configuration loader, for the given [source]{@link import('@aedart/contracts/config').Source}. + * To be thrown whenever a [Resolver]{@link import('@aedart/contracts/config').Resolver} is unable to + * resolve configuration items, due to an unsupported [source]{@link import('@aedart/contracts/config').Source}. */ -export default interface UnsupportedSourceException extends LoaderException +export default interface UnsupportedSourceException extends ResolveException {} \ No newline at end of file From 575764c9ef3d5167e39461b040b955d0430a700d Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:32:56 +0200 Subject: [PATCH 53/72] Add Resolve Error --- .../config/src/exceptions/ResolveError.ts | 23 +++++++++++++++++++ packages/config/src/exceptions/index.ts | 2 ++ 2 files changed, 25 insertions(+) create mode 100644 packages/config/src/exceptions/ResolveError.ts diff --git a/packages/config/src/exceptions/ResolveError.ts b/packages/config/src/exceptions/ResolveError.ts new file mode 100644 index 00000000..cc8eacfe --- /dev/null +++ b/packages/config/src/exceptions/ResolveError.ts @@ -0,0 +1,23 @@ +import type { ResolveException } from "@aedart/contracts/config"; +import { configureCustomError } from "@aedart/support/exceptions"; + +/** + * Configuration Resolve Error + * + * @see {ResolveException} + */ +export default class ResolveError extends Error implements ResolveException +{ + /** + * Create new Resolve Error instance + * + * @param {string} [message] + * @param {ErrorOptions} [options] + */ + constructor(message?: string, options?: ErrorOptions) + { + super(message, options); + + configureCustomError(this); + } +} \ No newline at end of file diff --git a/packages/config/src/exceptions/index.ts b/packages/config/src/exceptions/index.ts index 673220fd..612505c5 100644 --- a/packages/config/src/exceptions/index.ts +++ b/packages/config/src/exceptions/index.ts @@ -1,6 +1,8 @@ import LoaderError from "./LoaderError"; +import ResolveError from './ResolveError'; import UnsupportedSourceError from "./UnsupportedSourceError"; export { LoaderError, + ResolveError, UnsupportedSourceError } \ No newline at end of file From 43610c139faad2631f697e3669ecac09b5355468 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:33:26 +0200 Subject: [PATCH 54/72] Change error, inherit from ResolveError --- packages/config/src/exceptions/UnsupportedSourceError.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/config/src/exceptions/UnsupportedSourceError.ts b/packages/config/src/exceptions/UnsupportedSourceError.ts index fa21aa55..0b2ee390 100644 --- a/packages/config/src/exceptions/UnsupportedSourceError.ts +++ b/packages/config/src/exceptions/UnsupportedSourceError.ts @@ -1,13 +1,13 @@ import type { UnsupportedSourceException } from "@aedart/contracts/config"; import { configureCustomError } from "@aedart/support/exceptions"; -import LoaderError from "./LoaderError"; +import ResolveError from "./ResolveError"; /** * Unsupported Configuration Source Error * * @see {UnsupportedSourceException} */ -export default class UnsupportedSourceError extends LoaderError implements UnsupportedSourceException +export default class UnsupportedSourceError extends ResolveError implements UnsupportedSourceException { /** * Create new Unsupported Source Error instance From 6b046d4d7b7fd4f11f1bc7e1e81d3b229003a2af Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:34:46 +0200 Subject: [PATCH 55/72] Add Configuration Resolver interface --- packages/contracts/src/config/Resolver.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 packages/contracts/src/config/Resolver.ts diff --git a/packages/contracts/src/config/Resolver.ts b/packages/contracts/src/config/Resolver.ts new file mode 100644 index 00000000..20dabc0f --- /dev/null +++ b/packages/contracts/src/config/Resolver.ts @@ -0,0 +1,18 @@ +import { Items, Source } from './types'; + +/** + * Configuration Resolver + */ +export default interface Resolver +{ + /** + * Resolves configuration items from the given source + * + * @param {Source} source + * + * @returns {Promise} + * + * @throws {ResolveException} + */ + resolve(source: Source): Promise; +} \ No newline at end of file From 1ee115890cb4beebacef7e4cde0efc313f806796 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:35:03 +0200 Subject: [PATCH 56/72] Export configuration resolver Also added unique identifier for the resolver --- packages/contracts/src/config/index.ts | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/contracts/src/config/index.ts b/packages/contracts/src/config/index.ts index c2c87dcc..3ce087b1 100644 --- a/packages/contracts/src/config/index.ts +++ b/packages/contracts/src/config/index.ts @@ -14,9 +14,18 @@ export const CONFIG: unique symbol = Symbol('@aedart/contracts/config'); */ export const CONFIG_LOADER_FACTORY: unique symbol = Symbol('@aedart/contracts/config/loaders/factory'); +/** + * Configuration Resolver identifier + * + * @type {Symbol} + */ +export const CONFIG_RESOLVER: unique symbol = Symbol('@aedart/contracts/config/resolver'); + import Repository from './Repository'; +import Resolver from './Resolver'; export { - type Repository + type Repository, + type Resolver } export * from './loaders/index'; From d58b24fd0cd836623fe80119cd93cc3876fb90c3 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:42:18 +0200 Subject: [PATCH 57/72] Allow Promise to also be part of the Source type alias --- packages/contracts/src/config/types.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contracts/src/config/types.ts b/packages/contracts/src/config/types.ts index 1838ffbe..89c01fdb 100644 --- a/packages/contracts/src/config/types.ts +++ b/packages/contracts/src/config/types.ts @@ -22,4 +22,4 @@ export type ResolveCallback = () => Promise; /** * A source that ultimately must resolve into configuration {@link Items}. */ -export type Source = Items | ResolveCallback; \ No newline at end of file +export type Source = Items | Promise | ResolveCallback; \ No newline at end of file From 4481e1a6c3beb2573c900ff1fee32887927fa28d Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:51:38 +0200 Subject: [PATCH 58/72] Add Default Configuration Resolver --- .../config/src/resolvers/DefaultResolver.ts | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 packages/config/src/resolvers/DefaultResolver.ts diff --git a/packages/config/src/resolvers/DefaultResolver.ts b/packages/config/src/resolvers/DefaultResolver.ts new file mode 100644 index 00000000..49f009ea --- /dev/null +++ b/packages/config/src/resolvers/DefaultResolver.ts @@ -0,0 +1,60 @@ +import type { Items, Resolver, Source, ResolveCallback } from "@aedart/contracts/config"; +import { isPromise, isCallable } from "@aedart/support/reflections"; +import { getErrorMessage } from "@aedart/support/exceptions"; +import ResolveError from "../exceptions/ResolveError"; +import UnsupportedSourceError from "../exceptions/UnsupportedSourceError"; + +/** + * Default Configuration Resolver + * + * @see {Resolver} + */ +export default class DefaultResolver implements Resolver +{ + /** + * Resolves configuration items from the given source + * + * @param {Source} source + * + * @returns {Promise} + * + * @throws {ResolveException} + */ + public async resolve(source: Source): Promise + { + if (isPromise(source)) { + return this.resolveItems(source as Promise); + } + + if (typeof source === 'object') { + return this.resolveItems(new Promise((resolve) => { + resolve(source as Items); + })); + } + + if (isCallable(source)) { + return this.resolveItems((source as ResolveCallback)()); + } + + throw new UnsupportedSourceError('Unable to resolve configuration items from source', { cause: { source: source } }); + } + + /** + * Resolves configuration items from the given promise + * + * @param {Promise} promise + * + * @returns {Promise} + * + * @protected + */ + protected async resolveItems(promise: Promise): Promise + { + try { + return await promise; + } catch (e) { + const reason: string = getErrorMessage(e); + throw new ResolveError(`Unable to resolve configuration items: ${reason}`, { cause: { source: promise } }); + } + } +} \ No newline at end of file From 68306485c3e93d8abb64b52190768d0706729fab Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:51:49 +0200 Subject: [PATCH 59/72] Export default resolver --- packages/config/src/index.ts | 1 + packages/config/src/resolvers/index.ts | 4 ++++ 2 files changed, 5 insertions(+) create mode 100644 packages/config/src/resolvers/index.ts diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index 1d23fc32..361be7a4 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -4,5 +4,6 @@ export { } export * from './loaders/index'; +export * from './resolvers/index'; export * from './providers/index'; export * from './exceptions/index'; \ No newline at end of file diff --git a/packages/config/src/resolvers/index.ts b/packages/config/src/resolvers/index.ts new file mode 100644 index 00000000..afaa41bf --- /dev/null +++ b/packages/config/src/resolvers/index.ts @@ -0,0 +1,4 @@ +import DefaultResolver from "./DefaultResolver"; +export { + DefaultResolver +} \ No newline at end of file From 3584079a69fc11916784f14682b93e2ed059e96b Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:53:39 +0200 Subject: [PATCH 60/72] Change provider, bind config resolver --- packages/config/src/providers/ConfigServiceProvider.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/config/src/providers/ConfigServiceProvider.ts b/packages/config/src/providers/ConfigServiceProvider.ts index b3c0c39c..654e7ae5 100644 --- a/packages/config/src/providers/ConfigServiceProvider.ts +++ b/packages/config/src/providers/ConfigServiceProvider.ts @@ -1,7 +1,8 @@ import type { Application } from "@aedart/contracts/core"; -import { CONFIG, CONFIG_LOADER_FACTORY } from "@aedart/contracts/config"; +import { CONFIG, CONFIG_LOADER_FACTORY, CONFIG_RESOLVER } from "@aedart/contracts/config"; import { ServiceProvider } from "@aedart/support/services"; import Repository from '../Repository'; +import Resolver from '../resolvers/DefaultResolver'; import ConfigurationLoaderFactory from "../loaders/ConfigurationLoaderFactory"; /** @@ -20,6 +21,8 @@ export default class ConfigServiceProvider extends ServiceProvider .singleton(CONFIG_LOADER_FACTORY, (app) => { return new ConfigurationLoaderFactory(app as Application); - }); + }) + + .singleton(CONFIG_RESOLVER, Resolver); } } \ No newline at end of file From facdd0158553ebf1632594f3f8cd8029d19ef87a Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 17:58:12 +0200 Subject: [PATCH 61/72] Disable configuration loader related tests --- .../packages/config/loaders/ConfigurationLoaderFactory.test.js | 2 +- .../packages/config/loaders/isConfigurationLoader.test.js | 2 +- .../config/loaders/isConfigurationLoaderConstructor.test.js | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js index 20c3c7b6..81a30578 100644 --- a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js +++ b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js @@ -8,7 +8,7 @@ import makeLoaderFactory from "../helpers/makeLoaderFactory"; /** * @deprecated TODO: Remove this... */ -describe('@aedart/config', () => { +xdescribe('@aedart/config', () => { describe('loaders', () => { describe('ConfigurationLoaderFactory', () => { diff --git a/tests/browser/packages/config/loaders/isConfigurationLoader.test.js b/tests/browser/packages/config/loaders/isConfigurationLoader.test.js index 4641c853..14c8f913 100644 --- a/tests/browser/packages/config/loaders/isConfigurationLoader.test.js +++ b/tests/browser/packages/config/loaders/isConfigurationLoader.test.js @@ -3,7 +3,7 @@ import { BaseLoader, isConfigurationLoader } from "@aedart/config"; /** * @deprecated TODO: Remove this... */ -describe('@aedart/config', () => { +xdescribe('@aedart/config', () => { describe('loaders', () => { describe('isConfigurationLoader', () => { diff --git a/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js b/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js index 6fe09e8f..1e716a39 100644 --- a/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js +++ b/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js @@ -3,7 +3,7 @@ import { BaseLoader, isConfigurationLoaderConstructor } from "@aedart/config"; /** * @deprecated TODO: Remove this... */ -describe('@aedart/config', () => { +xdescribe('@aedart/config', () => { describe('loaders', () => { describe('isConfigurationLoaderConstructor', () => { From a1fb6289b2b68528d6356f1740ac005bd5783b3e Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 18:31:13 +0200 Subject: [PATCH 62/72] Add more test configuration files --- tests/browser/packages/config/fixtures/my-env-config.js | 7 +++++++ .../packages/config/fixtures/my-other-env-config.js | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 tests/browser/packages/config/fixtures/my-env-config.js create mode 100644 tests/browser/packages/config/fixtures/my-other-env-config.js diff --git a/tests/browser/packages/config/fixtures/my-env-config.js b/tests/browser/packages/config/fixtures/my-env-config.js new file mode 100644 index 00000000..2a244cba --- /dev/null +++ b/tests/browser/packages/config/fixtures/my-env-config.js @@ -0,0 +1,7 @@ +import { env } from "@aedart/support/env"; + +export default { + app: { + environment: env('APP_ENV') + } +} \ No newline at end of file diff --git a/tests/browser/packages/config/fixtures/my-other-env-config.js b/tests/browser/packages/config/fixtures/my-other-env-config.js new file mode 100644 index 00000000..2a244cba --- /dev/null +++ b/tests/browser/packages/config/fixtures/my-other-env-config.js @@ -0,0 +1,7 @@ +import { env } from "@aedart/support/env"; + +export default { + app: { + environment: env('APP_ENV') + } +} \ No newline at end of file From 40035ddfc451b3f51393dd97c58ce8e9d962c160 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 18:31:21 +0200 Subject: [PATCH 63/72] Add tests for the default config resolver --- .../config/resolvers/DefaultResolver.test.js | 138 ++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 tests/browser/packages/config/resolvers/DefaultResolver.test.js diff --git a/tests/browser/packages/config/resolvers/DefaultResolver.test.js b/tests/browser/packages/config/resolvers/DefaultResolver.test.js new file mode 100644 index 00000000..bae8b7c6 --- /dev/null +++ b/tests/browser/packages/config/resolvers/DefaultResolver.test.js @@ -0,0 +1,138 @@ +import { + UnsupportedSourceError, + DefaultResolver, +} from "@aedart/config"; +import { Env } from "@aedart/support/env"; + +describe('@aedart/config', () => { + describe('resolvers', () => { + + describe('DefaultResolver', () => { + + afterEach(() => { + Env.clear(); + }); + + it('can create resolver instance', () => { + const result = new DefaultResolver(); + + expect(result) + .not + .toBeUndefined(); + }); + + it('fails resolving items when source is not supported', async () => { + const resolver = new DefaultResolver(); + + let errorThrown = false; + try { + await resolver.resolve(false); + } catch (e) { + errorThrown = true; + expect(e) + .toBeInstanceOf(UnsupportedSourceError); + } + + expect(errorThrown) + .withContext('Unsupported Source Error should had been thrown') + .toBeTrue(); + }); + + it('can resolve configuration items', async () => { + + const data = [ + { + name: 'Items (Plain object)', + source: { + foo: 'bar' + }, + expected: { foo: 'bar' } + }, + { + name: 'Resolve Callback', + source: async () => { + return new Promise((resolve) => { + resolve({ + a: 1, + b: 2, + c: 3 + }) + }) + }, + expected: { a: 1, b: 2, c: 3 } + }, + { + name: 'Promise (dynamic import)', + source: (await import('../fixtures/my-config'))?.default, + expected: { app: { name: 'Foo' } } + }, + ]; + + // ------------------------------------------------------------------------------------ // + const resolver = new DefaultResolver(); + for (const entry of data) { + + const result = await resolver.resolve(entry.source); + expect(result) + .withContext(`Unable to resolve configuration items for ${entry.name}`) + .toEqual(entry.expected); + } + }); + + it('does not automatically inject environment variables into resolved items', async () => { + // Here, environment variables are NOT defined. Thus, when configuration items are resolved, + // any calls to env() will result in their default values to be returned! + + const resolver = new DefaultResolver(); + + // ------------------------------------------------------------------------------------ // + + const result = await resolver.resolve((await import('../fixtures/my-env-config'))?.default); + + expect(Reflect.has(result, 'app')) + .withContext('"app" item not resolved') + .toBeTrue() + + expect(Reflect.has(result.app, 'environment')) + .withContext('"app.environment" item not resolved') + .toBeTrue(); + + expect(result.app.environment) + .withContext('"app.environment" value should not be set (environment variables have not been defined!)') + .toBeUndefined() + }); + + it('environment variables are resolved, when Env defined', async () => { + // When defining environment variables, the configuration items SHOULD have any calls to env() + // resolved correctly. + + /** @typedef {Record} __ENV__ */ + Env.defineSafe(__ENV__); + + // ------------------------------------------------------------------------------------ // + + const resolver = new DefaultResolver(); + + // ------------------------------------------------------------------------------------ // + + // Warning: re-loading the same chunk (as previous test) can yield strange results. The resolved promise might be + // returned from Webpack, which could already have the env() calls resolved. + // const result = await resolver.resolve((await import('../fixtures/my-env-config'))?.default); + + const result = await resolver.resolve((await import('../fixtures/my-other-env-config'))?.default); + + expect(Reflect.has(result, 'app')) + .withContext('"app" item not resolved') + .toBeTrue() + + expect(Reflect.has(result.app, 'environment')) + .withContext('"app.environment" item not resolved') + .toBeTrue(); + + expect(result.app.environment) + .withContext('"app.environment" value should be set (environment variables are defined)') + .toBe('testing') + }); + }); + }); +}); \ No newline at end of file From 8cf8ce25f244d111653a258477e234ff8da8a342 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 18:36:17 +0200 Subject: [PATCH 64/72] Remove deprecated configuration loader(s) --- packages/config/src/exceptions/LoaderError.ts | 25 --- packages/config/src/exceptions/index.ts | 2 - packages/config/src/index.ts | 1 - packages/config/src/loaders/BaseLoader.ts | 36 ---- .../src/loaders/ConfigurationLoaderFactory.ts | 77 -------- packages/config/src/loaders/ItemsLoader.ts | 45 ----- .../config/src/loaders/LoaderBlueprint.ts | 21 --- packages/config/src/loaders/PathLoader.ts | 62 ------- packages/config/src/loaders/index.ts | 14 -- .../src/loaders/isConfigurationLoader.ts | 29 --- .../isConfigurationLoaderConstructor.ts | 25 --- .../src/providers/ConfigServiceProvider.ts | 10 +- .../src/config/exceptions/LoaderException.ts | 11 -- .../contracts/src/config/exceptions/index.ts | 2 - packages/contracts/src/config/index.ts | 10 -- .../contracts/src/config/loaders/Factory.ts | 21 --- .../contracts/src/config/loaders/Loader.ts | 18 -- .../src/config/loaders/LoaderConstructor.ts | 18 -- .../contracts/src/config/loaders/index.ts | 8 - packages/contracts/src/config/types.ts | 11 -- packages/contracts/src/types.ts | 10 +- .../config/helpers/makeLoaderFactory.js | 18 -- .../ConfigurationLoaderFactory.test.js | 167 ------------------ .../loaders/isConfigurationLoader.test.js | 49 ----- .../isConfigurationLoaderConstructor.test.js | 49 ----- 25 files changed, 3 insertions(+), 736 deletions(-) delete mode 100644 packages/config/src/exceptions/LoaderError.ts delete mode 100644 packages/config/src/loaders/BaseLoader.ts delete mode 100644 packages/config/src/loaders/ConfigurationLoaderFactory.ts delete mode 100644 packages/config/src/loaders/ItemsLoader.ts delete mode 100644 packages/config/src/loaders/LoaderBlueprint.ts delete mode 100644 packages/config/src/loaders/PathLoader.ts delete mode 100644 packages/config/src/loaders/index.ts delete mode 100644 packages/config/src/loaders/isConfigurationLoader.ts delete mode 100644 packages/config/src/loaders/isConfigurationLoaderConstructor.ts delete mode 100644 packages/contracts/src/config/exceptions/LoaderException.ts delete mode 100644 packages/contracts/src/config/loaders/Factory.ts delete mode 100644 packages/contracts/src/config/loaders/Loader.ts delete mode 100644 packages/contracts/src/config/loaders/LoaderConstructor.ts delete mode 100644 packages/contracts/src/config/loaders/index.ts delete mode 100644 tests/browser/packages/config/helpers/makeLoaderFactory.js delete mode 100644 tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js delete mode 100644 tests/browser/packages/config/loaders/isConfigurationLoader.test.js delete mode 100644 tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js diff --git a/packages/config/src/exceptions/LoaderError.ts b/packages/config/src/exceptions/LoaderError.ts deleted file mode 100644 index 827455c9..00000000 --- a/packages/config/src/exceptions/LoaderError.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { LoaderException } from "@aedart/contracts/config"; -import { configureCustomError } from "@aedart/support/exceptions"; - -/** - * @deprecated TODO: Rename this, e.g. Configuration Resolve Error - * - * Configuration Loader Error - * - * @see {LoaderException} - */ -export default class LoaderError extends Error implements LoaderException -{ - /** - * Create new Configuration Loader Error instance - * - * @param {string} [message] - * @param {ErrorOptions} [options] - */ - constructor(message?: string, options?: ErrorOptions) - { - super(message, options); - - configureCustomError(this); - } -} \ No newline at end of file diff --git a/packages/config/src/exceptions/index.ts b/packages/config/src/exceptions/index.ts index 612505c5..942b41e7 100644 --- a/packages/config/src/exceptions/index.ts +++ b/packages/config/src/exceptions/index.ts @@ -1,8 +1,6 @@ -import LoaderError from "./LoaderError"; import ResolveError from './ResolveError'; import UnsupportedSourceError from "./UnsupportedSourceError"; export { - LoaderError, ResolveError, UnsupportedSourceError } \ No newline at end of file diff --git a/packages/config/src/index.ts b/packages/config/src/index.ts index 361be7a4..1eaeb0d2 100644 --- a/packages/config/src/index.ts +++ b/packages/config/src/index.ts @@ -3,7 +3,6 @@ export { Repository } -export * from './loaders/index'; export * from './resolvers/index'; export * from './providers/index'; export * from './exceptions/index'; \ No newline at end of file diff --git a/packages/config/src/loaders/BaseLoader.ts b/packages/config/src/loaders/BaseLoader.ts deleted file mode 100644 index 61f65e83..00000000 --- a/packages/config/src/loaders/BaseLoader.ts +++ /dev/null @@ -1,36 +0,0 @@ -import type { AbstractConstructor } from "@aedart/contracts"; -import type { Items, Loader } from "@aedart/contracts/config"; -import { AbstractClassError } from "@aedart/support/exceptions"; - -/** - * @deprecated TODO: Remove this... - * - * Base Configuration Loader - * - * @see {Loader} - */ -export default abstract class BaseLoader implements Loader -{ - /** - * Create new loader instance - * - * @param {...any} [args] - * - * @protected - */ - protected constructor(...args: any[] /* eslint-disable-line @typescript-eslint/no-unused-vars */) - { - if (new.target === BaseLoader) { - throw new AbstractClassError(BaseLoader as AbstractConstructor); - } - } - - /** - * Load configuration {@link Items} - * - * @return {Promise} - * - * @throws {import('@aedart/contracts/config').LoaderException} - */ - abstract load(): Promise; -} \ No newline at end of file diff --git a/packages/config/src/loaders/ConfigurationLoaderFactory.ts b/packages/config/src/loaders/ConfigurationLoaderFactory.ts deleted file mode 100644 index d07eaa4b..00000000 --- a/packages/config/src/loaders/ConfigurationLoaderFactory.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { Application } from "@aedart/contracts/core"; -import type { - Factory, - Loader, - LoaderConstructor, - Source -} from '@aedart/contracts/config'; -import UnsupportedSourceError from '../exceptions/UnsupportedSourceError'; -import ItemsLoader from './ItemsLoader'; -import PathLoader from './PathLoader'; - -/** - * @deprecated TODO: Remove this... - * - * Configuration Loader Factory - * - * @see {import('@aedart/contracts/config').Factory} - */ -export default class ConfigurationLoaderFactory implements Factory -{ - /** - * Core Application instance - * - * @type {Application} - * - * @protected - */ - protected app: Application; - - /** - * Create a new Configuration Loader Factory instance - * - * @param {Application} app - */ - public constructor(app: Application) { - this.app = app; - } - - /** - * Returns a new configuration loader for given source - * - * @param {Source} source - * - * @return {Loader} - * - * @throws {import('@aedart/contracts/config').UnsupportedSourceException} - */ - public make(source: Source): Loader - { - if (typeof source === 'string') { - return this.makeLoader(PathLoader, [ source ]); - } - - if (typeof source === 'object') { - return this.makeLoader(ItemsLoader, [ source ]); - } - - // TODO: ...handle path, loader instance / constructor, callback... etc. - - throw new UnsupportedSourceError('Unable to make Configuration Loader for provided source', { cause: { source: source } }); - } - - /** - * Returns a new configuration loader instance - * - * @param {LoaderConstructor} loader - * @param {any[]} [args] - * - * @return {Loader} - * - * @protected - */ - protected makeLoader(loader: LoaderConstructor, args: any[] = []): Loader - { - return this.app.make(loader, args); - } -} \ No newline at end of file diff --git a/packages/config/src/loaders/ItemsLoader.ts b/packages/config/src/loaders/ItemsLoader.ts deleted file mode 100644 index 0491f1cb..00000000 --- a/packages/config/src/loaders/ItemsLoader.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { Items } from "@aedart/contracts/config"; -import BaseLoader from "./BaseLoader"; - -/** - * @deprecated TODO: Remove this... - * - * Items Loader - * - * @see {BaseLoader} - */ -export default class ItemsLoader extends BaseLoader -{ - /** - * Configuration Items - * - * @type {Items} - * - * @protected - */ - protected items: Items; - - /** - * Create new Configuration Loader instance - * - * @param {Items} items - */ - public constructor(items: Items) - { - super(items); - - this.items = items; - } - - /** - * Load configuration {@link Items} - * - * @return {Promise} - * - * @throws {import('@aedart/contracts/config').LoaderException} - */ - public async load(): Promise - { - return Promise.resolve(this.items); - } -} \ No newline at end of file diff --git a/packages/config/src/loaders/LoaderBlueprint.ts b/packages/config/src/loaders/LoaderBlueprint.ts deleted file mode 100644 index 00a806c3..00000000 --- a/packages/config/src/loaders/LoaderBlueprint.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { ClassBlueprint } from "@aedart/contracts/support/reflections"; - -/** - * @deprecated TODO: Remove this... - * - * Configuration Loader Blueprint - * - * Defines the minimum members that a target class should contain, before it is - * considered to "look like" a [Loader]{@link import('@aedart/contracts/config').Loader} - * - * @type {ClassBlueprint} - */ -export const LoaderBlueprint: ClassBlueprint = { - staticMembers: [ - 'constructor' - ], - - members: [ - 'load', - ] -}; \ No newline at end of file diff --git a/packages/config/src/loaders/PathLoader.ts b/packages/config/src/loaders/PathLoader.ts deleted file mode 100644 index b5b0836b..00000000 --- a/packages/config/src/loaders/PathLoader.ts +++ /dev/null @@ -1,62 +0,0 @@ -import type { Items, Path } from "@aedart/contracts/config"; -import { getErrorMessage } from "@aedart/support/exceptions"; -import BaseLoader from './BaseLoader'; -import LoaderError from '../exceptions/LoaderError'; - -/** - * @deprecated TODO: Remove this... - * - * Path (module) Loader - * - * @see {BaseLoader} - */ -export default class PathLoader extends BaseLoader -{ - /** - * Path (module-name) to configuration items module - * - * @type {Path} - * - * @protected - */ - protected path: Path; - - /** - * Create new Configuration Loader instance - * - * @param {Path} path - */ - public constructor(path: Path) - { - super(path); - - this.path = path; - } - - /** - * Load configuration {@link Items} - * - * @return {Promise} - * - * @throws {import('@aedart/contracts/config').LoaderException} - */ - public async load(): Promise - { - try { - // Warning: depending on what bundler is used, fully dynamic imports might not be supported. - // This means that `(await import(this.path)).default` cannot work. When using Vite, Webpack, - // Rollup,...etc., part of the import path must be pre-specified, such that the bundler can - // perform some static analysis of what file(s) to load. - // - // @see https://webpack.js.org/api/module-methods/#dynamic-expressions-in-import - // @see https://vite.dev/guide/features#dynamic-import - // @see https://rollupjs.org/es-module-syntax/#dynamic-import (see dynamic import vars plugin) - // @see https://github.com/rollup/plugins/tree/master/packages/dynamic-import-vars - - return (await import(`./config/${this.path}.js`)).default; - } catch (e) { - const reason: string = getErrorMessage(e); - throw new LoaderError(`Unable to load configuration items: ${reason}`, { cause: { path: this.path, previous: e } }); - } - } -} \ No newline at end of file diff --git a/packages/config/src/loaders/index.ts b/packages/config/src/loaders/index.ts deleted file mode 100644 index bffae69b..00000000 --- a/packages/config/src/loaders/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import ConfigurationLoaderFactory from "./ConfigurationLoaderFactory"; -import BaseLoader from "./BaseLoader"; -import ItemsLoader from "./ItemsLoader"; -import PathLoader from "./PathLoader"; -export { - ConfigurationLoaderFactory, - BaseLoader, - ItemsLoader, - PathLoader -} - -export * from './LoaderBlueprint'; -export * from './isConfigurationLoader'; -export * from './isConfigurationLoaderConstructor'; \ No newline at end of file diff --git a/packages/config/src/loaders/isConfigurationLoader.ts b/packages/config/src/loaders/isConfigurationLoader.ts deleted file mode 100644 index d0cc31ab..00000000 --- a/packages/config/src/loaders/isConfigurationLoader.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { isset } from "@aedart/support/misc"; -import { isConfigurationLoaderConstructor } from "./isConfigurationLoaderConstructor"; -import BaseLoader from "./BaseLoader"; - -/** - * @deprecated TODO: Remove this... - * - * Determine if given object is a [Configuration Loader]{@link import('@aedart/contracts/config').Loader} - * - * @param {object} instance - * - * @returns {boolean} - */ -export function isConfigurationLoader(instance: object): boolean -{ - if (!isset(instance) || typeof instance !== 'object') { - return false; - } - - if (instance instanceof BaseLoader) { - return true; - } - - if (!Reflect.has(instance, 'constructor')) { - return false; - } - - return isConfigurationLoaderConstructor(instance.constructor); -} \ No newline at end of file diff --git a/packages/config/src/loaders/isConfigurationLoaderConstructor.ts b/packages/config/src/loaders/isConfigurationLoaderConstructor.ts deleted file mode 100644 index a57438ad..00000000 --- a/packages/config/src/loaders/isConfigurationLoaderConstructor.ts +++ /dev/null @@ -1,25 +0,0 @@ -import type { ConstructorLike } from "@aedart/contracts"; -import { isset } from "@aedart/support/misc"; -import { isSubclassOrLooksLike } from "@aedart/support/reflections"; -import BaseLoader from "./BaseLoader"; -import { LoaderBlueprint } from "./LoaderBlueprint"; - -/** - * @deprecated TODO: Remove this... - * - * Determine if target is a [Configuration Loader Constructor]{@link import('@aedart/contracts/config').LoaderConstructor} - * - * @param {any} target - * - * @return {boolean} - */ -export function isConfigurationLoaderConstructor( - target: any /* eslint-disable-line @typescript-eslint/no-explicit-any */ -): boolean -{ - if (!isset(target) || typeof target !== 'function') { - return false; - } - - return isSubclassOrLooksLike(target, BaseLoader as ConstructorLike, LoaderBlueprint); -} \ No newline at end of file diff --git a/packages/config/src/providers/ConfigServiceProvider.ts b/packages/config/src/providers/ConfigServiceProvider.ts index 654e7ae5..9dbad040 100644 --- a/packages/config/src/providers/ConfigServiceProvider.ts +++ b/packages/config/src/providers/ConfigServiceProvider.ts @@ -1,9 +1,7 @@ -import type { Application } from "@aedart/contracts/core"; -import { CONFIG, CONFIG_LOADER_FACTORY, CONFIG_RESOLVER } from "@aedart/contracts/config"; +import { CONFIG, CONFIG_RESOLVER } from "@aedart/contracts/config"; import { ServiceProvider } from "@aedart/support/services"; import Repository from '../Repository'; import Resolver from '../resolvers/DefaultResolver'; -import ConfigurationLoaderFactory from "../loaders/ConfigurationLoaderFactory"; /** * Configuration Service Provider @@ -18,11 +16,7 @@ export default class ConfigServiceProvider extends ServiceProvider this.app .singleton(CONFIG, Repository) .alias(CONFIG, 'config') - - .singleton(CONFIG_LOADER_FACTORY, (app) => { - return new ConfigurationLoaderFactory(app as Application); - }) - + .singleton(CONFIG_RESOLVER, Resolver); } } \ No newline at end of file diff --git a/packages/contracts/src/config/exceptions/LoaderException.ts b/packages/contracts/src/config/exceptions/LoaderException.ts deleted file mode 100644 index 87b291e6..00000000 --- a/packages/contracts/src/config/exceptions/LoaderException.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Throwable } from "@aedart/contracts/support/exceptions"; - -/** - * @deprecated TODO: Remove this... - * - * Configuration Loader Exception - * - * General exception to be thrown whenever a configuration load is unable to load items. - */ -export default interface LoaderException extends Throwable -{} \ No newline at end of file diff --git a/packages/contracts/src/config/exceptions/index.ts b/packages/contracts/src/config/exceptions/index.ts index 0d6c0689..82c55828 100644 --- a/packages/contracts/src/config/exceptions/index.ts +++ b/packages/contracts/src/config/exceptions/index.ts @@ -1,8 +1,6 @@ -import LoaderException from "./LoaderException"; import ResolveException from "./ResolveException"; import UnsupportedSourceException from "./UnsupportedSourceException"; export { - type LoaderException, type ResolveException, type UnsupportedSourceException } \ No newline at end of file diff --git a/packages/contracts/src/config/index.ts b/packages/contracts/src/config/index.ts index 3ce087b1..eab6931e 100644 --- a/packages/contracts/src/config/index.ts +++ b/packages/contracts/src/config/index.ts @@ -5,15 +5,6 @@ */ export const CONFIG: unique symbol = Symbol('@aedart/contracts/config'); -/** - * @deprecated TODO: Remove this .... - * - * Configuration Loader Factory identifier - * - * @type {Symbol} - */ -export const CONFIG_LOADER_FACTORY: unique symbol = Symbol('@aedart/contracts/config/loaders/factory'); - /** * Configuration Resolver identifier * @@ -28,6 +19,5 @@ export { type Resolver } -export * from './loaders/index'; export * from './exceptions/index'; export type * from './types'; \ No newline at end of file diff --git a/packages/contracts/src/config/loaders/Factory.ts b/packages/contracts/src/config/loaders/Factory.ts deleted file mode 100644 index ca58bdb7..00000000 --- a/packages/contracts/src/config/loaders/Factory.ts +++ /dev/null @@ -1,21 +0,0 @@ -import { Source } from '../types'; -import Loader from './Loader'; - -/** - * @deprecated TODO: Remove this... - * - * Configuration Loader Factory - */ -export default interface Factory -{ - /** - * Returns a new configuration loader for given source - * - * @param {Source} source - * - * @return {Loader} - * - * @throws {import('@aedart/contracts/config').UnsupportedSourceException} - */ - make(source: Source): Loader; -} \ No newline at end of file diff --git a/packages/contracts/src/config/loaders/Loader.ts b/packages/contracts/src/config/loaders/Loader.ts deleted file mode 100644 index 77c61577..00000000 --- a/packages/contracts/src/config/loaders/Loader.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Items } from '../types'; - -/** - * @deprecated TODO: Remove this... - * - * Configuration Loader - */ -export default interface Loader -{ - /** - * Load configuration {@link Items} - * - * @return {Promise} - * - * @throws {import('@aedart/contracts/config').LoaderException} - */ - load(): Promise; -} \ No newline at end of file diff --git a/packages/contracts/src/config/loaders/LoaderConstructor.ts b/packages/contracts/src/config/loaders/LoaderConstructor.ts deleted file mode 100644 index ec703dbc..00000000 --- a/packages/contracts/src/config/loaders/LoaderConstructor.ts +++ /dev/null @@ -1,18 +0,0 @@ -import Loader from './Loader'; - -/** - * @deprecated TODO: Remove this... - * - * Configuration Loader Constructor - */ -export default interface LoaderConstructor -{ - /** - * Create a new configuration loader instance - * - * @param {...any} [args] - * - * @return {Loader} - */ - new (...args: any[]): Loader; -} \ No newline at end of file diff --git a/packages/contracts/src/config/loaders/index.ts b/packages/contracts/src/config/loaders/index.ts deleted file mode 100644 index 13c88e9f..00000000 --- a/packages/contracts/src/config/loaders/index.ts +++ /dev/null @@ -1,8 +0,0 @@ -import Factory from './Factory'; -import Loader from './Loader'; -import LoaderConstructor from "./LoaderConstructor"; -export { - type Factory, - type Loader, - type LoaderConstructor -} \ No newline at end of file diff --git a/packages/contracts/src/config/types.ts b/packages/contracts/src/config/types.ts index 89c01fdb..cb394048 100644 --- a/packages/contracts/src/config/types.ts +++ b/packages/contracts/src/config/types.ts @@ -1,19 +1,8 @@ -import { ModuleName } from "@aedart/contracts"; -import Loader from "./loaders/Loader"; -import LoaderConstructor from "./loaders/LoaderConstructor"; - /** * A key-value store containing configuration items for an application, its service, and or component. */ export type Items = Record; /* eslint-disable-line @typescript-eslint/no-explicit-any */ -/** - * @deprecated TODO: Remove this - * - * Path ([module-name]{@link ModuleName}) from where to load configuration {@link Items}. - */ -export type Path = ModuleName; - /** * Callback that is responsible for resolving configuration {@link Items}. */ diff --git a/packages/contracts/src/types.ts b/packages/contracts/src/types.ts index ab85bfd6..12e5128a 100644 --- a/packages/contracts/src/types.ts +++ b/packages/contracts/src/types.ts @@ -52,12 +52,4 @@ export type ClassMethodName = { * Array that contains either a class constructor or class instance, and the method name * that must be processed at some point. E.g. the method to be invoked. */ -export type ClassMethodReference = [ Constructor | T, ClassMethodName ]; - -/** - * @deprecated TODO: Remove this ... - * - * A [module-name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/import#modulename) to - * be imported. This is often a relative or absolute URL to *.js file that contains the module itself. - */ -export type ModuleName = string; \ No newline at end of file +export type ClassMethodReference = [ Constructor | T, ClassMethodName ]; \ No newline at end of file diff --git a/tests/browser/packages/config/helpers/makeLoaderFactory.js b/tests/browser/packages/config/helpers/makeLoaderFactory.js deleted file mode 100644 index 28687fca..00000000 --- a/tests/browser/packages/config/helpers/makeLoaderFactory.js +++ /dev/null @@ -1,18 +0,0 @@ -import { Application } from "@aedart/core"; -import { ConfigurationLoaderFactory } from "@aedart/config"; - -/** - * @deprecated TODO: Remove this... - * - * Returns a new configuration loader factory instance - * - * @param {Application} [app] - * - * @return {import('@aedart/contracts/config').Factory} - */ -export default function makeLoaderFactory(app) -{ - app = app || new Application(); - - return new ConfigurationLoaderFactory(app); -} \ No newline at end of file diff --git a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js b/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js deleted file mode 100644 index 81a30578..00000000 --- a/tests/browser/packages/config/loaders/ConfigurationLoaderFactory.test.js +++ /dev/null @@ -1,167 +0,0 @@ -import { - UnsupportedSourceError, - ItemsLoader, - PathLoader, -} from "@aedart/config"; -import makeLoaderFactory from "../helpers/makeLoaderFactory"; - -/** - * @deprecated TODO: Remove this... - */ -xdescribe('@aedart/config', () => { - describe('loaders', () => { - - describe('ConfigurationLoaderFactory', () => { - - it('can create factory instance', () => { - const result = makeLoaderFactory(); - - // If this does not fail, then test is a success - expect(result) - .not - .toBeUndefined(); - }); - - it('fails when attempting to make loader for unsupported source', () => { - - const factory = makeLoaderFactory(); - - const result = () => { - factory.make(false); - } - - expect(result) - .toThrowError(UnsupportedSourceError); - }); - - xit('can make loaders and load items', async () => { - - // ------------------------------------------------------------------------------------ // - - console.info('FILE URL', import.meta.url); - console.info('FILE URL # 2', (new URL('../fixtures/my-config.js', import.meta.url)).toString()); - console.info('FILE URL # 3', (new URL('../fixtures/my-config.js', import.meta.url)).href); - console.info('FILE URL # 4', (new URL('../fixtures/my-config.js', import.meta.url)).pathname); - console.info('WEBPACK __TESTS_PATH__', __TESTS_PATH__); - - // const RELATIVE_PATH = '../fixtures/my-config.js'; - // const FULL_PATH = __TESTS_PATH__ + '/browser/packages/config/fixtures/my-config.js'; - - - - // TODO: WORKS - const raw = (await import('../fixtures/my-config.js')).default; - console.log('Raw import', raw); - - // TODO: WORKS - const otherRaw = (await import( - __TESTS_PATH__ + '/browser/packages/config/fixtures/my-config.js' - )).default; - console.log('Other Raw import', otherRaw); - - // TODO: WORKS - const fnA = async () => { - try { - return (await import('../fixtures/my-config.js')).default; - } catch (e) { - console.error('fff', e.message); - } - } - const viaFnA = await fnA(); - console.log('Fn (A)', viaFnA); - - // TODO: WORKS - const fnB = async (p) => { - try { - // Acc. to webpack docs: "[...] The import() must contain at least some - // information about where the module is located [...]" - // @see https://webpack.js.org/api/module-methods/#dynamic-expressions-in-import - return (await import( - `../${p}` - )).default; - } catch(e) { - console.error(e.message); - throw e; - } - } - const viaFnB = await fnB('fixtures/my-config.js'); - console.log('Fn (B)', viaFnB); - - // TODO: - // console.log('baseURI', document.baseURI); - // console.log('URL (current dir)', (new URL('./', import.meta.url)).toString()); - class MyLoader { - async load(path) { - try { - // return (await import(`./${path}.js`)).default; - return (await import(`../${path}`)).default; - } catch (e) { - throw new Error(`Unable to load: ${e.message}`); - } - } - } - - const tmp = await (new MyLoader()).load( - // (new URL('../fixtures/my-config.js', import.meta.url)).href - // (new URL(__TESTS_PATH__ + '/browser/packages/config/fixtures/my-config.js', import.meta.url)).href - 'fixtures/my-config.js' - ); - // const tmp = await (new MyLoader()).load( - // '../fixtures/my-config' - // ); - console.log('LOADED via MyLoader', tmp); - - const data = [ - { - name: 'ItemsLoader', - source: { - foo: 'bar' - }, - loader: ItemsLoader, - expected: { foo: 'bar' } - }, - { - name: 'PathLoader', - //source: '../fixtures/my-config.js', // Relative does not seem to work here... - // source: path.resolve('../fixtures/my-config.js'), - // source: import.meta.url + '/../fixtures/my-config.js', - // source: '/home/alin/code/ion/tests/browser/packages/config/fixtures/my-config.js', - //source: '/home/alin/code/ion/tests/browser/packages/config/fixtures/my-config.js', - // source: (new URL('../fixtures/my-config.js', import.meta.url)).toString(), - - // source: (new URL('../fixtures/my-config.js', import.meta.url)).href, - - //source: 'file://' + (new URL('../fixtures/my-config.js', import.meta.url)).href, - - // source: (new URL('../fixtures/my-config.js', import.meta.url)).href, - // source: __TESTS_PATH__ + '/browser/packages/config/fixtures/my-config.js', - source: 'my-config', - loader: PathLoader, - expected: { - app: { - name: 'Foo' - } - } - } - ]; - - // ------------------------------------------------------------------------------------ // - const factory = makeLoaderFactory(); - - for (const entry of data) { - - const loader = factory.make(entry.source); - expect(loader) - .withContext(`Incorrect loader resolved from factory, for ${entry.name}`) - .toBeInstanceOf(entry.loader); - - const result = await loader.load(); - expect(result) - .withContext(`Loaded configuration items appear to be invalid, for ${entry.name}`) - .toEqual(entry.expected); - } - }); - - }); - }); -}); \ No newline at end of file diff --git a/tests/browser/packages/config/loaders/isConfigurationLoader.test.js b/tests/browser/packages/config/loaders/isConfigurationLoader.test.js deleted file mode 100644 index 14c8f913..00000000 --- a/tests/browser/packages/config/loaders/isConfigurationLoader.test.js +++ /dev/null @@ -1,49 +0,0 @@ -import { BaseLoader, isConfigurationLoader } from "@aedart/config"; - -/** - * @deprecated TODO: Remove this... - */ -xdescribe('@aedart/config', () => { - describe('loaders', () => { - - describe('isConfigurationLoader', () => { - - it('can determine if target is a configuration loader instance', () => { - - class A {} - - class B { - load(){} - } - - class C extends B {} - - class D extends BaseLoader {} - - class E extends D {} - - // ------------------------------------------------------------------------------------ // - - const data = [ - { value: null, expected: false, name: 'Null' }, - { value: [], expected: false, name: 'Array' }, - { value: {}, expected: false, name: 'Object (empty)' }, - { value: new A(), expected: false, name: 'Class A (empty)' }, - - { value: new B(), expected: true, name: 'Class B (custom implementation of loader)' }, - { value: new C(), expected: true, name: 'Class C (inherits from custom implementation)' }, - { value: new D(), expected: true, name: 'Class D (inherits from BaseLoader abstraction)' }, - { value: new E(), expected: true, name: 'Class E (inherits from a base that inherits from BaseLoader abstraction)' }, - ]; - - for (const entry of data) { - expect(isConfigurationLoader(entry.value)) - .withContext(`${entry.name} was expected to ${entry.expected.toString()}`) - .toBe(entry.expected); - } - }); - - }); - - }); -}); \ No newline at end of file diff --git a/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js b/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js deleted file mode 100644 index 1e716a39..00000000 --- a/tests/browser/packages/config/loaders/isConfigurationLoaderConstructor.test.js +++ /dev/null @@ -1,49 +0,0 @@ -import { BaseLoader, isConfigurationLoaderConstructor } from "@aedart/config"; - -/** - * @deprecated TODO: Remove this... - */ -xdescribe('@aedart/config', () => { - describe('loaders', () => { - - describe('isConfigurationLoaderConstructor', () => { - - it('can determine if target is a configuration loader constructor', () => { - - class A {} - - class B { - load() {} - } - - class C extends B {} - - class D extends BaseLoader {} - - class E extends D {} - - // ------------------------------------------------------------------------------------ // - - const data = [ - { value: null, expected: false, name: 'Null' }, - { value: [], expected: false, name: 'Array' }, - { value: {}, expected: false, name: 'Object (empty)' }, - { value: A, expected: false, name: 'Class A (empty)' }, - - { value: B, expected: true, name: 'Class B (custom implementation of loader)' }, - { value: C, expected: true, name: 'Class C (inherits from custom implementation)' }, - { value: D, expected: true, name: 'Class D (inherits from BaseLoader abstraction)' }, - { value: E, expected: true, name: 'Class E (inherits from a base that inherits from BaseLoader abstraction)' }, - ]; - - for (const entry of data) { - expect(isConfigurationLoaderConstructor(entry.value)) - .withContext(`${entry.name} was expected to ${entry.expected.toString()}`) - .toBe(entry.expected); - } - }); - - }); - - }); -}); \ No newline at end of file From 431f7bd8a163c2f317c3c4720bf44e41d37271d8 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 18:36:42 +0200 Subject: [PATCH 65/72] Change release notes --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b824d142..b8b12875 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,7 +22,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 * `isPromise()` utility in `@aedart/support/reflections`. * `BindingTuple`, `IdentifierInstanceTuple` and `IdentifierAliasTuple` type aliases in `@aedart/contracts/container`. * `isBindingTuple` util in `@aedart/container`. -* `ModuleName` type alias in `@aedart/contracts`. * `test:fast` script in `packages.json`, to allow testing without (re)transpiling all packages. * `@types/jasmine` as development dependency (_in root package only_). * `@babel/plugin-syntax-dynamic-import` as development dependency (_in root package, for testing_). From 9936b10d4226ad359fac1976e9258f50c2c8bd5d Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 18:38:58 +0200 Subject: [PATCH 66/72] Fix environment variables are not cleared from previous tests in Chrome Hmm... sometimes it appears that env isn't cleared from a previous test (not sure of the tests' execution order). --- .../browser/packages/config/resolvers/DefaultResolver.test.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tests/browser/packages/config/resolvers/DefaultResolver.test.js b/tests/browser/packages/config/resolvers/DefaultResolver.test.js index bae8b7c6..79bf68c6 100644 --- a/tests/browser/packages/config/resolvers/DefaultResolver.test.js +++ b/tests/browser/packages/config/resolvers/DefaultResolver.test.js @@ -9,6 +9,10 @@ describe('@aedart/config', () => { describe('DefaultResolver', () => { + beforeEach(() => { + Env.clear(); + }); + afterEach(() => { Env.clear(); }); From 25c3a1c9a4acdb40323ee83021b323c96d12fdcd Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sat, 5 Oct 2024 18:43:45 +0200 Subject: [PATCH 67/72] Change call to import(), return actual promise instead of awaiting --- .../packages/config/resolvers/DefaultResolver.test.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/tests/browser/packages/config/resolvers/DefaultResolver.test.js b/tests/browser/packages/config/resolvers/DefaultResolver.test.js index 79bf68c6..855da62d 100644 --- a/tests/browser/packages/config/resolvers/DefaultResolver.test.js +++ b/tests/browser/packages/config/resolvers/DefaultResolver.test.js @@ -123,7 +123,11 @@ describe('@aedart/config', () => { // returned from Webpack, which could already have the env() calls resolved. // const result = await resolver.resolve((await import('../fixtures/my-env-config'))?.default); - const result = await resolver.resolve((await import('../fixtures/my-other-env-config'))?.default); + // const result = await resolver.resolve((await import('../fixtures/my-other-env-config'))?.default); + const result = await resolver.resolve( + import('../fixtures/my-other-env-config') + .then((module) => module.default) + ); expect(Reflect.has(result, 'app')) .withContext('"app" item not resolved') From 0d913cf9f0125285637031d13942c0364a3b0f77 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sun, 6 Oct 2024 10:26:10 +0200 Subject: [PATCH 68/72] Refactor test, use async callback Just needed to see that this also works as intended. --- .../config/resolvers/DefaultResolver.test.js | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/tests/browser/packages/config/resolvers/DefaultResolver.test.js b/tests/browser/packages/config/resolvers/DefaultResolver.test.js index 855da62d..37d17943 100644 --- a/tests/browser/packages/config/resolvers/DefaultResolver.test.js +++ b/tests/browser/packages/config/resolvers/DefaultResolver.test.js @@ -122,13 +122,20 @@ describe('@aedart/config', () => { // Warning: re-loading the same chunk (as previous test) can yield strange results. The resolved promise might be // returned from Webpack, which could already have the env() calls resolved. // const result = await resolver.resolve((await import('../fixtures/my-env-config'))?.default); - + + // Works... // const result = await resolver.resolve((await import('../fixtures/my-other-env-config'))?.default); - const result = await resolver.resolve( - import('../fixtures/my-other-env-config') - .then((module) => module.default) - ); + + // Also works... + // const result = await resolver.resolve( + // import('../fixtures/my-other-env-config') + // .then((module) => module.default) + // ); + const result = await resolver.resolve( + async () => (await import('../fixtures/my-other-env-config')).default + ) + expect(Reflect.has(result, 'app')) .withContext('"app" item not resolved') .toBeTrue() From f1a823455cb2fca88ea5932e36d183e7db092021 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sun, 6 Oct 2024 10:35:32 +0200 Subject: [PATCH 69/72] Add CONFIG_SOURCE identifier --- packages/contracts/src/core/index.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/contracts/src/core/index.ts b/packages/contracts/src/core/index.ts index b15a44f9..790ba094 100644 --- a/packages/contracts/src/core/index.ts +++ b/packages/contracts/src/core/index.ts @@ -21,6 +21,15 @@ export const APPLICATION: symbol = CORE; */ export const APP_ENV: unique symbol = Symbol('APP_ENV'); +/** + * Configuration Source identifier + * + * @type {Symbol} + * + * @see {import('@aedart/contracts/config').Source} + */ +export const CONFIG_SOURCE: unique symbol = Symbol('@aedart/contracts/core/config/source'); + import Application from "./Application"; import Bootstrapper from "./Bootstrapper"; import BootstrapperConstructor from "./BootstrapperConstructor"; From 571f547544e8eb310c1d97bf9bae69f1882b158d Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sun, 6 Oct 2024 11:33:37 +0200 Subject: [PATCH 70/72] Redesign with() to accept configuration source Also, added a custom service provider that applies the new configuration resolver, in its boot() method. --- .../src/core/configuration/Configurator.ts | 10 +++-- packages/core/src/DefaultConfigurator.ts | 4 +- .../src/configuration/BaseConfigurator.ts | 35 ++++++++-------- packages/core/src/index.ts | 5 ++- .../providers/CoreConfigServiceProvider.ts | 42 +++++++++++++++++++ packages/core/src/providers/index.ts | 4 ++ 6 files changed, 74 insertions(+), 26 deletions(-) create mode 100644 packages/core/src/providers/CoreConfigServiceProvider.ts create mode 100644 packages/core/src/providers/index.ts diff --git a/packages/contracts/src/core/configuration/Configurator.ts b/packages/contracts/src/core/configuration/Configurator.ts index 3f2d7266..69ea28ca 100644 --- a/packages/contracts/src/core/configuration/Configurator.ts +++ b/packages/contracts/src/core/configuration/Configurator.ts @@ -7,7 +7,7 @@ import { IdentifierAliasTuple, IdentifierInstanceTuple, } from "@aedart/contracts/container"; -import { Items } from "@aedart/contracts/config"; +import { Source } from "@aedart/contracts/config"; import BootstrapperConstructor from "../BootstrapperConstructor"; import Application from '../Application'; @@ -29,15 +29,17 @@ export default interface Configurator for(app: Application): this; /** - * Add configuration items for the application + * Set the source of the application's configuration items + * + * **Caution**: _Method overwrites eventual previous set configuration source!_ * * @see {import('@aedart/contracts/config').Repository} * - * @param {Items} items + * @param {Source} source A source that resolves into configuration [items]{@link import('@aedart/contracts/config').Items} * * @return {this} */ - with(items: Items): this; + with(source: Source): this; /** * Add "core" bindings to be registered diff --git a/packages/core/src/DefaultConfigurator.ts b/packages/core/src/DefaultConfigurator.ts index 457b3843..ea703706 100644 --- a/packages/core/src/DefaultConfigurator.ts +++ b/packages/core/src/DefaultConfigurator.ts @@ -3,7 +3,7 @@ import { CORE, } from "@aedart/contracts/core"; import { CONTAINER } from "@aedart/contracts/container"; -import { ConfigServiceProvider } from "@aedart/config"; +import CoreConfigServiceProvider from './providers/CoreConfigServiceProvider'; import LoadEnvironmentVariables from "./bootstrap/LoadEnvironmentVariables"; import SetupFacades from "./bootstrap/SetupFacades"; import BaseConfigurator from "./configuration/BaseConfigurator"; @@ -32,7 +32,7 @@ export default class DefaultConfigurator extends BaseConfigurator SetupFacades ]) .withServiceProviders([ - ConfigServiceProvider + CoreConfigServiceProvider ]); } } \ No newline at end of file diff --git a/packages/core/src/configuration/BaseConfigurator.ts b/packages/core/src/configuration/BaseConfigurator.ts index feac77ed..39b9048f 100644 --- a/packages/core/src/configuration/BaseConfigurator.ts +++ b/packages/core/src/configuration/BaseConfigurator.ts @@ -3,6 +3,7 @@ import type { BootstrapperConstructor, Configurator } from "@aedart/contracts/core"; +import { CONFIG_SOURCE } from "@aedart/contracts/core"; import type { ServiceProvider, ServiceProviderConstructor @@ -12,11 +13,9 @@ import type { IdentifierAliasTuple, IdentifierInstanceTuple } from "@aedart/contracts/container"; -import type { Repository, Items } from "@aedart/contracts/config"; -import { CONFIG } from "@aedart/contracts/config"; +import type { Source } from "@aedart/contracts/config"; import { AbstractClassError } from "@aedart/support/exceptions"; import { isset } from "@aedart/support/misc"; -import { shallowMerge } from "@aedart/support/objects"; import ConfigurationError from "../exceptions/ConfigurationError"; /** @@ -38,13 +37,13 @@ export default abstract class BaseConfigurator implements Configurator { protected app: Application | undefined; /** - * Configuration items for the application + * Configuration source * - * @type {Items} + * @type {Source} * * @protected */ - protected configurationItems: Items = {}; + protected source: Source = {} /** * List of bindings to be registered @@ -131,17 +130,19 @@ export default abstract class BaseConfigurator implements Configurator { } /** - * Add configuration items for the application + * Set the source of the application's configuration items + * + * **Caution**: _Method overwrites eventual previous set configuration source!_ * * @see {import('@aedart/contracts/config').Repository} * - * @param {Items} items + * @param {Source} source A source that resolves into configuration [items]{@link import('@aedart/contracts/config').Items} * * @return {this} */ - public with(items: Items): this + public with(source: Source): this { - this.configurationItems = shallowMerge(this.configurationItems, items); + this.source = source; return this; } @@ -251,7 +252,7 @@ export default abstract class BaseConfigurator implements Configurator { .registerBindings() .registerAliases() .registerBootstrappers() - .setConfigurationItems() + .registerConfigurationSource() .registerServiceProviders(); this.after(this.app as Application); @@ -362,18 +363,16 @@ export default abstract class BaseConfigurator implements Configurator { } /** - * Set the items in the application's [Configuration Repository]{@link import('@aedart/contracts/config').Repository} + * Register the configuration {@link Source} to be resolved * - * @return {this} + * @returns {this} * * @protected */ - protected setConfigurationItems(): this + protected registerConfigurationSource(): this { - this.app?.extend(CONFIG, (resolved: Repository) => { - return resolved.merge(this.configurationItems); - }); - + this.app?.singletonIf(CONFIG_SOURCE, () => this.source); + return this; } diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index faadbc22..d02b264f 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -5,6 +5,7 @@ export { DefaultConfigurator } -export * from './exceptions/index'; +export * from "./bootstrap/index"; export * from './configuration/index'; -export * from "./bootstrap/index"; \ No newline at end of file +export * from './exceptions/index'; +export * from './providers/index'; diff --git a/packages/core/src/providers/CoreConfigServiceProvider.ts b/packages/core/src/providers/CoreConfigServiceProvider.ts new file mode 100644 index 00000000..c2a99a62 --- /dev/null +++ b/packages/core/src/providers/CoreConfigServiceProvider.ts @@ -0,0 +1,42 @@ +import { ConfigServiceProvider } from "@aedart/config"; +import { CONFIG_SOURCE } from "@aedart/contracts/core"; +import type { Items, Source, Resolver, Repository } from "@aedart/contracts/config"; +import { CONFIG, CONFIG_RESOLVER } from "@aedart/contracts/config"; + +/** + * Core Config Service Provider + * + * @see {ConfigServiceProvider} + */ +export default class CoreConfigServiceProvider extends ConfigServiceProvider +{ + /** + * Ensures that configuration {@link Items} are resolved from + * registered (bound) {@link Source}. + * + * @returns {Promise} + * + * @async + */ + public async boot(): Promise + { + // Skip if no configuration source was bound. + if (!this.app.bound(CONFIG_SOURCE)) { + return Promise.resolve(true); + } + + const source: Source = this.app.get(CONFIG_SOURCE); + const resolver: Resolver = this.app.get(CONFIG_RESOLVER); + const repository: Repository = this.app.get(CONFIG); + + // Resolve the items and populate the application's configuration repository. + const items: Items = await resolver.resolve(source); + repository.merge(items); + + // Unbind the configuration source from the application. There should be no + // need to keep it in memory, at this point. + this.app.forget(CONFIG_SOURCE); + + return Promise.resolve(true); + } +} \ No newline at end of file diff --git a/packages/core/src/providers/index.ts b/packages/core/src/providers/index.ts new file mode 100644 index 00000000..0a9e0a51 --- /dev/null +++ b/packages/core/src/providers/index.ts @@ -0,0 +1,4 @@ +import CoreConfigServiceProvider from "./CoreConfigServiceProvider"; +export { + CoreConfigServiceProvider +} \ No newline at end of file From 9760e09bdfeb980fb773072478f4a5855d4129ac Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sun, 6 Oct 2024 11:34:59 +0200 Subject: [PATCH 71/72] Change application, add prepare() method A shorthand method for configuring the application using a default configurator, with specified configuration source. --- packages/contracts/src/core/Application.ts | 25 ++++++++++++++++++- packages/core/src/Application.ts | 29 ++++++++++++++++++++++ 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/packages/contracts/src/core/Application.ts b/packages/contracts/src/core/Application.ts index e73120c1..e798ea10 100644 --- a/packages/contracts/src/core/Application.ts +++ b/packages/contracts/src/core/Application.ts @@ -2,13 +2,13 @@ import { Callback, ClassMethodReference } from "@aedart/contracts"; +import { Source } from "@aedart/contracts/config"; import { Container } from "@aedart/contracts/container"; import { CallbackWrapper } from "@aedart/contracts/support"; import { Registrar, ServiceProvider, ServiceProviderConstructor, - BootException, } from "@aedart/contracts/support/services"; import { ConfiguratorCallback, @@ -30,6 +30,29 @@ import BootstrapperConstructor from "./BootstrapperConstructor"; */ export default interface Application extends Container { + /** + * Prepare this application using the given configuration source. + * + * **Note**: _Method is shorthand for [configuring]{@link configure} this application + * using a default {@link Configurator} with a configuration {@link Source}:_ + * + * @example + * const source = {}; // not shown here... + * + * // Prepare using configuration source + * app.prepare(source); + * + * // Above is equivalent to: + * app.configure( (configurator) => configurator.with(...) ) + * + * @param {Source} using + * + * @returns {this} + * + * @see {Configurator.with} + */ + prepare(using: Source): this; + /** * Configure this application using given configurator * diff --git a/packages/core/src/Application.ts b/packages/core/src/Application.ts index 93f9f30f..a3de33e7 100644 --- a/packages/core/src/Application.ts +++ b/packages/core/src/Application.ts @@ -31,6 +31,7 @@ import { isPromise, isCallable } from "@aedart/support/reflections"; +import type { Source } from "@aedart/contracts/config"; import { isConfigurator } from "./configuration/isConfigurator"; import { isConfiguratorConstructor } from "./configuration/isConfiguratorConstructor"; import ConfigurationError from "./exceptions/ConfigurationError"; @@ -149,6 +150,34 @@ export default class Application extends Container implements ApplicationContrac return super.setInstance(container) as ApplicationContract | null; } + /** + * Prepare this application using the given configuration source. + * + * **Note**: _Method is shorthand for [configuring]{@link configure} this application + * using a default {@link Configurator} with a configuration {@link Source}:_ + * + * @example + * const source = {}; // not shown here... + * + * // Prepare using configuration source + * app.prepare(source); + * + * // Above is equivalent to: + * app.configure( (configurator) => configurator.with(...) ) + * + * @param {Source} using + * + * @returns {this} + * + * @see {Configurator.with} + */ + public prepare(using: Source): this + { + return this.configure( + (configurator) => configurator.with(using) + ); + } + /** * Configure this application using given configurator * From 6ad896d51097ddadadd17fdab4c8f6eee808a140 Mon Sep 17 00:00:00 2001 From: Alin Eugen Deac Date: Sun, 6 Oct 2024 11:38:07 +0200 Subject: [PATCH 72/72] Change configure tests Now using the prepare() method to test if configuration is resolved as desired. --- .../core/application/configure.test.js | 40 +++++++++++++++++-- .../application/fixtures/example-config.js | 7 ++++ 2 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 tests/browser/packages/core/application/fixtures/example-config.js diff --git a/tests/browser/packages/core/application/configure.test.js b/tests/browser/packages/core/application/configure.test.js index 8bdcc281..7126c31c 100644 --- a/tests/browser/packages/core/application/configure.test.js +++ b/tests/browser/packages/core/application/configure.test.js @@ -6,10 +6,19 @@ import { BaseConfigurator, ConfigurationError } from "@aedart/core"; +import { Env } from "@aedart/support/env"; describe('@aedart/core', () => { describe('configure', () => { + beforeEach(() => { + Env.clear(); + }); + + afterEach(() => { + Env.clear(); + }); + it('fails when invalid configurator provided', () => { class A {} @@ -135,7 +144,7 @@ describe('@aedart/core', () => { app.destroy(); }); - it('configuration items are set', () => { + it('sets configuration items (after boot)', async () => { const items = { app: { @@ -147,8 +156,8 @@ describe('@aedart/core', () => { // ---------------------------------------------------------------------------- // - app - .configure( (configurator) => configurator.with(items) ) + await app + .prepare(items) .run(); // ---------------------------------------------------------------------------- // @@ -163,5 +172,30 @@ describe('@aedart/core', () => { app.destroy(); }); + + it('resolves external (async) configuration source and applies environment variables', async () => { + + const app = new Application(); + + // ---------------------------------------------------------------------------- // + + await app + .prepare( + async () => (await import('./fixtures/example-config')).default + ) + .run(); + + // ---------------------------------------------------------------------------- // + + const result = Config + .obtain() + .get('app.environment'); + + expect(result) + .withContext('External configuration was not resolved correctly') + .toBe('testing'); + + app.destroy(); + }); }); }); \ No newline at end of file diff --git a/tests/browser/packages/core/application/fixtures/example-config.js b/tests/browser/packages/core/application/fixtures/example-config.js new file mode 100644 index 00000000..2a244cba --- /dev/null +++ b/tests/browser/packages/core/application/fixtures/example-config.js @@ -0,0 +1,7 @@ +import { env } from "@aedart/support/env"; + +export default { + app: { + environment: env('APP_ENV') + } +} \ No newline at end of file