From fc0784e20710e56642add30613412a1846d29d70 Mon Sep 17 00:00:00 2001 From: angularpackage Date: Wed, 4 Sep 2024 19:19:33 +0000 Subject: [PATCH 01/22] Initial commit --- .browserslistrc | 16 ++ README.md | 24 ++ karma.conf.js | 44 ++++ ng-package.json | 7 + package.json | 11 + src/change-detector/index.ts | 1 + .../src/change-detector.class.ts | 249 ++++++++++++++++++ .../type/change-detector.spec.ts | 0 .../detection-properties.interface.ts | 5 + src/interface/detector-options.interface.ts | 5 + src/interface/index.ts | 2 + src/lib/change-detection.decorator.ts | 12 + src/lib/change-detector.class.ts | 13 + src/lib/configure-detector.func.ts | 60 +++++ src/lib/detector-options.const.ts | 6 + src/public-api.ts | 14 + src/test.ts | 27 ++ tsconfig.lib.json | 15 ++ tsconfig.lib.prod.json | 10 + tsconfig.spec.json | 17 ++ 20 files changed, 538 insertions(+) create mode 100644 .browserslistrc create mode 100644 README.md create mode 100644 karma.conf.js create mode 100644 ng-package.json create mode 100644 package.json create mode 100644 src/change-detector/index.ts create mode 100644 src/change-detector/src/change-detector.class.ts create mode 100644 src/change-detector/type/change-detector.spec.ts create mode 100644 src/interface/detection-properties.interface.ts create mode 100644 src/interface/detector-options.interface.ts create mode 100644 src/interface/index.ts create mode 100644 src/lib/change-detection.decorator.ts create mode 100644 src/lib/change-detector.class.ts create mode 100644 src/lib/configure-detector.func.ts create mode 100644 src/lib/detector-options.const.ts create mode 100644 src/public-api.ts create mode 100644 src/test.ts create mode 100644 tsconfig.lib.json create mode 100644 tsconfig.lib.prod.json create mode 100644 tsconfig.spec.json diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..4f9ac26 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,16 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR diff --git a/README.md b/README.md new file mode 100644 index 0000000..3c73a23 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# ChangeDetection + +This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0. + +## Code scaffolding + +Run `ng generate component component-name --project change-detection` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project change-detection`. +> Note: Don't forget to add `--project change-detection` or else it will be added to the default project in your `angular.json` file. + +## Build + +Run `ng build change-detection` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Publishing + +After building your library with `ng build change-detection`, go to the dist folder `cd dist/change-detection` and run `npm publish`. + +## Running unit tests + +Run `ng test change-detection` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..78b2461 --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,44 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, '../../coverage/change-detection'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/ng-package.json b/ng-package.json new file mode 100644 index 0000000..a5fa57b --- /dev/null +++ b/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/change-detection", + "lib": { + "entryFile": "src/public-api.ts" + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..113a1c4 --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "name": "change-detection", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^13.2.0", + "@angular/core": "^13.2.0" + }, + "dependencies": { + "tslib": "^2.3.0" + } +} \ No newline at end of file diff --git a/src/change-detector/index.ts b/src/change-detector/index.ts new file mode 100644 index 0000000..6ccd406 --- /dev/null +++ b/src/change-detector/index.ts @@ -0,0 +1 @@ +export { ChangeDetector } from './src/change-detector.class'; diff --git a/src/change-detector/src/change-detector.class.ts b/src/change-detector/src/change-detector.class.ts new file mode 100644 index 0000000..2f05f50 --- /dev/null +++ b/src/change-detector/src/change-detector.class.ts @@ -0,0 +1,249 @@ +// ChangeDetectorRef +import { ChangeDetectorRef } from '@angular/core'; + +// Property. +import { Property, SetterCallback } from 'dist/property'; + +// internal +// import { DetectionProperties } from '../../interface'; + +export class ChangeDetector { + /** + * + */ + public get deactivated(): Set { + return this.#deactivated; + } + + /** + * The `get` accessor returns the list of detectable property names if set. + * @returns The return value is the `Set` object containing the list of detectable properties. + * @angularpackage + */ + public get detectable(): Set { + return this.#property.wrapped as any; + } + + /** + * Indicates `detached` state of the component given in the constructor. + */ + public detached = false; + + /** + * The property indicates the detection state of the component given in the constructor. When set to `true` all the properties indicated + * as detectable perform `detectChanges()` of `detector` on set. + */ + public detection = false; + + /** + * The property contains the change detector instance of the component given in the constructor. + */ + public detector?: ChangeDetectorRef; + + /** + * Private property string-type of the found change detector in the component given in the constructor. + */ + #cdKey?: string; + + /** + * + */ + #deactivated: Set = new Set(); + + /** + * Private property of `Property` handles inject detection to specified properties. + */ + #property!: Property; + + /** + * + * @param component + * @param keys + * @param callbackFn + * @angularpackage + */ + constructor( + component: Cmp, + keys: (keyof Cmp)[], + callbackFn?: SetterCallback + ) { + // Set picked key of the change detector. + if (typeof this.#setPickedDetectorKey(component) === 'string') { + // Set the detector to use. + this.detector = component[this.#cdKey as keyof Cmp] as any; + // Detach component on initialize to use `detectChanges()`. + this.detach(); + // Set detection to specified keys on initialize with the given optional `callbackFn`. + this.#property = Property.wrap( + component, + keys, + undefined, + this.#defineDetectionCallback(callbackFn) + ); + } + } + + /** + * Activates detection in the component of the given deactivated properties, which means perform `detectChanges` on set if detection is + * enabled. + * @param keys + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public activate(...keys: (keyof Cmp)[]): this { + Array.isArray(keys) && keys.forEach((key) => this.#deactivated.delete(key)); + return this; + } + + /** + * Deactivates detection in the component of the given properties, which means detectable properties don't perform `detectChanges` on set + * if detection is enabled. + * @param keys + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public deactivate(...keys: (keyof Cmp)[]): this { + Array.isArray(keys) && keys.forEach((key) => this.#deactivated.add(key)); + return this; + } + + /** + * Detaches the component from the change detector tree and sets property `detached` to `true`. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public detach(): this { + setTimeout(() => this.detector && (this.detector.detach(), (this.detached = true)), 0); + return this; + } + + /** + * Disables detection in the component, which means detectable properties don't perform `detectChanges` on set. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public disable(): this { + this.detection = true; + return this; + } + + /** + * Enables detection in the component, which means detectable(not deactivated) properties perform `detectChanges` on set. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public enable(): this { + this.detection = true; + return this; + } + + /** + * Checks whether the component property of the given `key` is detectable. + * @param key The property name of component to check. + * @returns The return value is a `boolean` type indicating whether the component property of the given `key` is detectable. + * @angularpackage + */ + public has(key: keyof Cmp): boolean { + return this.#property?.wrapped.has(key) || false; + } + + /** + * Checks whether the component property of the given `key` is deactivated from detection. + * @param key The property name of `keyof Cmp` to check. + * @returns The return value is a `boolean` type indicating whether the property is deactivated from the detection. + * @angularpackage + */ + public isDeactivated(key: keyof Cmp): boolean { + return this.#deactivated.has(key); + } + + /** + * Detaches the component from the change detector tree and sets property `detached` to `true`. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public reattach(): this { + setTimeout(() => this.detector && (this.detector.reattach(), (this.detached = false))); + return this; + } + + /** + * Removes properties given in the `keys` from the detectable, which means they don't perform `detectChanges()` on set. + * @param keys An array of `keyof Cmp` to remove from the detectable. + * @returns The return value is an instance of `ChangeDetector` for the chaining purpose. + * @angularpackage + */ + public remove(...keys: (keyof Cmp)[]): this { + this.#property?.unwrap(...keys); + return this; + } + + /** + * Sets detection on `set` to the component properties of the given `keys` making them detectable, which means each performs + * `detectChanges()` on set. + * @param keys The component keys of an `Array` to set detection. + * @param callbackFn Optional callback function to inject with detection. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public set( + keys: Keys[], + callbackFn?: SetterCallback + ): this { + this.#property?.wrap( + keys, + undefined, + this.#defineDetectionCallback(callbackFn) + ); + return this; + } + + /** + * Defines function with detection and optional callback function to inject to property setter. + * @param callbackFn Callback function of generic type `SetterCallback` to inject along with detection. + * @returns The return value is the function to detect changes on set in the specified property with optional callback function. + * @angularpackage + */ + #defineDetectionCallback( + callbackFn?: SetterCallback + ): SetterCallback { + return (value: Cmp[Key], oldValue: Cmp[Key], key: Key, instance: Cmp) => { + typeof callbackFn === 'function' && + callbackFn(value, oldValue, key, instance); + this.detection === true && + this.deactivated.has(key) === false && + this.detector?.detectChanges(); + }; + } + + /** + * The method returns the property name of found change detector in the specified component. + * @param component Component to find change detector instance. + * @returns The return value is a string-type property name of the given `component` under which the change detector is stored. + * @angularpackage + */ + #setPickedDetectorKey(component: Cmp): string { + let prop; + if (this.#cdKey === undefined) { + if (typeof component === 'object') { + Object.keys(component).forEach( + (property: string): any => ( + (prop = component[property as keyof typeof component]), + typeof prop === 'object' && prop !== null && 'detectChanges' in prop && + 'reattach' in prop && + 'detach' in prop && + (this.#cdKey = property), + false + ) + ); + } + if (this.#cdKey === undefined) { + throw new Error(` + Problem: ChangeDetectorClass: couldn't find ChangeDetectorRef instance. + Quick fix: Add to constructor "public changeDetectorRef: ChangeDetectorRef". + `); + } + } + return this.#cdKey; + } +} diff --git a/src/change-detector/type/change-detector.spec.ts b/src/change-detector/type/change-detector.spec.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/interface/detection-properties.interface.ts b/src/interface/detection-properties.interface.ts new file mode 100644 index 0000000..068dc98 --- /dev/null +++ b/src/interface/detection-properties.interface.ts @@ -0,0 +1,5 @@ +export interface GenericObject { + [name: string]: T; +} + +export interface DetectionProperties extends GenericObject {} diff --git a/src/interface/detector-options.interface.ts b/src/interface/detector-options.interface.ts new file mode 100644 index 0000000..3b90138 --- /dev/null +++ b/src/interface/detector-options.interface.ts @@ -0,0 +1,5 @@ +export interface DetectorOptions { + changeDetector?: 'changeDetector' | string; + detection?: 'detection' | string; + properties?: 'properties' | string; +} diff --git a/src/interface/index.ts b/src/interface/index.ts new file mode 100644 index 0000000..991e6b3 --- /dev/null +++ b/src/interface/index.ts @@ -0,0 +1,2 @@ +export { DetectionProperties } from './detection-properties.interface'; +export { DetectorOptions } from './detector-options.interface'; diff --git a/src/lib/change-detection.decorator.ts b/src/lib/change-detection.decorator.ts new file mode 100644 index 0000000..ab41598 --- /dev/null +++ b/src/lib/change-detection.decorator.ts @@ -0,0 +1,12 @@ +// internal +import { configureDetector } from './configure-detector.func'; +import { DetectionProperties } from '../interface/detection-properties.interface'; +import { DetectorOptions } from '../interface/detector-options.interface'; + +export function ChangeDetection( + properties: DetectionProperties, + options?: DetectorOptions +): ClassDecorator { + return (component: Function): any => + configureDetector(component, properties, options); +} diff --git a/src/lib/change-detector.class.ts b/src/lib/change-detector.class.ts new file mode 100644 index 0000000..d8a79d7 --- /dev/null +++ b/src/lib/change-detector.class.ts @@ -0,0 +1,13 @@ +import { ChangeDetectorRef } from '@angular/core'; + +// internals +import { DetectionProperties } from '../interface/detection-properties.interface'; + +/** + * Helper class for component. + */ +export abstract class ChangeDetectionHelper { + public changeDetectorRef?: ChangeDetectorRef; + public detection = false; + public properties?: DetectionProperties; +} diff --git a/src/lib/configure-detector.func.ts b/src/lib/configure-detector.func.ts new file mode 100644 index 0000000..49ff025 --- /dev/null +++ b/src/lib/configure-detector.func.ts @@ -0,0 +1,60 @@ + +// internal +import { ChangeDetector } from '../change-detector/lib/change-detector.ignore.class'; +import { DetectionProperties } from '../interface/detection-properties.interface'; +import { DetectorOptions } from '../interface/detector-options.interface'; + +// const. +import { DETECTOR_OPTIONS } from './detector-options.const'; + +/** + * Function to use with decorator. + * @param component Source component for properties. + * @param properties Properties names to detect changes if true. + * @param options Change default names assigned to component. + */ +export const configureDetector = ( + component: Function, + properties: (keyof Cmp)[], + options: DetectorOptions = DETECTOR_OPTIONS +): void => { + + if (typeObjectGuard(component)) { + if (typeObjectGuard(options)) { + options = Object.assign(DETECTOR_OPTIONS, options); + } + + Object.defineProperties(component.prototype, { + + $$changeDetector: { writable: true }, + [options.changeDetector]: { + get(): ChangeDetector { + if (this.$$changeDetector === undefined) { + this.$$changeDetector = new ChangeDetector(this, properties).addDetection(); + } + return this.$$changeDetector; + } + }, + + // Whether component changes are going to be detected or not. + [options.detection]: { + set(value: boolean): void { + if (value === false) { + this[options.changeDetector].detach(); + } else if (value === true) { + this[options.changeDetector].reattach(); + } + } + }, + + [options.properties]: { + set(value: DetectionProperties): void { + this.$$changeDetector.properties = value; + }, + get(): DetectionProperties { + return this.changeDetector.properties; + } + }, + }); + } +}; diff --git a/src/lib/detector-options.const.ts b/src/lib/detector-options.const.ts new file mode 100644 index 0000000..d640225 --- /dev/null +++ b/src/lib/detector-options.const.ts @@ -0,0 +1,6 @@ +import { DetectorOptions } from '../interface/detector-options.interface'; +export const DETECTOR_OPTIONS: DetectorOptions = { + changeDetector: 'changeDetector', + detection: 'detection', + properties: 'properties', +}; diff --git a/src/public-api.ts b/src/public-api.ts new file mode 100644 index 0000000..b54200e --- /dev/null +++ b/src/public-api.ts @@ -0,0 +1,14 @@ +/* + * Public API Surface of change-detection + */ + +// @angular-package/change-detection. +export { ChangeDetector } from './change-detector'; + +// change-detection/interface +// export { DetectionProperties, DetectorOptions } from './interface'; + +// change-detection +// export { ChangeDetection } from './lib/change-detection.decorator'; +// export { ChangeDetectionHelper } from './lib/change-detector.class'; +// export { DETECTOR_OPTIONS } from './lib/detector-options.const'; diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..bcca659 --- /dev/null +++ b/src/test.ts @@ -0,0 +1,27 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js'; +import 'zone.js/testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + (id: string): T; + keys(): string[]; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), +); + +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/tsconfig.lib.json b/tsconfig.lib.json new file mode 100644 index 0000000..b77b13c --- /dev/null +++ b/tsconfig.lib.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/lib", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": [ + "src/test.ts", + "**/*.spec.ts" + ] +} diff --git a/tsconfig.lib.prod.json b/tsconfig.lib.prod.json new file mode 100644 index 0000000..06de549 --- /dev/null +++ b/tsconfig.lib.prod.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 0000000..715dd0a --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,17 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} From 4fbf2fb44d0707d564ec171f2cbe46e9bf6cde3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Wed, 4 Sep 2024 19:24:07 +0000 Subject: [PATCH 02/22] Revert "Initial commit" This reverts commit fc0784e20710e56642add30613412a1846d29d70. --- .browserslistrc | 16 -- README.md | 24 -- karma.conf.js | 44 ---- ng-package.json | 7 - package.json | 11 - src/change-detector/index.ts | 1 - .../src/change-detector.class.ts | 249 ------------------ .../type/change-detector.spec.ts | 0 .../detection-properties.interface.ts | 5 - src/interface/detector-options.interface.ts | 5 - src/interface/index.ts | 2 - src/lib/change-detection.decorator.ts | 12 - src/lib/change-detector.class.ts | 13 - src/lib/configure-detector.func.ts | 60 ----- src/lib/detector-options.const.ts | 6 - src/public-api.ts | 14 - src/test.ts | 27 -- tsconfig.lib.json | 15 -- tsconfig.lib.prod.json | 10 - tsconfig.spec.json | 17 -- 20 files changed, 538 deletions(-) delete mode 100644 .browserslistrc delete mode 100644 README.md delete mode 100644 karma.conf.js delete mode 100644 ng-package.json delete mode 100644 package.json delete mode 100644 src/change-detector/index.ts delete mode 100644 src/change-detector/src/change-detector.class.ts delete mode 100644 src/change-detector/type/change-detector.spec.ts delete mode 100644 src/interface/detection-properties.interface.ts delete mode 100644 src/interface/detector-options.interface.ts delete mode 100644 src/interface/index.ts delete mode 100644 src/lib/change-detection.decorator.ts delete mode 100644 src/lib/change-detector.class.ts delete mode 100644 src/lib/configure-detector.func.ts delete mode 100644 src/lib/detector-options.const.ts delete mode 100644 src/public-api.ts delete mode 100644 src/test.ts delete mode 100644 tsconfig.lib.json delete mode 100644 tsconfig.lib.prod.json delete mode 100644 tsconfig.spec.json diff --git a/.browserslistrc b/.browserslistrc deleted file mode 100644 index 4f9ac26..0000000 --- a/.browserslistrc +++ /dev/null @@ -1,16 +0,0 @@ -# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. -# For additional information regarding the format and rule options, please see: -# https://github.com/browserslist/browserslist#queries - -# For the full list of supported browsers by the Angular framework, please see: -# https://angular.io/guide/browser-support - -# You can see what browsers were selected by your queries by running: -# npx browserslist - -last 1 Chrome version -last 1 Firefox version -last 2 Edge major versions -last 2 Safari major versions -last 2 iOS major versions -Firefox ESR diff --git a/README.md b/README.md deleted file mode 100644 index 3c73a23..0000000 --- a/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# ChangeDetection - -This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0. - -## Code scaffolding - -Run `ng generate component component-name --project change-detection` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project change-detection`. -> Note: Don't forget to add `--project change-detection` or else it will be added to the default project in your `angular.json` file. - -## Build - -Run `ng build change-detection` to build the project. The build artifacts will be stored in the `dist/` directory. - -## Publishing - -After building your library with `ng build change-detection`, go to the dist folder `cd dist/change-detection` and run `npm publish`. - -## Running unit tests - -Run `ng test change-detection` to execute the unit tests via [Karma](https://karma-runner.github.io). - -## Further help - -To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/karma.conf.js b/karma.conf.js deleted file mode 100644 index 78b2461..0000000 --- a/karma.conf.js +++ /dev/null @@ -1,44 +0,0 @@ -// Karma configuration file, see link for more information -// https://karma-runner.github.io/1.0/config/configuration-file.html - -module.exports = function (config) { - config.set({ - basePath: '', - frameworks: ['jasmine', '@angular-devkit/build-angular'], - plugins: [ - require('karma-jasmine'), - require('karma-chrome-launcher'), - require('karma-jasmine-html-reporter'), - require('karma-coverage'), - require('@angular-devkit/build-angular/plugins/karma') - ], - client: { - jasmine: { - // you can add configuration options for Jasmine here - // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html - // for example, you can disable the random execution with `random: false` - // or set a specific seed with `seed: 4321` - }, - clearContext: false // leave Jasmine Spec Runner output visible in browser - }, - jasmineHtmlReporter: { - suppressAll: true // removes the duplicated traces - }, - coverageReporter: { - dir: require('path').join(__dirname, '../../coverage/change-detection'), - subdir: '.', - reporters: [ - { type: 'html' }, - { type: 'text-summary' } - ] - }, - reporters: ['progress', 'kjhtml'], - port: 9876, - colors: true, - logLevel: config.LOG_INFO, - autoWatch: true, - browsers: ['Chrome'], - singleRun: false, - restartOnFileChange: true - }); -}; diff --git a/ng-package.json b/ng-package.json deleted file mode 100644 index a5fa57b..0000000 --- a/ng-package.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../dist/change-detection", - "lib": { - "entryFile": "src/public-api.ts" - } -} \ No newline at end of file diff --git a/package.json b/package.json deleted file mode 100644 index 113a1c4..0000000 --- a/package.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "name": "change-detection", - "version": "0.0.1", - "peerDependencies": { - "@angular/common": "^13.2.0", - "@angular/core": "^13.2.0" - }, - "dependencies": { - "tslib": "^2.3.0" - } -} \ No newline at end of file diff --git a/src/change-detector/index.ts b/src/change-detector/index.ts deleted file mode 100644 index 6ccd406..0000000 --- a/src/change-detector/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { ChangeDetector } from './src/change-detector.class'; diff --git a/src/change-detector/src/change-detector.class.ts b/src/change-detector/src/change-detector.class.ts deleted file mode 100644 index 2f05f50..0000000 --- a/src/change-detector/src/change-detector.class.ts +++ /dev/null @@ -1,249 +0,0 @@ -// ChangeDetectorRef -import { ChangeDetectorRef } from '@angular/core'; - -// Property. -import { Property, SetterCallback } from 'dist/property'; - -// internal -// import { DetectionProperties } from '../../interface'; - -export class ChangeDetector { - /** - * - */ - public get deactivated(): Set { - return this.#deactivated; - } - - /** - * The `get` accessor returns the list of detectable property names if set. - * @returns The return value is the `Set` object containing the list of detectable properties. - * @angularpackage - */ - public get detectable(): Set { - return this.#property.wrapped as any; - } - - /** - * Indicates `detached` state of the component given in the constructor. - */ - public detached = false; - - /** - * The property indicates the detection state of the component given in the constructor. When set to `true` all the properties indicated - * as detectable perform `detectChanges()` of `detector` on set. - */ - public detection = false; - - /** - * The property contains the change detector instance of the component given in the constructor. - */ - public detector?: ChangeDetectorRef; - - /** - * Private property string-type of the found change detector in the component given in the constructor. - */ - #cdKey?: string; - - /** - * - */ - #deactivated: Set = new Set(); - - /** - * Private property of `Property` handles inject detection to specified properties. - */ - #property!: Property; - - /** - * - * @param component - * @param keys - * @param callbackFn - * @angularpackage - */ - constructor( - component: Cmp, - keys: (keyof Cmp)[], - callbackFn?: SetterCallback - ) { - // Set picked key of the change detector. - if (typeof this.#setPickedDetectorKey(component) === 'string') { - // Set the detector to use. - this.detector = component[this.#cdKey as keyof Cmp] as any; - // Detach component on initialize to use `detectChanges()`. - this.detach(); - // Set detection to specified keys on initialize with the given optional `callbackFn`. - this.#property = Property.wrap( - component, - keys, - undefined, - this.#defineDetectionCallback(callbackFn) - ); - } - } - - /** - * Activates detection in the component of the given deactivated properties, which means perform `detectChanges` on set if detection is - * enabled. - * @param keys - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public activate(...keys: (keyof Cmp)[]): this { - Array.isArray(keys) && keys.forEach((key) => this.#deactivated.delete(key)); - return this; - } - - /** - * Deactivates detection in the component of the given properties, which means detectable properties don't perform `detectChanges` on set - * if detection is enabled. - * @param keys - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public deactivate(...keys: (keyof Cmp)[]): this { - Array.isArray(keys) && keys.forEach((key) => this.#deactivated.add(key)); - return this; - } - - /** - * Detaches the component from the change detector tree and sets property `detached` to `true`. - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public detach(): this { - setTimeout(() => this.detector && (this.detector.detach(), (this.detached = true)), 0); - return this; - } - - /** - * Disables detection in the component, which means detectable properties don't perform `detectChanges` on set. - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public disable(): this { - this.detection = true; - return this; - } - - /** - * Enables detection in the component, which means detectable(not deactivated) properties perform `detectChanges` on set. - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public enable(): this { - this.detection = true; - return this; - } - - /** - * Checks whether the component property of the given `key` is detectable. - * @param key The property name of component to check. - * @returns The return value is a `boolean` type indicating whether the component property of the given `key` is detectable. - * @angularpackage - */ - public has(key: keyof Cmp): boolean { - return this.#property?.wrapped.has(key) || false; - } - - /** - * Checks whether the component property of the given `key` is deactivated from detection. - * @param key The property name of `keyof Cmp` to check. - * @returns The return value is a `boolean` type indicating whether the property is deactivated from the detection. - * @angularpackage - */ - public isDeactivated(key: keyof Cmp): boolean { - return this.#deactivated.has(key); - } - - /** - * Detaches the component from the change detector tree and sets property `detached` to `true`. - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public reattach(): this { - setTimeout(() => this.detector && (this.detector.reattach(), (this.detached = false))); - return this; - } - - /** - * Removes properties given in the `keys` from the detectable, which means they don't perform `detectChanges()` on set. - * @param keys An array of `keyof Cmp` to remove from the detectable. - * @returns The return value is an instance of `ChangeDetector` for the chaining purpose. - * @angularpackage - */ - public remove(...keys: (keyof Cmp)[]): this { - this.#property?.unwrap(...keys); - return this; - } - - /** - * Sets detection on `set` to the component properties of the given `keys` making them detectable, which means each performs - * `detectChanges()` on set. - * @param keys The component keys of an `Array` to set detection. - * @param callbackFn Optional callback function to inject with detection. - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public set( - keys: Keys[], - callbackFn?: SetterCallback - ): this { - this.#property?.wrap( - keys, - undefined, - this.#defineDetectionCallback(callbackFn) - ); - return this; - } - - /** - * Defines function with detection and optional callback function to inject to property setter. - * @param callbackFn Callback function of generic type `SetterCallback` to inject along with detection. - * @returns The return value is the function to detect changes on set in the specified property with optional callback function. - * @angularpackage - */ - #defineDetectionCallback( - callbackFn?: SetterCallback - ): SetterCallback { - return (value: Cmp[Key], oldValue: Cmp[Key], key: Key, instance: Cmp) => { - typeof callbackFn === 'function' && - callbackFn(value, oldValue, key, instance); - this.detection === true && - this.deactivated.has(key) === false && - this.detector?.detectChanges(); - }; - } - - /** - * The method returns the property name of found change detector in the specified component. - * @param component Component to find change detector instance. - * @returns The return value is a string-type property name of the given `component` under which the change detector is stored. - * @angularpackage - */ - #setPickedDetectorKey(component: Cmp): string { - let prop; - if (this.#cdKey === undefined) { - if (typeof component === 'object') { - Object.keys(component).forEach( - (property: string): any => ( - (prop = component[property as keyof typeof component]), - typeof prop === 'object' && prop !== null && 'detectChanges' in prop && - 'reattach' in prop && - 'detach' in prop && - (this.#cdKey = property), - false - ) - ); - } - if (this.#cdKey === undefined) { - throw new Error(` - Problem: ChangeDetectorClass: couldn't find ChangeDetectorRef instance. - Quick fix: Add to constructor "public changeDetectorRef: ChangeDetectorRef". - `); - } - } - return this.#cdKey; - } -} diff --git a/src/change-detector/type/change-detector.spec.ts b/src/change-detector/type/change-detector.spec.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/interface/detection-properties.interface.ts b/src/interface/detection-properties.interface.ts deleted file mode 100644 index 068dc98..0000000 --- a/src/interface/detection-properties.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface GenericObject { - [name: string]: T; -} - -export interface DetectionProperties extends GenericObject {} diff --git a/src/interface/detector-options.interface.ts b/src/interface/detector-options.interface.ts deleted file mode 100644 index 3b90138..0000000 --- a/src/interface/detector-options.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface DetectorOptions { - changeDetector?: 'changeDetector' | string; - detection?: 'detection' | string; - properties?: 'properties' | string; -} diff --git a/src/interface/index.ts b/src/interface/index.ts deleted file mode 100644 index 991e6b3..0000000 --- a/src/interface/index.ts +++ /dev/null @@ -1,2 +0,0 @@ -export { DetectionProperties } from './detection-properties.interface'; -export { DetectorOptions } from './detector-options.interface'; diff --git a/src/lib/change-detection.decorator.ts b/src/lib/change-detection.decorator.ts deleted file mode 100644 index ab41598..0000000 --- a/src/lib/change-detection.decorator.ts +++ /dev/null @@ -1,12 +0,0 @@ -// internal -import { configureDetector } from './configure-detector.func'; -import { DetectionProperties } from '../interface/detection-properties.interface'; -import { DetectorOptions } from '../interface/detector-options.interface'; - -export function ChangeDetection( - properties: DetectionProperties, - options?: DetectorOptions -): ClassDecorator { - return (component: Function): any => - configureDetector(component, properties, options); -} diff --git a/src/lib/change-detector.class.ts b/src/lib/change-detector.class.ts deleted file mode 100644 index d8a79d7..0000000 --- a/src/lib/change-detector.class.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { ChangeDetectorRef } from '@angular/core'; - -// internals -import { DetectionProperties } from '../interface/detection-properties.interface'; - -/** - * Helper class for component. - */ -export abstract class ChangeDetectionHelper { - public changeDetectorRef?: ChangeDetectorRef; - public detection = false; - public properties?: DetectionProperties; -} diff --git a/src/lib/configure-detector.func.ts b/src/lib/configure-detector.func.ts deleted file mode 100644 index 49ff025..0000000 --- a/src/lib/configure-detector.func.ts +++ /dev/null @@ -1,60 +0,0 @@ - -// internal -import { ChangeDetector } from '../change-detector/lib/change-detector.ignore.class'; -import { DetectionProperties } from '../interface/detection-properties.interface'; -import { DetectorOptions } from '../interface/detector-options.interface'; - -// const. -import { DETECTOR_OPTIONS } from './detector-options.const'; - -/** - * Function to use with decorator. - * @param component Source component for properties. - * @param properties Properties names to detect changes if true. - * @param options Change default names assigned to component. - */ -export const configureDetector = ( - component: Function, - properties: (keyof Cmp)[], - options: DetectorOptions = DETECTOR_OPTIONS -): void => { - - if (typeObjectGuard(component)) { - if (typeObjectGuard(options)) { - options = Object.assign(DETECTOR_OPTIONS, options); - } - - Object.defineProperties(component.prototype, { - - $$changeDetector: { writable: true }, - [options.changeDetector]: { - get(): ChangeDetector { - if (this.$$changeDetector === undefined) { - this.$$changeDetector = new ChangeDetector(this, properties).addDetection(); - } - return this.$$changeDetector; - } - }, - - // Whether component changes are going to be detected or not. - [options.detection]: { - set(value: boolean): void { - if (value === false) { - this[options.changeDetector].detach(); - } else if (value === true) { - this[options.changeDetector].reattach(); - } - } - }, - - [options.properties]: { - set(value: DetectionProperties): void { - this.$$changeDetector.properties = value; - }, - get(): DetectionProperties { - return this.changeDetector.properties; - } - }, - }); - } -}; diff --git a/src/lib/detector-options.const.ts b/src/lib/detector-options.const.ts deleted file mode 100644 index d640225..0000000 --- a/src/lib/detector-options.const.ts +++ /dev/null @@ -1,6 +0,0 @@ -import { DetectorOptions } from '../interface/detector-options.interface'; -export const DETECTOR_OPTIONS: DetectorOptions = { - changeDetector: 'changeDetector', - detection: 'detection', - properties: 'properties', -}; diff --git a/src/public-api.ts b/src/public-api.ts deleted file mode 100644 index b54200e..0000000 --- a/src/public-api.ts +++ /dev/null @@ -1,14 +0,0 @@ -/* - * Public API Surface of change-detection - */ - -// @angular-package/change-detection. -export { ChangeDetector } from './change-detector'; - -// change-detection/interface -// export { DetectionProperties, DetectorOptions } from './interface'; - -// change-detection -// export { ChangeDetection } from './lib/change-detection.decorator'; -// export { ChangeDetectionHelper } from './lib/change-detector.class'; -// export { DETECTOR_OPTIONS } from './lib/detector-options.const'; diff --git a/src/test.ts b/src/test.ts deleted file mode 100644 index bcca659..0000000 --- a/src/test.ts +++ /dev/null @@ -1,27 +0,0 @@ -// This file is required by karma.conf.js and loads recursively all the .spec and framework files - -import 'zone.js'; -import 'zone.js/testing'; -import { getTestBed } from '@angular/core/testing'; -import { - BrowserDynamicTestingModule, - platformBrowserDynamicTesting -} from '@angular/platform-browser-dynamic/testing'; - -declare const require: { - context(path: string, deep?: boolean, filter?: RegExp): { - (id: string): T; - keys(): string[]; - }; -}; - -// First, initialize the Angular testing environment. -getTestBed().initTestEnvironment( - BrowserDynamicTestingModule, - platformBrowserDynamicTesting(), -); - -// Then we find all the tests. -const context = require.context('./', true, /\.spec\.ts$/); -// And load the modules. -context.keys().map(context); diff --git a/tsconfig.lib.json b/tsconfig.lib.json deleted file mode 100644 index b77b13c..0000000 --- a/tsconfig.lib.json +++ /dev/null @@ -1,15 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/lib", - "declaration": true, - "declarationMap": true, - "inlineSources": true, - "types": [] - }, - "exclude": [ - "src/test.ts", - "**/*.spec.ts" - ] -} diff --git a/tsconfig.lib.prod.json b/tsconfig.lib.prod.json deleted file mode 100644 index 06de549..0000000 --- a/tsconfig.lib.prod.json +++ /dev/null @@ -1,10 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "./tsconfig.lib.json", - "compilerOptions": { - "declarationMap": false - }, - "angularCompilerOptions": { - "compilationMode": "partial" - } -} diff --git a/tsconfig.spec.json b/tsconfig.spec.json deleted file mode 100644 index 715dd0a..0000000 --- a/tsconfig.spec.json +++ /dev/null @@ -1,17 +0,0 @@ -/* To learn more about this file see: https://angular.io/config/tsconfig. */ -{ - "extends": "../../tsconfig.json", - "compilerOptions": { - "outDir": "../../out-tsc/spec", - "types": [ - "jasmine" - ] - }, - "files": [ - "src/test.ts" - ], - "include": [ - "**/*.spec.ts", - "**/*.d.ts" - ] -} From 38dd98e08ad3689b15c6c9bc57774e434d840c43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=9Acibor=20Rudnicki?= Date: Wed, 4 Sep 2024 19:29:36 +0000 Subject: [PATCH 03/22] Initial commit --- .browserslistrc | 16 ++ README.md | 24 ++ karma.conf.js | 44 ++++ ng-package.json | 7 + package.json | 11 + src/change-detector/index.ts | 1 + .../src/change-detector.class.ts | 249 ++++++++++++++++++ .../type/change-detector.spec.ts | 0 .../detection-properties.interface.ts | 5 + src/interface/detector-options.interface.ts | 5 + src/interface/index.ts | 2 + src/lib/change-detection.decorator.ts | 12 + src/lib/change-detector.class.ts | 13 + src/lib/configure-detector.func.ts | 60 +++++ src/lib/detector-options.const.ts | 6 + src/public-api.ts | 14 + src/test.ts | 27 ++ tsconfig.lib.json | 15 ++ tsconfig.lib.prod.json | 10 + tsconfig.spec.json | 17 ++ 20 files changed, 538 insertions(+) create mode 100644 .browserslistrc create mode 100644 README.md create mode 100644 karma.conf.js create mode 100644 ng-package.json create mode 100644 package.json create mode 100644 src/change-detector/index.ts create mode 100644 src/change-detector/src/change-detector.class.ts create mode 100644 src/change-detector/type/change-detector.spec.ts create mode 100644 src/interface/detection-properties.interface.ts create mode 100644 src/interface/detector-options.interface.ts create mode 100644 src/interface/index.ts create mode 100644 src/lib/change-detection.decorator.ts create mode 100644 src/lib/change-detector.class.ts create mode 100644 src/lib/configure-detector.func.ts create mode 100644 src/lib/detector-options.const.ts create mode 100644 src/public-api.ts create mode 100644 src/test.ts create mode 100644 tsconfig.lib.json create mode 100644 tsconfig.lib.prod.json create mode 100644 tsconfig.spec.json diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..4f9ac26 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,16 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR diff --git a/README.md b/README.md new file mode 100644 index 0000000..3c73a23 --- /dev/null +++ b/README.md @@ -0,0 +1,24 @@ +# ChangeDetection + +This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0. + +## Code scaffolding + +Run `ng generate component component-name --project change-detection` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project change-detection`. +> Note: Don't forget to add `--project change-detection` or else it will be added to the default project in your `angular.json` file. + +## Build + +Run `ng build change-detection` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Publishing + +After building your library with `ng build change-detection`, go to the dist folder `cd dist/change-detection` and run `npm publish`. + +## Running unit tests + +Run `ng test change-detection` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/karma.conf.js b/karma.conf.js new file mode 100644 index 0000000..78b2461 --- /dev/null +++ b/karma.conf.js @@ -0,0 +1,44 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, '../../coverage/change-detection'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/ng-package.json b/ng-package.json new file mode 100644 index 0000000..a5fa57b --- /dev/null +++ b/ng-package.json @@ -0,0 +1,7 @@ +{ + "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", + "dest": "../../dist/change-detection", + "lib": { + "entryFile": "src/public-api.ts" + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..113a1c4 --- /dev/null +++ b/package.json @@ -0,0 +1,11 @@ +{ + "name": "change-detection", + "version": "0.0.1", + "peerDependencies": { + "@angular/common": "^13.2.0", + "@angular/core": "^13.2.0" + }, + "dependencies": { + "tslib": "^2.3.0" + } +} \ No newline at end of file diff --git a/src/change-detector/index.ts b/src/change-detector/index.ts new file mode 100644 index 0000000..6ccd406 --- /dev/null +++ b/src/change-detector/index.ts @@ -0,0 +1 @@ +export { ChangeDetector } from './src/change-detector.class'; diff --git a/src/change-detector/src/change-detector.class.ts b/src/change-detector/src/change-detector.class.ts new file mode 100644 index 0000000..2f05f50 --- /dev/null +++ b/src/change-detector/src/change-detector.class.ts @@ -0,0 +1,249 @@ +// ChangeDetectorRef +import { ChangeDetectorRef } from '@angular/core'; + +// Property. +import { Property, SetterCallback } from 'dist/property'; + +// internal +// import { DetectionProperties } from '../../interface'; + +export class ChangeDetector { + /** + * + */ + public get deactivated(): Set { + return this.#deactivated; + } + + /** + * The `get` accessor returns the list of detectable property names if set. + * @returns The return value is the `Set` object containing the list of detectable properties. + * @angularpackage + */ + public get detectable(): Set { + return this.#property.wrapped as any; + } + + /** + * Indicates `detached` state of the component given in the constructor. + */ + public detached = false; + + /** + * The property indicates the detection state of the component given in the constructor. When set to `true` all the properties indicated + * as detectable perform `detectChanges()` of `detector` on set. + */ + public detection = false; + + /** + * The property contains the change detector instance of the component given in the constructor. + */ + public detector?: ChangeDetectorRef; + + /** + * Private property string-type of the found change detector in the component given in the constructor. + */ + #cdKey?: string; + + /** + * + */ + #deactivated: Set = new Set(); + + /** + * Private property of `Property` handles inject detection to specified properties. + */ + #property!: Property; + + /** + * + * @param component + * @param keys + * @param callbackFn + * @angularpackage + */ + constructor( + component: Cmp, + keys: (keyof Cmp)[], + callbackFn?: SetterCallback + ) { + // Set picked key of the change detector. + if (typeof this.#setPickedDetectorKey(component) === 'string') { + // Set the detector to use. + this.detector = component[this.#cdKey as keyof Cmp] as any; + // Detach component on initialize to use `detectChanges()`. + this.detach(); + // Set detection to specified keys on initialize with the given optional `callbackFn`. + this.#property = Property.wrap( + component, + keys, + undefined, + this.#defineDetectionCallback(callbackFn) + ); + } + } + + /** + * Activates detection in the component of the given deactivated properties, which means perform `detectChanges` on set if detection is + * enabled. + * @param keys + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public activate(...keys: (keyof Cmp)[]): this { + Array.isArray(keys) && keys.forEach((key) => this.#deactivated.delete(key)); + return this; + } + + /** + * Deactivates detection in the component of the given properties, which means detectable properties don't perform `detectChanges` on set + * if detection is enabled. + * @param keys + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public deactivate(...keys: (keyof Cmp)[]): this { + Array.isArray(keys) && keys.forEach((key) => this.#deactivated.add(key)); + return this; + } + + /** + * Detaches the component from the change detector tree and sets property `detached` to `true`. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public detach(): this { + setTimeout(() => this.detector && (this.detector.detach(), (this.detached = true)), 0); + return this; + } + + /** + * Disables detection in the component, which means detectable properties don't perform `detectChanges` on set. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public disable(): this { + this.detection = true; + return this; + } + + /** + * Enables detection in the component, which means detectable(not deactivated) properties perform `detectChanges` on set. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public enable(): this { + this.detection = true; + return this; + } + + /** + * Checks whether the component property of the given `key` is detectable. + * @param key The property name of component to check. + * @returns The return value is a `boolean` type indicating whether the component property of the given `key` is detectable. + * @angularpackage + */ + public has(key: keyof Cmp): boolean { + return this.#property?.wrapped.has(key) || false; + } + + /** + * Checks whether the component property of the given `key` is deactivated from detection. + * @param key The property name of `keyof Cmp` to check. + * @returns The return value is a `boolean` type indicating whether the property is deactivated from the detection. + * @angularpackage + */ + public isDeactivated(key: keyof Cmp): boolean { + return this.#deactivated.has(key); + } + + /** + * Detaches the component from the change detector tree and sets property `detached` to `true`. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public reattach(): this { + setTimeout(() => this.detector && (this.detector.reattach(), (this.detached = false))); + return this; + } + + /** + * Removes properties given in the `keys` from the detectable, which means they don't perform `detectChanges()` on set. + * @param keys An array of `keyof Cmp` to remove from the detectable. + * @returns The return value is an instance of `ChangeDetector` for the chaining purpose. + * @angularpackage + */ + public remove(...keys: (keyof Cmp)[]): this { + this.#property?.unwrap(...keys); + return this; + } + + /** + * Sets detection on `set` to the component properties of the given `keys` making them detectable, which means each performs + * `detectChanges()` on set. + * @param keys The component keys of an `Array` to set detection. + * @param callbackFn Optional callback function to inject with detection. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public set( + keys: Keys[], + callbackFn?: SetterCallback + ): this { + this.#property?.wrap( + keys, + undefined, + this.#defineDetectionCallback(callbackFn) + ); + return this; + } + + /** + * Defines function with detection and optional callback function to inject to property setter. + * @param callbackFn Callback function of generic type `SetterCallback` to inject along with detection. + * @returns The return value is the function to detect changes on set in the specified property with optional callback function. + * @angularpackage + */ + #defineDetectionCallback( + callbackFn?: SetterCallback + ): SetterCallback { + return (value: Cmp[Key], oldValue: Cmp[Key], key: Key, instance: Cmp) => { + typeof callbackFn === 'function' && + callbackFn(value, oldValue, key, instance); + this.detection === true && + this.deactivated.has(key) === false && + this.detector?.detectChanges(); + }; + } + + /** + * The method returns the property name of found change detector in the specified component. + * @param component Component to find change detector instance. + * @returns The return value is a string-type property name of the given `component` under which the change detector is stored. + * @angularpackage + */ + #setPickedDetectorKey(component: Cmp): string { + let prop; + if (this.#cdKey === undefined) { + if (typeof component === 'object') { + Object.keys(component).forEach( + (property: string): any => ( + (prop = component[property as keyof typeof component]), + typeof prop === 'object' && prop !== null && 'detectChanges' in prop && + 'reattach' in prop && + 'detach' in prop && + (this.#cdKey = property), + false + ) + ); + } + if (this.#cdKey === undefined) { + throw new Error(` + Problem: ChangeDetectorClass: couldn't find ChangeDetectorRef instance. + Quick fix: Add to constructor "public changeDetectorRef: ChangeDetectorRef". + `); + } + } + return this.#cdKey; + } +} diff --git a/src/change-detector/type/change-detector.spec.ts b/src/change-detector/type/change-detector.spec.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/interface/detection-properties.interface.ts b/src/interface/detection-properties.interface.ts new file mode 100644 index 0000000..068dc98 --- /dev/null +++ b/src/interface/detection-properties.interface.ts @@ -0,0 +1,5 @@ +export interface GenericObject { + [name: string]: T; +} + +export interface DetectionProperties extends GenericObject {} diff --git a/src/interface/detector-options.interface.ts b/src/interface/detector-options.interface.ts new file mode 100644 index 0000000..3b90138 --- /dev/null +++ b/src/interface/detector-options.interface.ts @@ -0,0 +1,5 @@ +export interface DetectorOptions { + changeDetector?: 'changeDetector' | string; + detection?: 'detection' | string; + properties?: 'properties' | string; +} diff --git a/src/interface/index.ts b/src/interface/index.ts new file mode 100644 index 0000000..991e6b3 --- /dev/null +++ b/src/interface/index.ts @@ -0,0 +1,2 @@ +export { DetectionProperties } from './detection-properties.interface'; +export { DetectorOptions } from './detector-options.interface'; diff --git a/src/lib/change-detection.decorator.ts b/src/lib/change-detection.decorator.ts new file mode 100644 index 0000000..ab41598 --- /dev/null +++ b/src/lib/change-detection.decorator.ts @@ -0,0 +1,12 @@ +// internal +import { configureDetector } from './configure-detector.func'; +import { DetectionProperties } from '../interface/detection-properties.interface'; +import { DetectorOptions } from '../interface/detector-options.interface'; + +export function ChangeDetection( + properties: DetectionProperties, + options?: DetectorOptions +): ClassDecorator { + return (component: Function): any => + configureDetector(component, properties, options); +} diff --git a/src/lib/change-detector.class.ts b/src/lib/change-detector.class.ts new file mode 100644 index 0000000..d8a79d7 --- /dev/null +++ b/src/lib/change-detector.class.ts @@ -0,0 +1,13 @@ +import { ChangeDetectorRef } from '@angular/core'; + +// internals +import { DetectionProperties } from '../interface/detection-properties.interface'; + +/** + * Helper class for component. + */ +export abstract class ChangeDetectionHelper { + public changeDetectorRef?: ChangeDetectorRef; + public detection = false; + public properties?: DetectionProperties; +} diff --git a/src/lib/configure-detector.func.ts b/src/lib/configure-detector.func.ts new file mode 100644 index 0000000..49ff025 --- /dev/null +++ b/src/lib/configure-detector.func.ts @@ -0,0 +1,60 @@ + +// internal +import { ChangeDetector } from '../change-detector/lib/change-detector.ignore.class'; +import { DetectionProperties } from '../interface/detection-properties.interface'; +import { DetectorOptions } from '../interface/detector-options.interface'; + +// const. +import { DETECTOR_OPTIONS } from './detector-options.const'; + +/** + * Function to use with decorator. + * @param component Source component for properties. + * @param properties Properties names to detect changes if true. + * @param options Change default names assigned to component. + */ +export const configureDetector = ( + component: Function, + properties: (keyof Cmp)[], + options: DetectorOptions = DETECTOR_OPTIONS +): void => { + + if (typeObjectGuard(component)) { + if (typeObjectGuard(options)) { + options = Object.assign(DETECTOR_OPTIONS, options); + } + + Object.defineProperties(component.prototype, { + + $$changeDetector: { writable: true }, + [options.changeDetector]: { + get(): ChangeDetector { + if (this.$$changeDetector === undefined) { + this.$$changeDetector = new ChangeDetector(this, properties).addDetection(); + } + return this.$$changeDetector; + } + }, + + // Whether component changes are going to be detected or not. + [options.detection]: { + set(value: boolean): void { + if (value === false) { + this[options.changeDetector].detach(); + } else if (value === true) { + this[options.changeDetector].reattach(); + } + } + }, + + [options.properties]: { + set(value: DetectionProperties): void { + this.$$changeDetector.properties = value; + }, + get(): DetectionProperties { + return this.changeDetector.properties; + } + }, + }); + } +}; diff --git a/src/lib/detector-options.const.ts b/src/lib/detector-options.const.ts new file mode 100644 index 0000000..d640225 --- /dev/null +++ b/src/lib/detector-options.const.ts @@ -0,0 +1,6 @@ +import { DetectorOptions } from '../interface/detector-options.interface'; +export const DETECTOR_OPTIONS: DetectorOptions = { + changeDetector: 'changeDetector', + detection: 'detection', + properties: 'properties', +}; diff --git a/src/public-api.ts b/src/public-api.ts new file mode 100644 index 0000000..b54200e --- /dev/null +++ b/src/public-api.ts @@ -0,0 +1,14 @@ +/* + * Public API Surface of change-detection + */ + +// @angular-package/change-detection. +export { ChangeDetector } from './change-detector'; + +// change-detection/interface +// export { DetectionProperties, DetectorOptions } from './interface'; + +// change-detection +// export { ChangeDetection } from './lib/change-detection.decorator'; +// export { ChangeDetectionHelper } from './lib/change-detector.class'; +// export { DETECTOR_OPTIONS } from './lib/detector-options.const'; diff --git a/src/test.ts b/src/test.ts new file mode 100644 index 0000000..bcca659 --- /dev/null +++ b/src/test.ts @@ -0,0 +1,27 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js'; +import 'zone.js/testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + (id: string): T; + keys(): string[]; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), +); + +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().map(context); diff --git a/tsconfig.lib.json b/tsconfig.lib.json new file mode 100644 index 0000000..b77b13c --- /dev/null +++ b/tsconfig.lib.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/lib", + "declaration": true, + "declarationMap": true, + "inlineSources": true, + "types": [] + }, + "exclude": [ + "src/test.ts", + "**/*.spec.ts" + ] +} diff --git a/tsconfig.lib.prod.json b/tsconfig.lib.prod.json new file mode 100644 index 0000000..06de549 --- /dev/null +++ b/tsconfig.lib.prod.json @@ -0,0 +1,10 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.lib.json", + "compilerOptions": { + "declarationMap": false + }, + "angularCompilerOptions": { + "compilationMode": "partial" + } +} diff --git a/tsconfig.spec.json b/tsconfig.spec.json new file mode 100644 index 0000000..715dd0a --- /dev/null +++ b/tsconfig.spec.json @@ -0,0 +1,17 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "outDir": "../../out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts" + ], + "include": [ + "**/*.spec.ts", + "**/*.d.ts" + ] +} From 6b6a483007996f416fdd84acb061b1d81e181f30 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Wed, 2 Oct 2024 23:11:52 +0000 Subject: [PATCH 04/22] docs(README.md): update. --- README.md | 183 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 174 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 3c73a23..57be5d2 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,189 @@ -# ChangeDetection +# angular-package -This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 13.2.0. + + + + +The angular-package supports the development process of [angular](https://angular.io)-based applications in varied ways through the thoughtful, reusable, easy-to-use small pieces of code called packages. + +## Detection + +Improve application performance. + +[![Gitter][gitter-badge]][gitter-chat] +[![Discord][discord-badge]][discord-channel] +[![Twitter][twitter-badge]][twitter-follow] + + +[![npm version][detection-npm-badge-svg]][detection-npm-badge] + + +[![GitHub issues][detection-badge-issues]][detection-issues] +[![GitHub forks][detection-badge-forks]][detection-forks] +[![GitHub stars][detection-badge-stars]][detection-stars] +[![GitHub license][detection-badge-license]][detection-license] + + +[![GitHub Sponsors][github-badge-sponsor]][github-sponsor-link] +[![Patreon Sponsors][patreon-badge]][patreon-link] + + +
+ +The package is **free** to use. If you enjoy it, please consider donating via [fiat](https://docs.angular-package.dev/v/sass/donate/fiat), [Revolut platform](https://checkout.revolut.com/pay/048b10a3-0e10-42c8-a917-e3e9cb4c8e29) or [cryptocurrency](https://spectrecss.angular-package.dev/donate/thb-cryptocurrency) the [@angular-package](https://github.com/sponsors/angular-package) for further development. ♥ + +> Feel **free** to submit a pull request. Help is always appreciated. + +
+ +## Table of contents + +* [Skeleton](#skeleton) +* [Code scaffolding](#code-scaffolding) +* [Documentation](#documentation) +* [Changelog](#changelog) +* [Git](#git) + * [Commit](#commit) + * [Versioning](#versioning) +* [License](#license) + +
+ +## Skeleton + +This package was generated by the [skeleton workspace][skeleton] with [Angular CLI](https://github.com/angular/angular-cli) version `14.2.0`. + +Copy this package to the `packages/detection` folder of the [skeleton workspace][skeleton] then run the commands below. + +
## Code scaffolding -Run `ng generate component component-name --project change-detection` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project change-detection`. -> Note: Don't forget to add `--project change-detection` or else it will be added to the default project in your `angular.json` file. +Run `ng generate component component-name --project detection` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project detection`. +> Note: Don't forget to add `--project detection` or else it will be added to the default project in your `angular.json` file. -## Build +### Build -Run `ng build change-detection` to build the project. The build artifacts will be stored in the `dist/` directory. +Run `ng build detection` to build the project. The build artifacts will be stored in the `dist/` directory. -## Publishing +### Publishing -After building your library with `ng build change-detection`, go to the dist folder `cd dist/change-detection` and run `npm publish`. +After building your library with `ng build detection`, go to the dist folder `cd dist/detection` and run `npm publish`. ## Running unit tests -Run `ng test change-detection` to execute the unit tests via [Karma](https://karma-runner.github.io). +Run `ng test detection` to execute the unit tests via [Karma](https://karma-runner.github.io). ## Further help To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. + +
+ +## Documentation + +The documentation is in construction and it's available at [https://docs.angular-package.dev/v/detection](https://docs.angular-package.dev/v/detection/) + +
+ +## Changelog + +To read it, click on the [CHANGELOG.md][detection-github-changelog] link. + +
+ +## GIT + +### Commit + +* [AngularJS Git Commit Message Conventions][git-commit-angular] +* [Karma Git Commit Msg][git-commit-karma] +* [Conventional Commits][git-commit-conventional] + +### Versioning + +[Semantic Versioning 2.0.0][git-semver] + +**Given a version number MAJOR.MINOR.PATCH, increment the:** + +* MAJOR version when you make incompatible API changes, +* MINOR version when you add functionality in a backwards-compatible manner, and +* PATCH version when you make backwards-compatible bug fixes. + +Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format. + +**FAQ** +How should I deal with revisions in the 0.y.z initial development phase? + +> The simplest thing to do is start your initial development release at 0.1.0 and then increment the minor version for each subsequent release. + +How do I know when to release 1.0.0? + +> If your software is being used in production, it should probably already be 1.0.0. If you have a stable API on which users have come to depend, you should be 1.0.0. If you’re worrying a lot about backwards compatibility, you should probably already be 1.0.0. + +
+ +## License + +MIT © angular-package ([license][detection-license]) + + +[github-badge-sponsor]: https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&link=https://github.com/sponsors/angular-package +[github-sponsor-link]: https://github.com/sponsors/angular-package +[patreon-badge]: https://img.shields.io/endpoint.svg?url=https%3A%2F%2Fshieldsio-patreon.vercel.app%2Fapi%3Fusername%3Dangularpackage%26type%3Dpatrons&style=flat +[patreon-link]: https://www.patreon.com/join/angularpackage/checkout?fan_landing=true&rid=0 + +[angulario]: https://angular.io +[skeleton]: https://github.com/angular-package/skeleton + + +[experimental]: https://img.shields.io/badge/-Experimental-orange +[fix]: https://img.shields.io/badge/-Fix-red +[new]: https://img.shields.io/badge/-eNw-green +[update]: https://img.shields.io/badge/-Update-red +[documentation]: https://img.shields.io/badge/-Documentation-informational +[demonstration]: https://img.shields.io/badge/-Demonstration-green + + +[discord-badge]: https://img.shields.io/discord/925168966098386944?style=social&logo=discord&label=Discord +[discord-channel]: https://discord.com/invite/rUCR2CW75G + + +[gitter-badge]: https://img.shields.io/gitter/room/angular-package/ap-sass?style=social&logo=gitter +[gitter-chat]: https://app.gitter.im/#/room/#ap-sass:gitter.im + + +[twitter-badge]: https://img.shields.io/twitter/follow/angularpackage?label=%40angularpackage&style=social +[twitter-follow]: https://twitter.com/angularpackage + + +[git-semver]: http://semver.org/ + + +[git-commit-angular]: https://gist.github.com/stephenparish/9941e89d80e2bc58a153 +[git-commit-karma]: http://karma-runner.github.io/0.10/dev/git-commit-msg.html +[git-commit-conventional]: https://www.conventionalcommits.org/en/v1.0.0/ + + + + [detection-badge-issues]: https://img.shields.io/github/issues/angular-package/detection + [detection-badge-forks]: https://img.shields.io/github/forks/angular-package/detection + [detection-badge-stars]: https://img.shields.io/github/stars/angular-package/detection + [detection-badge-license]: https://img.shields.io/github/license/angular-package/detection + + [detection-issues]: https://github.com/angular-package/detection/issues + [detection-forks]: https://github.com/angular-package/detection/network + [detection-license]: https://github.com/angular-package/detection/blob/master/LICENSE + [detection-stars]: https://github.com/angular-package/detection/stargazers + + [detection-github-changelog]: https://github.com/angular-package/detection/blob/main/CHANGELOG.md + + + + [detection-npm-badge-svg]: https://badge.fury.io/js/@angular-package%2Fdetection.svg + [detection-npm-badge-png]: https://badge.fury.io/js/@angular-package%2Fdetection.png + [detection-npm-badge]: https://badge.fury.io/js/@angular-package%2Fdetection + [detection-npm-readme]: https://www.npmjs.com/package/@angular-package/detection#readme + + + [detection-github-readme]: https://github.com/angular-package/detection#readme From db103fa3cf775aa7814759f7239251ec5fabb72b Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:29:20 +0000 Subject: [PATCH 05/22] refactor: remove unnecessary. --- src/change-detector/index.ts | 1 - .../src/change-detector.class.ts | 249 ------------------ .../type/change-detector.spec.ts | 0 .../detection-properties.interface.ts | 5 - 4 files changed, 255 deletions(-) delete mode 100644 src/change-detector/index.ts delete mode 100644 src/change-detector/src/change-detector.class.ts delete mode 100644 src/change-detector/type/change-detector.spec.ts delete mode 100644 src/interface/detection-properties.interface.ts diff --git a/src/change-detector/index.ts b/src/change-detector/index.ts deleted file mode 100644 index 6ccd406..0000000 --- a/src/change-detector/index.ts +++ /dev/null @@ -1 +0,0 @@ -export { ChangeDetector } from './src/change-detector.class'; diff --git a/src/change-detector/src/change-detector.class.ts b/src/change-detector/src/change-detector.class.ts deleted file mode 100644 index 2f05f50..0000000 --- a/src/change-detector/src/change-detector.class.ts +++ /dev/null @@ -1,249 +0,0 @@ -// ChangeDetectorRef -import { ChangeDetectorRef } from '@angular/core'; - -// Property. -import { Property, SetterCallback } from 'dist/property'; - -// internal -// import { DetectionProperties } from '../../interface'; - -export class ChangeDetector { - /** - * - */ - public get deactivated(): Set { - return this.#deactivated; - } - - /** - * The `get` accessor returns the list of detectable property names if set. - * @returns The return value is the `Set` object containing the list of detectable properties. - * @angularpackage - */ - public get detectable(): Set { - return this.#property.wrapped as any; - } - - /** - * Indicates `detached` state of the component given in the constructor. - */ - public detached = false; - - /** - * The property indicates the detection state of the component given in the constructor. When set to `true` all the properties indicated - * as detectable perform `detectChanges()` of `detector` on set. - */ - public detection = false; - - /** - * The property contains the change detector instance of the component given in the constructor. - */ - public detector?: ChangeDetectorRef; - - /** - * Private property string-type of the found change detector in the component given in the constructor. - */ - #cdKey?: string; - - /** - * - */ - #deactivated: Set = new Set(); - - /** - * Private property of `Property` handles inject detection to specified properties. - */ - #property!: Property; - - /** - * - * @param component - * @param keys - * @param callbackFn - * @angularpackage - */ - constructor( - component: Cmp, - keys: (keyof Cmp)[], - callbackFn?: SetterCallback - ) { - // Set picked key of the change detector. - if (typeof this.#setPickedDetectorKey(component) === 'string') { - // Set the detector to use. - this.detector = component[this.#cdKey as keyof Cmp] as any; - // Detach component on initialize to use `detectChanges()`. - this.detach(); - // Set detection to specified keys on initialize with the given optional `callbackFn`. - this.#property = Property.wrap( - component, - keys, - undefined, - this.#defineDetectionCallback(callbackFn) - ); - } - } - - /** - * Activates detection in the component of the given deactivated properties, which means perform `detectChanges` on set if detection is - * enabled. - * @param keys - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public activate(...keys: (keyof Cmp)[]): this { - Array.isArray(keys) && keys.forEach((key) => this.#deactivated.delete(key)); - return this; - } - - /** - * Deactivates detection in the component of the given properties, which means detectable properties don't perform `detectChanges` on set - * if detection is enabled. - * @param keys - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public deactivate(...keys: (keyof Cmp)[]): this { - Array.isArray(keys) && keys.forEach((key) => this.#deactivated.add(key)); - return this; - } - - /** - * Detaches the component from the change detector tree and sets property `detached` to `true`. - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public detach(): this { - setTimeout(() => this.detector && (this.detector.detach(), (this.detached = true)), 0); - return this; - } - - /** - * Disables detection in the component, which means detectable properties don't perform `detectChanges` on set. - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public disable(): this { - this.detection = true; - return this; - } - - /** - * Enables detection in the component, which means detectable(not deactivated) properties perform `detectChanges` on set. - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public enable(): this { - this.detection = true; - return this; - } - - /** - * Checks whether the component property of the given `key` is detectable. - * @param key The property name of component to check. - * @returns The return value is a `boolean` type indicating whether the component property of the given `key` is detectable. - * @angularpackage - */ - public has(key: keyof Cmp): boolean { - return this.#property?.wrapped.has(key) || false; - } - - /** - * Checks whether the component property of the given `key` is deactivated from detection. - * @param key The property name of `keyof Cmp` to check. - * @returns The return value is a `boolean` type indicating whether the property is deactivated from the detection. - * @angularpackage - */ - public isDeactivated(key: keyof Cmp): boolean { - return this.#deactivated.has(key); - } - - /** - * Detaches the component from the change detector tree and sets property `detached` to `true`. - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public reattach(): this { - setTimeout(() => this.detector && (this.detector.reattach(), (this.detached = false))); - return this; - } - - /** - * Removes properties given in the `keys` from the detectable, which means they don't perform `detectChanges()` on set. - * @param keys An array of `keyof Cmp` to remove from the detectable. - * @returns The return value is an instance of `ChangeDetector` for the chaining purpose. - * @angularpackage - */ - public remove(...keys: (keyof Cmp)[]): this { - this.#property?.unwrap(...keys); - return this; - } - - /** - * Sets detection on `set` to the component properties of the given `keys` making them detectable, which means each performs - * `detectChanges()` on set. - * @param keys The component keys of an `Array` to set detection. - * @param callbackFn Optional callback function to inject with detection. - * @returns The return value is an instance of `ChangeDetector`. - * @angularpackage - */ - public set( - keys: Keys[], - callbackFn?: SetterCallback - ): this { - this.#property?.wrap( - keys, - undefined, - this.#defineDetectionCallback(callbackFn) - ); - return this; - } - - /** - * Defines function with detection and optional callback function to inject to property setter. - * @param callbackFn Callback function of generic type `SetterCallback` to inject along with detection. - * @returns The return value is the function to detect changes on set in the specified property with optional callback function. - * @angularpackage - */ - #defineDetectionCallback( - callbackFn?: SetterCallback - ): SetterCallback { - return (value: Cmp[Key], oldValue: Cmp[Key], key: Key, instance: Cmp) => { - typeof callbackFn === 'function' && - callbackFn(value, oldValue, key, instance); - this.detection === true && - this.deactivated.has(key) === false && - this.detector?.detectChanges(); - }; - } - - /** - * The method returns the property name of found change detector in the specified component. - * @param component Component to find change detector instance. - * @returns The return value is a string-type property name of the given `component` under which the change detector is stored. - * @angularpackage - */ - #setPickedDetectorKey(component: Cmp): string { - let prop; - if (this.#cdKey === undefined) { - if (typeof component === 'object') { - Object.keys(component).forEach( - (property: string): any => ( - (prop = component[property as keyof typeof component]), - typeof prop === 'object' && prop !== null && 'detectChanges' in prop && - 'reattach' in prop && - 'detach' in prop && - (this.#cdKey = property), - false - ) - ); - } - if (this.#cdKey === undefined) { - throw new Error(` - Problem: ChangeDetectorClass: couldn't find ChangeDetectorRef instance. - Quick fix: Add to constructor "public changeDetectorRef: ChangeDetectorRef". - `); - } - } - return this.#cdKey; - } -} diff --git a/src/change-detector/type/change-detector.spec.ts b/src/change-detector/type/change-detector.spec.ts deleted file mode 100644 index e69de29..0000000 diff --git a/src/interface/detection-properties.interface.ts b/src/interface/detection-properties.interface.ts deleted file mode 100644 index 068dc98..0000000 --- a/src/interface/detection-properties.interface.ts +++ /dev/null @@ -1,5 +0,0 @@ -export interface GenericObject { - [name: string]: T; -} - -export interface DetectionProperties extends GenericObject {} From 00a23dc6c8eeb14b16433664c62e7e0589478dc5 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:30:17 +0000 Subject: [PATCH 06/22] refactor: add `detached` to detector options. --- src/interface/detector-options.interface.ts | 10 +++++++--- src/interface/index.ts | 1 - src/lib/detector-options.const.ts | 6 ++++++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/interface/detector-options.interface.ts b/src/interface/detector-options.interface.ts index 3b90138..2aed0ac 100644 --- a/src/interface/detector-options.interface.ts +++ b/src/interface/detector-options.interface.ts @@ -1,5 +1,9 @@ +/** + * + */ export interface DetectorOptions { - changeDetector?: 'changeDetector' | string; - detection?: 'detection' | string; - properties?: 'properties' | string; + changeDetector: 'changeDetector' | string; + detached: 'detached' | string; + detection: 'detection' | string; + properties: 'properties' | string; } diff --git a/src/interface/index.ts b/src/interface/index.ts index 991e6b3..c507b3f 100644 --- a/src/interface/index.ts +++ b/src/interface/index.ts @@ -1,2 +1 @@ -export { DetectionProperties } from './detection-properties.interface'; export { DetectorOptions } from './detector-options.interface'; diff --git a/src/lib/detector-options.const.ts b/src/lib/detector-options.const.ts index d640225..f192c1e 100644 --- a/src/lib/detector-options.const.ts +++ b/src/lib/detector-options.const.ts @@ -1,6 +1,12 @@ +// Interface. import { DetectorOptions } from '../interface/detector-options.interface'; + +/** + * + */ export const DETECTOR_OPTIONS: DetectorOptions = { changeDetector: 'changeDetector', + detached: 'detached', detection: 'detection', properties: 'properties', }; From 2c039056219c3ce532ac608affbc80f75adb50ee Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:31:03 +0000 Subject: [PATCH 07/22] refactor(configureDetector): update to the new change detector. --- src/lib/configure-detector.func.ts | 55 +++++++++++++++++++----------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/src/lib/configure-detector.func.ts b/src/lib/configure-detector.func.ts index 49ff025..fde97f8 100644 --- a/src/lib/configure-detector.func.ts +++ b/src/lib/configure-detector.func.ts @@ -1,60 +1,75 @@ -// internal -import { ChangeDetector } from '../change-detector/lib/change-detector.ignore.class'; -import { DetectionProperties } from '../interface/detection-properties.interface'; -import { DetectorOptions } from '../interface/detector-options.interface'; +// Class. +import { ChangeDetector } from './change-detector.class'; // const. import { DETECTOR_OPTIONS } from './detector-options.const'; +// Interface. +import { DetectorOptions } from '../interface/detector-options.interface'; + +// Type. +import { DetectionProperties } from '../type/detection-properties.type'; + /** * Function to use with decorator. * @param component Source component for properties. * @param properties Properties names to detect changes if true. * @param options Change default names assigned to component. */ -export const configureDetector = ( +export const configureDetector = ( component: Function, - properties: (keyof Cmp)[], + properties: DetectionProperties, options: DetectorOptions = DETECTOR_OPTIONS ): void => { - - if (typeObjectGuard(component)) { - if (typeObjectGuard(options)) { + if ((component)) { + if ((options)) { options = Object.assign(DETECTOR_OPTIONS, options); } - Object.defineProperties(component.prototype, { - $$changeDetector: { writable: true }, + [options.changeDetector]: { get(): ChangeDetector { if (this.$$changeDetector === undefined) { - this.$$changeDetector = new ChangeDetector(this, properties).addDetection(); + this.$$changeDetector = new ChangeDetector( + this, + Object.keys(properties) as (keyof Cmp)[] + ); } return this.$$changeDetector; } }, - // Whether component changes are going to be detected or not. + // Detaches the component from the change detector tree if `true`. + [options.detached]: { + set(value: boolean): void { + if (value === true) { + (this[options.changeDetector] as ChangeDetector).detach(); + } else if (value === false) { + (this[options.changeDetector] as ChangeDetector).reattach(); + } + } + }, + + // Enables detection in the component, which means detectable(not deactivated) properties perform detectChanges on set. [options.detection]: { set(value: boolean): void { if (value === false) { - this[options.changeDetector].detach(); + (this[options.changeDetector] as ChangeDetector).detection.disable(); } else if (value === true) { - this[options.changeDetector].reattach(); + (this[options.changeDetector] as ChangeDetector).detection.enable(); } } }, + // Detection properties. [options.properties]: { - set(value: DetectionProperties): void { - this.$$changeDetector.properties = value; - }, - get(): DetectionProperties { - return this.changeDetector.properties; + get(): DetectionProperties { + return (this.$$changeDetector as ChangeDetector).detection.properties; } }, + }); } }; From 84e44b99abd53fee989519ba5122e5612a0025a3 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:31:55 +0000 Subject: [PATCH 08/22] refactor(ChangeDetector): set change detector and move abstract to helper file. --- src/lib/change-detection-helper.abstract.ts | 20 +++ src/lib/change-detector.class.ts | 137 +++++++++++++++++++- 2 files changed, 150 insertions(+), 7 deletions(-) create mode 100644 src/lib/change-detection-helper.abstract.ts diff --git a/src/lib/change-detection-helper.abstract.ts b/src/lib/change-detection-helper.abstract.ts new file mode 100644 index 0000000..bc7c5bb --- /dev/null +++ b/src/lib/change-detection-helper.abstract.ts @@ -0,0 +1,20 @@ +// Angular. +import { ChangeDetectorRef } from '@angular/core'; + +// Type. +import { DetectionProperties } from '../type/detection-properties.type'; + +/** + * Helper class for component. + */ +export abstract class ChangeDetectionHelper { + public detached?: boolean; + public detection?: boolean; + public readonly properties?: DetectionProperties; + + /** + * + * @param changeDetectorRef + */ + constructor(public changeDetectorRef: ChangeDetectorRef) {} +} diff --git a/src/lib/change-detector.class.ts b/src/lib/change-detector.class.ts index d8a79d7..18f0d5c 100644 --- a/src/lib/change-detector.class.ts +++ b/src/lib/change-detector.class.ts @@ -1,13 +1,136 @@ +// ChangeDetectorRef import { ChangeDetectorRef } from '@angular/core'; -// internals -import { DetectionProperties } from '../interface/detection-properties.interface'; +// Class. +import { ChangeDetection } from './change-detection.class'; + +// Type. +import { SetterCallback } from '@angular-package/property'; /** - * Helper class for component. + * */ -export abstract class ChangeDetectionHelper { - public changeDetectorRef?: ChangeDetectorRef; - public detection = false; - public properties?: DetectionProperties; +export class ChangeDetector { + /** + * Indicates `detached` state of the component given in the constructor. + */ + public get detached() { + return this.#detached; + } + + /** + * The property contains the change detector instance of the component given in the constructor. + */ + public get detector() { + return this.#detector; + } + + /** + * + */ + public get detection() { + return this.#detection; + } + + /** + * + */ + #detector!: ChangeDetectorRef; + + /** + * Private property string-type of the found change detector in the component given in the constructor. + */ + #changeDetectorRefKey!: keyof Cmp; + + /** + * Component detached status. + */ + #detached = false; + + /** + * Component detection. + */ + #detection!: ChangeDetection; + + /** + * + * @param component + * @param keys + * @param callbackFn + * @angularpackage + */ + constructor( + component: Cmp, + keys: (keyof Cmp)[], + callbackFn?: SetterCallback + ) { + // Set picked key of the change detector. + if (typeof this.#setDetectorKey(component) === 'string') { + // Set the detector to use. + this.#detector = component[this.#changeDetectorRefKey] as any; + + // Detach component on initialize to use `detectChanges()`. + this.detach(); + + // Detection. + this.#detection = new ChangeDetection( + this.#changeDetectorRefKey, + component, + keys, + callbackFn + ); + } + } + + /** + * Detaches the component from the change detector tree and sets property `detached` to `true`. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public detach(): this { + setTimeout(() => this.#detector && (this.#detector.detach(), (this.#detached = true)), 0); + return this; + } + + /** + * Detaches the component from the change detector tree and sets property `detached` to `true`. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public reattach(): this { + setTimeout(() => this.#detector && (this.#detector.reattach(), (this.#detached = false))); + return this; + } + + /** + * The method returns the property name of found change detector in the specified component. + * @param component Component to find change detector instance. + * @returns The return value is a string-type property name of the given `component` under which the change detector is stored. + * @angularpackage + */ + #setDetectorKey(component: Cmp): keyof Cmp { + let prop; + if (this.#changeDetectorRefKey === undefined) { + if (typeof component === 'object') { + Object + .keys(component) + .forEach(property => ( + (prop = component[property as keyof typeof component]), + typeof prop === 'object' && prop !== null && 'detectChanges' in prop && + 'reattach' in prop && + 'detach' in prop && + (this.#changeDetectorRefKey = property as keyof Cmp), + false + ) + ); + } + if (this.#changeDetectorRefKey === undefined) { + throw new Error(` + Problem: ChangeDetectorClass: couldn't find ChangeDetectorRef instance. + Quick fix: Add to constructor "public changeDetectorRef: ChangeDetectorRef". + `); + } + } + return this.#changeDetectorRefKey; + } } From f00607fa08802242e40cec36c3631d8e706cb93c Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:33:50 +0000 Subject: [PATCH 09/22] refactor(ChangeDetection): set parameter to object type. --- src/lib/change-detection.decorator.ts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/lib/change-detection.decorator.ts b/src/lib/change-detection.decorator.ts index ab41598..9709bfe 100644 --- a/src/lib/change-detection.decorator.ts +++ b/src/lib/change-detection.decorator.ts @@ -1,12 +1,26 @@ // internal import { configureDetector } from './configure-detector.func'; -import { DetectionProperties } from '../interface/detection-properties.interface'; + +// Interface. import { DetectorOptions } from '../interface/detector-options.interface'; -export function ChangeDetection( - properties: DetectionProperties, +// Type. +import { DetectionProperties } from '../type/detection-properties.type'; + +/** + * Decorator. + * @param properties + * @param options + * @returns + */ +export function ChangeDetection({}: { + properties: DetectionProperties, options?: DetectorOptions -): ClassDecorator { +}): ClassDecorator { return (component: Function): any => - configureDetector(component, properties, options); + configureDetector( + component, + arguments[0].properties, + arguments[0].options, + ); } From 738f4e619fc8a87f2e077ec5aae6726308c79f6d Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:34:22 +0000 Subject: [PATCH 10/22] feat(ChangeDetection): add class to handle detection properties with type. --- src/lib/change-detection.class.ts | 209 ++++++++++++++++++++++++++ src/type/detection-properties.type.ts | 12 ++ 2 files changed, 221 insertions(+) create mode 100644 src/lib/change-detection.class.ts create mode 100644 src/type/detection-properties.type.ts diff --git a/src/lib/change-detection.class.ts b/src/lib/change-detection.class.ts new file mode 100644 index 0000000..f3f969c --- /dev/null +++ b/src/lib/change-detection.class.ts @@ -0,0 +1,209 @@ +// ChangeDetectorRef +import { ChangeDetectorRef } from '@angular/core'; + +// Property. +import { Property, SetterCallback } from '@angular-package/property'; + +// Type. +import { DetectionProperties } from '../type/detection-properties.type'; + +/** + * + */ +export class ChangeDetection { + /** + * Deactivated properties. + */ + public get deactivated(): Set { + return this.#deactivated; + } + + /** + * The `get` accessor returns the list of detectable property names if set. + * @returns The return value is the `Set` object containing the list of detectable properties. + * @angularpackage + */ + public get detectable(): Set { + return this.#property.wrapped as any; + } + + /** + * The property indicates the detection state of the component given in the constructor. When set to `true` all the properties indicated + * as detectable perform `detectChanges()` of `detector` on set. + */ + public get detection() { + return this.#detection; + } + + /** + * + */ + public get properties() { + return this.#properties; + } + + /** + * + */ + #changeDetectorRef!: ChangeDetectorRef; + + /** + * Deactivated properties. + */ + #deactivated: Set = new Set(); + + /** + * Component detection status. + */ + #detection = false; + + /** + * Private property of `Property` handles inject detection to specified properties. + */ + #property!: Property; + + /** + * Detection properties. + */ + #properties: DetectionProperties = {}; + + /** + * + * @param component + * @param keys + * @param callbackFn + * @angularpackage + */ + constructor( + changeDetectorRefKey: keyof Cmp, // ChangeDetector, + component: Cmp, + keys: (keyof Cmp)[], + callbackFn?: SetterCallback + ) { + keys.forEach(property => Object.assign(this.#properties, { [property]: true })); + + // Set the detector to use. + this.#changeDetectorRef = component[changeDetectorRefKey] as unknown as ChangeDetectorRef; + + // Set detection to specified keys on initialize with the given optional `callbackFn`. + this.#property = Property.wrap( + component, + keys, + undefined, + this.#defineDetectionCallback(callbackFn) + ); + } + + /** + * Activates detection in the component of the given deactivated properties, which means perform `detectChanges` on set if detection is + * enabled. + * @param keys + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public activate(...keys: (keyof Cmp)[]): this { + Array.isArray(keys) && keys.forEach((key) => this.#deactivated.delete(key)); + return this; + } + + /** + * Deactivates detection in the component of the given properties, which means detectable properties don't perform `detectChanges` on set + * if detection is enabled. + * @param keys + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public deactivate(...keys: (keyof Cmp)[]): this { + Array.isArray(keys) && keys.forEach(key => this.#deactivated.add(key)); + return this; + } + + /** + * Disables detection in the component, which means detectable properties don't perform `detectChanges` on set. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public disable(): this { + this.#detection = false; + return this; + } + + /** + * Enables detection in the component, which means detectable(not deactivated) properties perform `detectChanges` on set. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public enable(): this { + this.#detection = true; + return this; + } + + /** + * Checks whether the component property of the given `key` is detectable. + * @param key The property name of component to check. + * @returns The return value is a `boolean` type indicating whether the component property of the given `key` is detectable. + * @angularpackage + */ + public has(key: keyof Cmp): boolean { + return this.#property?.wrapped.has(key) || false; + } + + /** + * Checks whether the component property of the given `key` is deactivated from detection. + * @param key The property name of `keyof Cmp` to check. + * @returns The return value is a `boolean` type indicating whether the property is deactivated from the detection. + * @angularpackage + */ + public isDeactivated(key: keyof Cmp): boolean { + return this.#deactivated.has(key); + } + + /** + * Removes properties given in the `keys` from the detectable, which means they don't perform `detectChanges()` on set. + * @param keys An array of `keyof Cmp` to remove from the detectable. + * @returns The return value is an instance of `ChangeDetector` for the chaining purpose. + * @angularpackage + */ + public remove(...keys: (keyof Cmp)[]): this { + this.#property?.unwrap(...keys); + return this; + } + + /** + * Sets detection on `set` to the component properties of the given `keys` making them detectable, which means each performs + * `detectChanges()` on set. + * @param keys The component keys of an `Array` to set detection. + * @param callbackFn Optional callback function to inject with detection. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public set( + keys: Keys[], + callbackFn?: SetterCallback + ): this { + this.#property?.wrap( + keys, + undefined, + this.#defineDetectionCallback(callbackFn) + ); + return this; + } + + /** + * Defines function with detection and optional callback function to inject to property setter. + * @param callbackFn Callback function of generic type `SetterCallback` to inject along with detection. + * @returns The return value is the function to detect changes on set in the specified property with optional callback function. + * @angularpackage + */ + #defineDetectionCallback( + callbackFn?: SetterCallback + ): SetterCallback { + return (value: Cmp[Key], oldValue: Cmp[Key], key: Key, instance: Cmp) => { + typeof callbackFn === 'function' && + callbackFn(value, oldValue, key, instance); + this.detection === true && + this.deactivated.has(key) === false && + this.#changeDetectorRef?.detectChanges(); + }; + } +} diff --git a/src/type/detection-properties.type.ts b/src/type/detection-properties.type.ts new file mode 100644 index 0000000..b945be0 --- /dev/null +++ b/src/type/detection-properties.type.ts @@ -0,0 +1,12 @@ +/** + * + */ +export type DetectionProperties = Partial>; From aa3b864eaaf4cdc7e6b6d14c6cb640d06f0bd653 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:34:34 +0000 Subject: [PATCH 11/22] chore(.gitignore): add. --- .gitignore | 132 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1255997 --- /dev/null +++ b/.gitignore @@ -0,0 +1,132 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* +.pnpm-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional stylelint cache +.stylelintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variable files +.env +.env.development.local +.env.test.local +.env.production.local +.env.local + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# vuepress v2.x temp and cache directory +.temp +.cache + +# Docusaurus cache and generated files +.docusaurus + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +temp \ No newline at end of file From 92a43e6bc3b75424c8cc43cec3a0661ee39480a3 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:35:05 +0000 Subject: [PATCH 12/22] chore(ng-package): update. --- ng-package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ng-package.json b/ng-package.json index a5fa57b..f64a705 100644 --- a/ng-package.json +++ b/ng-package.json @@ -1,6 +1,6 @@ { "$schema": "../../node_modules/ng-packagr/ng-package.schema.json", - "dest": "../../dist/change-detection", + "dest": "../../dist/detection", "lib": { "entryFile": "src/public-api.ts" } From d0bee44b590851219f1757a3cf069e091b1999b3 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:35:18 +0000 Subject: [PATCH 13/22] chore(package): update. --- package-lock.json | 2340 +++++++++++++++++++++++++++++++++++++++++++++ package.json | 63 +- 2 files changed, 2395 insertions(+), 8 deletions(-) create mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..21fe9ae --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2340 @@ +{ + "name": "@angular-package/detection", + "version": "1.0.0-alpha", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@angular-package/detection", + "version": "1.0.0-alpha", + "funding": [ + { + "type": "individual", + "url": "https://checkout.revolut.com/pay/048b10a3-0e10-42c8-a917-e3e9cb4c8e29" + }, + { + "type": "individual", + "url": "https://docs.angular-package.dev/donate/cryptocurrency" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/angularpackage" + }, + { + "type": "github", + "url": "https://github.com/sponsors/angular-package" + } + ], + "license": "MIT", + "devDependencies": { + "stylelint": "^15.10.3", + "stylelint-config-prettier-scss": "^1.0.0", + "stylelint-config-standard-scss": "^11.0.0", + "stylelint-order": "^6.0.3" + }, + "peerDependencies": { + "@angular-package/property": "^1.0.2-alpha" + } + }, + "node_modules/@angular-package/property": { + "version": "1.0.2-alpha", + "resolved": "https://registry.npmjs.org/@angular-package/property/-/property-1.0.2-alpha.tgz", + "integrity": "sha512-kI69k1y5myi/h02hMr+2r570Qq5cMnX/1F09Wd7pXN919/KjbsFiOPMnIP0v7nRoSDBUEcfL/vFby+OdXzbO/w==", + "funding": [ + { + "type": "individual", + "url": "https://checkout.revolut.com/pay/048b10a3-0e10-42c8-a917-e3e9cb4c8e29" + }, + { + "type": "individual", + "url": "https://docs.angular-package.dev/donate/cryptocurrency" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/angularpackage" + }, + { + "type": "github", + "url": "https://github.com/sponsors/angular-package" + } + ], + "license": "MIT", + "peer": true + }, + "node_modules/@babel/code-frame": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.25.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "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==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^2.4.1" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + } + }, + "node_modules/@csstools/media-query-list-parser": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", + "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": "^14 || ^16 || >=18" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.13" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/balanced-match": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", + "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", + "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/css-functions-list": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12 || >=16" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", + "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz", + "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", + "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "global-prefix": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/import-lazy": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", + "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", + "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true, + "license": "ISC" + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/known-css-properties": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "dev": true, + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/meow": { + "version": "10.1.5", + "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", + "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-resolve-nested-selector": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true, + "license": "MIT" + }, + "node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-scss": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", + "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-scss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.4.29" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-sorting": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-sorting/-/postcss-sorting-8.0.2.tgz", + "integrity": "sha512-M9dkSrmU00t/jK7rF6BZSZauA5MAaBW4i5EnJXspMwt4iqTh/L9j6fgMnbElEOfyRyfLfVbIHj/R52zHzAPe1Q==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "postcss": "^8.4.20" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", + "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", + "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/redent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", + "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", + "dev": true, + "license": "ISC" + }, + "node_modules/stylelint": { + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", + "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-parser-algorithms": "^2.3.1", + "@csstools/css-tokenizer": "^2.2.0", + "@csstools/media-query-list-parser": "^2.1.4", + "@csstools/selector-specificity": "^3.0.0", + "balanced-match": "^2.0.0", + "colord": "^2.9.3", + "cosmiconfig": "^8.2.0", + "css-functions-list": "^3.2.1", + "css-tree": "^2.3.1", + "debug": "^4.3.4", + "fast-glob": "^3.3.1", + "fastest-levenshtein": "^1.0.16", + "file-entry-cache": "^7.0.0", + "global-modules": "^2.0.0", + "globby": "^11.1.0", + "globjoin": "^0.1.4", + "html-tags": "^3.3.1", + "ignore": "^5.2.4", + "import-lazy": "^4.0.0", + "imurmurhash": "^0.1.4", + "is-plain-object": "^5.0.0", + "known-css-properties": "^0.29.0", + "mathml-tag-names": "^2.1.3", + "meow": "^10.1.5", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.28", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^6.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "resolve-from": "^5.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "style-search": "^0.1.0", + "supports-hyperlinks": "^3.0.0", + "svg-tags": "^1.0.0", + "table": "^6.8.1", + "write-file-atomic": "^5.0.1" + }, + "bin": { + "stylelint": "bin/stylelint.mjs" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + } + }, + "node_modules/stylelint-config-prettier-scss": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-prettier-scss/-/stylelint-config-prettier-scss-1.0.0.tgz", + "integrity": "sha512-Gr2qLiyvJGKeDk0E/+awNTrZB/UtNVPLqCDOr07na/sLekZwm26Br6yYIeBYz3ulsEcQgs5j+2IIMXCC+wsaQA==", + "dev": true, + "license": "MIT", + "bin": { + "stylelint-config-prettier-scss": "bin/check.js", + "stylelint-config-prettier-scss-check": "bin/check.js" + }, + "engines": { + "node": "14.* || 16.* || >= 18" + }, + "peerDependencies": { + "stylelint": ">=15.0.0" + } + }, + "node_modules/stylelint-config-recommended": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", + "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "stylelint": "^15.10.0" + } + }, + "node_modules/stylelint-config-recommended-scss": { + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-13.1.0.tgz", + "integrity": "sha512-8L5nDfd+YH6AOoBGKmhH8pLWF1dpfY816JtGMePcBqqSsLU+Ysawx44fQSlMOJ2xTfI9yTGpup5JU77c17w1Ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-scss": "^4.0.9", + "stylelint-config-recommended": "^13.0.0", + "stylelint-scss": "^5.3.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^15.10.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/stylelint-config-standard": { + "version": "34.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-34.0.0.tgz", + "integrity": "sha512-u0VSZnVyW9VSryBG2LSO+OQTjN7zF9XJaAJRX/4EwkmU0R2jYwmBSN10acqZisDitS0CLiEiGjX7+Hrq8TAhfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "stylelint-config-recommended": "^13.0.0" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "stylelint": "^15.10.0" + } + }, + "node_modules/stylelint-config-standard-scss": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-11.1.0.tgz", + "integrity": "sha512-5gnBgeNTgRVdchMwiFQPuBOtj9QefYtfXiddrOMJA2pI22zxt6ddI2s+e5Oh7/6QYl7QLJujGnaUR5YyGq72ow==", + "dev": true, + "license": "MIT", + "dependencies": { + "stylelint-config-recommended-scss": "^13.1.0", + "stylelint-config-standard": "^34.0.0" + }, + "peerDependencies": { + "postcss": "^8.3.3", + "stylelint": "^15.10.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + } + } + }, + "node_modules/stylelint-order": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/stylelint-order/-/stylelint-order-6.0.4.tgz", + "integrity": "sha512-0UuKo4+s1hgQ/uAxlYU4h0o0HS4NiQDud0NAUNI0aa8FJdmYHA5ZZTFHiV5FpmE3071e9pZx5j0QpVJW5zOCUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss": "^8.4.32", + "postcss-sorting": "^8.0.2" + }, + "peerDependencies": { + "stylelint": "^14.0.0 || ^15.0.0 || ^16.0.1" + } + }, + "node_modules/stylelint-scss": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.2.tgz", + "integrity": "sha512-4LzLaayFhFyneJwLo0IUa8knuIvj+zF0vBFueQs4e3tEaAMIQX8q5th8ziKkgOavr6y/y9yoBe+RXN/edwLzsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "known-css-properties": "^0.29.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "stylelint": "^14.5.1 || ^15.0.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-hyperlinks": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", + "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-hyperlinks/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/table": { + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-newlines": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", + "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-fest": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json index 113a1c4..2675aae 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,58 @@ { - "name": "change-detection", - "version": "0.0.1", - "peerDependencies": { - "@angular/common": "^13.2.0", - "@angular/core": "^13.2.0" + "name": "@angular-package/detection", + "version": "1.0.0-alpha", + "author": "@angular-package ", + "description": "Detection in property on demand to improve application performance.", + "main": "./index.scss", + "license": "MIT", + "publishConfig": { + "access": "public", + "registry": "https://registry.npmjs.org" + }, + "devDependencies": { + "stylelint": "^15.10.3", + "stylelint-config-prettier-scss": "^1.0.0", + "stylelint-config-standard-scss": "^11.0.0", + "stylelint-order": "^6.0.3" + }, + "scripts": { + "prepublishOnly": "npm install rimraf && npm run pkg && npm run clean", + "pkg": "npm pkg delete dependencies", + "clean": "./node_modules/rimraf/dist/esm/bin.mjs ./node_modules && npm pkg delete scripts", }, - "dependencies": { - "tslib": "^2.3.0" + "repository": { + "type": "git", + "url": "git+https://github.com/angular-package/detection.git" + }, + "bugs": { + "url": "https://github.com/angular-package/detection/issues" + }, + "keywords": [ + "@angular-package", + "change detection", + "detection", + "detector", + "detection strategy" + ], + "funding": [ + { + "type": "individual", + "url": "https://checkout.revolut.com/pay/048b10a3-0e10-42c8-a917-e3e9cb4c8e29" + }, + { + "type": "individual", + "url": "https://docs.angular-package.dev/donate/cryptocurrency" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/angularpackage" + }, + { + "type": "github", + "url": "https://github.com/sponsors/angular-package" + } + ], + "peerDependencies": { + "@angular-package/property": "^1.0.2-alpha" } -} \ No newline at end of file +} From 08acb622e57cdff1c0f7c217f1f34a453ede2c65 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:35:28 +0000 Subject: [PATCH 14/22] test: change karma config. --- karma.conf.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/karma.conf.js b/karma.conf.js index 78b2461..b2c2711 100644 --- a/karma.conf.js +++ b/karma.conf.js @@ -25,7 +25,7 @@ module.exports = function (config) { suppressAll: true // removes the duplicated traces }, coverageReporter: { - dir: require('path').join(__dirname, '../../coverage/change-detection'), + dir: require('path').join(__dirname, '../../coverage/detection'), subdir: '.', reporters: [ { type: 'html' }, From 5eb4ed258a7cdd5488f7d9c00279123a8378abde Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:41:11 +0000 Subject: [PATCH 15/22] demo: add. --- demo/.browserslistrc | 16 + demo/.editorconfig | 16 + demo/.gitignore | 44 + demo/.vscode/extensions.json | 4 + demo/.vscode/launch.json | 20 + demo/.vscode/settings.json | 7 + demo/.vscode/tasks.json | 42 + demo/README.md | 27 + demo/angular.json | 110 + demo/karma.conf.js | 44 + demo/package-lock.json | 12308 ++++++++++++++++ demo/package.json | 42 + .../app/@detection/change-detection.class.ts | 212 + .../app/@detection/change-detector.class.ts | 137 + .../interface/detector-options.interface.ts | 9 + demo/src/app/@detection/interface/index.ts | 1 + .../lib/change-detection-helper.abstract.ts | 20 + .../lib/change-detection.decorator.ts | 26 + .../@detection/lib/configure-detector.func.ts | 75 + .../@detection/lib/detector-options.const.ts | 12 + .../type/detection-properties.type.ts | 12 + demo/src/app/app-routing.module.ts | 15 + demo/src/app/app.component.html | 1 + demo/src/app/app.component.scss | 1 + demo/src/app/app.component.spec.ts | 35 + demo/src/app/app.component.ts | 18 + demo/src/app/app.module.ts | 28 + .../app/detection/detection.component.html | 8 + .../app/detection/detection.component.scss | 0 .../app/detection/detection.component.spec.ts | 23 + demo/src/app/detection/detection.component.ts | 45 + demo/src/assets/.gitkeep | 0 demo/src/environments/environment.prod.ts | 3 + demo/src/environments/environment.ts | 16 + demo/src/favicon.ico | Bin 0 -> 948 bytes demo/src/index.html | 13 + demo/src/main.ts | 12 + demo/src/polyfills.ts | 53 + demo/src/styles.scss | 1 + demo/src/test.ts | 26 + demo/tsconfig.app.json | 15 + demo/tsconfig.json | 33 + demo/tsconfig.spec.json | 18 + 43 files changed, 13548 insertions(+) create mode 100644 demo/.browserslistrc create mode 100644 demo/.editorconfig create mode 100644 demo/.gitignore create mode 100644 demo/.vscode/extensions.json create mode 100644 demo/.vscode/launch.json create mode 100644 demo/.vscode/settings.json create mode 100644 demo/.vscode/tasks.json create mode 100644 demo/README.md create mode 100644 demo/angular.json create mode 100644 demo/karma.conf.js create mode 100644 demo/package-lock.json create mode 100644 demo/package.json create mode 100644 demo/src/app/@detection/change-detection.class.ts create mode 100644 demo/src/app/@detection/change-detector.class.ts create mode 100644 demo/src/app/@detection/interface/detector-options.interface.ts create mode 100644 demo/src/app/@detection/interface/index.ts create mode 100644 demo/src/app/@detection/lib/change-detection-helper.abstract.ts create mode 100644 demo/src/app/@detection/lib/change-detection.decorator.ts create mode 100644 demo/src/app/@detection/lib/configure-detector.func.ts create mode 100644 demo/src/app/@detection/lib/detector-options.const.ts create mode 100644 demo/src/app/@detection/type/detection-properties.type.ts create mode 100644 demo/src/app/app-routing.module.ts create mode 100644 demo/src/app/app.component.html create mode 100644 demo/src/app/app.component.scss create mode 100644 demo/src/app/app.component.spec.ts create mode 100644 demo/src/app/app.component.ts create mode 100644 demo/src/app/app.module.ts create mode 100644 demo/src/app/detection/detection.component.html create mode 100644 demo/src/app/detection/detection.component.scss create mode 100644 demo/src/app/detection/detection.component.spec.ts create mode 100644 demo/src/app/detection/detection.component.ts create mode 100644 demo/src/assets/.gitkeep create mode 100644 demo/src/environments/environment.prod.ts create mode 100644 demo/src/environments/environment.ts create mode 100644 demo/src/favicon.ico create mode 100644 demo/src/index.html create mode 100644 demo/src/main.ts create mode 100644 demo/src/polyfills.ts create mode 100644 demo/src/styles.scss create mode 100644 demo/src/test.ts create mode 100644 demo/tsconfig.app.json create mode 100644 demo/tsconfig.json create mode 100644 demo/tsconfig.spec.json diff --git a/demo/.browserslistrc b/demo/.browserslistrc new file mode 100644 index 0000000..4f9ac26 --- /dev/null +++ b/demo/.browserslistrc @@ -0,0 +1,16 @@ +# This file is used by the build system to adjust CSS and JS output to support the specified browsers below. +# For additional information regarding the format and rule options, please see: +# https://github.com/browserslist/browserslist#queries + +# For the full list of supported browsers by the Angular framework, please see: +# https://angular.io/guide/browser-support + +# You can see what browsers were selected by your queries by running: +# npx browserslist + +last 1 Chrome version +last 1 Firefox version +last 2 Edge major versions +last 2 Safari major versions +last 2 iOS major versions +Firefox ESR diff --git a/demo/.editorconfig b/demo/.editorconfig new file mode 100644 index 0000000..59d9a3a --- /dev/null +++ b/demo/.editorconfig @@ -0,0 +1,16 @@ +# Editor configuration, see https://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.ts] +quote_type = single + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/demo/.gitignore b/demo/.gitignore new file mode 100644 index 0000000..9b9449a --- /dev/null +++ b/demo/.gitignore @@ -0,0 +1,44 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db + +temp \ No newline at end of file diff --git a/demo/.vscode/extensions.json b/demo/.vscode/extensions.json new file mode 100644 index 0000000..77b3745 --- /dev/null +++ b/demo/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=827846 + "recommendations": ["angular.ng-template"] +} diff --git a/demo/.vscode/launch.json b/demo/.vscode/launch.json new file mode 100644 index 0000000..740e35a --- /dev/null +++ b/demo/.vscode/launch.json @@ -0,0 +1,20 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "name": "ng serve", + "type": "pwa-chrome", + "request": "launch", + "preLaunchTask": "npm: start", + "url": "http://localhost:4200/" + }, + { + "name": "ng test", + "type": "chrome", + "request": "launch", + "preLaunchTask": "npm: test", + "url": "http://localhost:9876/debug.html" + } + ] +} diff --git a/demo/.vscode/settings.json b/demo/.vscode/settings.json new file mode 100644 index 0000000..48a70b7 --- /dev/null +++ b/demo/.vscode/settings.json @@ -0,0 +1,7 @@ +{ + "cSpell.words": [ + "idbconfig", + "Indexeddb", + "Whitespaces" + ] +} \ No newline at end of file diff --git a/demo/.vscode/tasks.json b/demo/.vscode/tasks.json new file mode 100644 index 0000000..a298b5b --- /dev/null +++ b/demo/.vscode/tasks.json @@ -0,0 +1,42 @@ +{ + // For more information, visit: https://go.microsoft.com/fwlink/?LinkId=733558 + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "start", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + }, + { + "type": "npm", + "script": "test", + "isBackground": true, + "problemMatcher": { + "owner": "typescript", + "pattern": "$tsc", + "background": { + "activeOnStart": true, + "beginsPattern": { + "regexp": "(.*?)" + }, + "endsPattern": { + "regexp": "bundle generation complete" + } + } + } + } + ] +} diff --git a/demo/README.md b/demo/README.md new file mode 100644 index 0000000..ebf9745 --- /dev/null +++ b/demo/README.md @@ -0,0 +1,27 @@ +# Indexeddb + +This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 14.2.13. + +## Development server + +Run `ng serve` for a dev server. Navigate to `http://localhost:4200/`. The application will automatically reload if you change any of the source files. + +## Code scaffolding + +Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`. + +## Build + +Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory. + +## Running unit tests + +Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io). + +## Running end-to-end tests + +Run `ng e2e` to execute the end-to-end tests via a platform of your choice. To use this command, you need to first add a package that implements end-to-end testing capabilities. + +## Further help + +To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page. diff --git a/demo/angular.json b/demo/angular.json new file mode 100644 index 0000000..313e68a --- /dev/null +++ b/demo/angular.json @@ -0,0 +1,110 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "indexeddb": { + "projectType": "application", + "schematics": { + "@schematics/angular:component": { + "style": "scss" + } + }, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/indexeddb", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.app.json", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.prod.ts" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "indexeddb:build:production" + }, + "development": { + "browserTarget": "indexeddb:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "indexeddb:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "main": "src/test.ts", + "polyfills": "src/polyfills.ts", + "tsConfig": "tsconfig.spec.json", + "karmaConfig": "karma.conf.js", + "inlineStyleLanguage": "scss", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "src/styles.scss" + ], + "scripts": [] + } + } + } + } + }, + "cli": { + "analytics": false + } +} diff --git a/demo/karma.conf.js b/demo/karma.conf.js new file mode 100644 index 0000000..6d294b4 --- /dev/null +++ b/demo/karma.conf.js @@ -0,0 +1,44 @@ +// Karma configuration file, see link for more information +// https://karma-runner.github.io/1.0/config/configuration-file.html + +module.exports = function (config) { + config.set({ + basePath: '', + frameworks: ['jasmine', '@angular-devkit/build-angular'], + plugins: [ + require('karma-jasmine'), + require('karma-chrome-launcher'), + require('karma-jasmine-html-reporter'), + require('karma-coverage'), + require('@angular-devkit/build-angular/plugins/karma') + ], + client: { + jasmine: { + // you can add configuration options for Jasmine here + // the possible options are listed at https://jasmine.github.io/api/edge/Configuration.html + // for example, you can disable the random execution with `random: false` + // or set a specific seed with `seed: 4321` + }, + clearContext: false // leave Jasmine Spec Runner output visible in browser + }, + jasmineHtmlReporter: { + suppressAll: true // removes the duplicated traces + }, + coverageReporter: { + dir: require('path').join(__dirname, './coverage/indexeddb'), + subdir: '.', + reporters: [ + { type: 'html' }, + { type: 'text-summary' } + ] + }, + reporters: ['progress', 'kjhtml'], + port: 9876, + colors: true, + logLevel: config.LOG_INFO, + autoWatch: true, + browsers: ['Chrome'], + singleRun: false, + restartOnFileChange: true + }); +}; diff --git a/demo/package-lock.json b/demo/package-lock.json new file mode 100644 index 0000000..12abb35 --- /dev/null +++ b/demo/package-lock.json @@ -0,0 +1,12308 @@ +{ + "name": "indexeddb", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "indexeddb", + "version": "0.0.0", + "dependencies": { + "@angular-package/indexeddb": "^1.0.1-alpha", + "@angular/animations": "^14.2.0", + "@angular/common": "^14.2.0", + "@angular/compiler": "^14.2.0", + "@angular/core": "^14.2.0", + "@angular/forms": "^14.2.0", + "@angular/platform-browser": "^14.2.0", + "@angular/platform-browser-dynamic": "^14.2.0", + "@angular/router": "^14.2.0", + "rxjs": "^7.8.1", + "tslib": "^2.3.0", + "zone.js": "~0.11.4" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^14.2.13", + "@angular/cli": "~14.2.13", + "@angular/compiler-cli": "^14.2.0", + "@types/jasmine": "~4.0.0", + "jasmine-core": "~4.3.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "typescript": "~4.7.2" + }, + "peerDependencies": { + "@angular-package/spectre.css": "^1.0.0-alpha.3.0.1", + "@angular/material": "^13.3.9" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==", + "dev": true + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1402.13", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1402.13.tgz", + "integrity": "sha512-n0ISBuvkZHoOpAzuAZql1TU9VLHUE9e/a9g4VNOPHewjMzpN02VqeGKvJfOCKtzkCs6gVssIlILm2/SXxkIFxQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "14.2.13", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/architect/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/architect/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular": { + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-14.2.13.tgz", + "integrity": "sha512-FJZKQ3xYFvEJ807sxVy4bCVyGU2NMl3UUPNfLIdIdzwwDEP9tx/cc+c4VtVPEZZfU8jVenu8XOvL6L0vpjt3yg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.0", + "@angular-devkit/architect": "0.1402.13", + "@angular-devkit/build-webpack": "0.1402.13", + "@angular-devkit/core": "14.2.13", + "@babel/core": "7.18.10", + "@babel/generator": "7.18.12", + "@babel/helper-annotate-as-pure": "7.18.6", + "@babel/plugin-proposal-async-generator-functions": "7.18.10", + "@babel/plugin-transform-async-to-generator": "7.18.6", + "@babel/plugin-transform-runtime": "7.18.10", + "@babel/preset-env": "7.18.10", + "@babel/runtime": "7.18.9", + "@babel/template": "7.18.10", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "14.2.13", + "ansi-colors": "4.1.3", + "babel-loader": "8.2.5", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "^4.9.1", + "cacache": "16.1.2", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.16", + "css-loader": "6.7.1", + "esbuild-wasm": "0.15.5", + "glob": "8.0.3", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.1.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.0.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "mini-css-extract-plugin": "2.6.1", + "minimatch": "5.1.0", + "open": "8.4.0", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "6.0.1", + "piscina": "3.2.0", + "postcss": "8.4.31", + "postcss-import": "15.0.0", + "postcss-loader": "7.0.1", + "postcss-preset-env": "7.8.0", + "regenerator-runtime": "0.13.9", + "resolve-url-loader": "5.0.0", + "rxjs": "6.6.7", + "sass": "1.54.4", + "sass-loader": "13.0.2", + "semver": "7.5.3", + "source-map-loader": "4.0.0", + "source-map-support": "0.5.21", + "stylus": "0.59.0", + "stylus-loader": "7.0.0", + "terser": "5.14.2", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.4.0", + "webpack": "5.76.1", + "webpack-dev-middleware": "5.3.3", + "webpack-dev-server": "4.11.0", + "webpack-merge": "5.8.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.15.5" + }, + "peerDependencies": { + "@angular/compiler-cli": "^14.0.0", + "@angular/localize": "^14.0.0", + "@angular/service-worker": "^14.0.0", + "karma": "^6.3.0", + "ng-packagr": "^14.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.6.2 <4.9" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "dev": true + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1402.13", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1402.13.tgz", + "integrity": "sha512-K27aJmuw86ZOdiu5PoGeGDJ2v7g2ZCK0bGwc8jzkjTLRfvd4FRKIIZumGv3hbQ3vQRLikiU6WMDRTFyCZky/EA==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1402.13", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/build-webpack/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/core": { + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-14.2.13.tgz", + "integrity": "sha512-aIefeZcbjghQg/V6U9CTLtyB5fXDJ63KwYqVYkWP+i0XriS5A9puFgq2u/OVsWxAfYvqpDqp5AdQ0g0bi3CAsA==", + "dev": true, + "dependencies": { + "ajv": "8.11.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.1.0", + "rxjs": "6.6.7", + "source-map": "0.7.4" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/core/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/core/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-devkit/schematics": { + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-14.2.13.tgz", + "integrity": "sha512-2zczyeNzeBcrT2HOysv52X9SH3tZoHfWJvVf6H0SIa74rfDKEl7hFpKNXnh3x8sIMLj5mZn05n5RCqGxCczcIg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "14.2.13", + "jsonc-parser": "3.1.0", + "magic-string": "0.26.2", + "ora": "5.4.1", + "rxjs": "6.6.7" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@angular-devkit/schematics/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/@angular-package/indexeddb": { + "version": "1.0.1-alpha", + "resolved": "https://registry.npmjs.org/@angular-package/indexeddb/-/indexeddb-1.0.1-alpha.tgz", + "integrity": "sha512-iBfCC4+SUz8YOBf0o3KyBjhoX7K+2YtwpD8iAyATBr6poDedaBRHzo1Ir+3j6ZoOXuA6nNSO60eOX8/IkRnNkg==", + "funding": [ + { + "type": "individual", + "url": "https://checkout.revolut.com/pay/048b10a3-0e10-42c8-a917-e3e9cb4c8e29" + }, + { + "type": "individual", + "url": "https://docs.angular-package.dev/donate/cryptocurrency" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/angularpackage" + }, + { + "type": "github", + "url": "https://github.com/sponsors/angular-package" + } + ], + "license": "MIT" + }, + "node_modules/@angular-package/spectre.css": { + "version": "1.0.0-alpha.3.0.1", + "resolved": "https://registry.npmjs.org/@angular-package/spectre.css/-/spectre.css-1.0.0-alpha.3.0.1.tgz", + "integrity": "sha512-//s8H7DcbnADVscNeD9LvHiKqNAUQNeehchhS7ydFKQJ0oymDCFpVMatk+UbSgpPAzPXnKfr8nTi72a+r3iyJw==", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + } + }, + "node_modules/@angular/animations": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-14.3.0.tgz", + "integrity": "sha512-QoBcIKy1ZiU+4qJsAh5Ls20BupWiXiZzKb0s6L9/dntPt5Msr4Ao289XR2P6O1L+kTsCprH9Kt41zyGQ/bkRqg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/core": "14.3.0" + } + }, + "node_modules/@angular/cdk": { + "version": "13.3.9", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-13.3.9.tgz", + "integrity": "sha512-XCuCbeuxWFyo3EYrgEYx7eHzwl76vaWcxtWXl00ka8d+WAOtMQ6Tf1D98ybYT5uwF9889fFpXAPw98mVnlo3MA==", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^5.0.0" + }, + "peerDependencies": { + "@angular/common": "^13.0.0 || ^14.0.0-0", + "@angular/core": "^13.0.0 || ^14.0.0-0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cdk/node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "optional": true, + "peer": true + }, + "node_modules/@angular/cli": { + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-14.2.13.tgz", + "integrity": "sha512-I5EepRem2CCyS3GDzQxZ2ZrqQwVqoGoLY+ZQhsK1QGWUnUyFOjbv3OlUGxRUYwcedu19V1EBAKjmQ96HzMIcVQ==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1402.13", + "@angular-devkit/core": "14.2.13", + "@angular-devkit/schematics": "14.2.13", + "@schematics/angular": "14.2.13", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "debug": "4.3.4", + "ini": "3.0.0", + "inquirer": "8.2.4", + "jsonc-parser": "3.1.0", + "npm-package-arg": "9.1.0", + "npm-pick-manifest": "7.0.1", + "open": "8.4.0", + "ora": "5.4.1", + "pacote": "13.6.2", + "resolve": "1.22.1", + "semver": "7.5.3", + "symbol-observable": "4.0.0", + "uuid": "8.3.2", + "yargs": "17.5.1" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/common": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-14.3.0.tgz", + "integrity": "sha512-pV9oyG3JhGWeQ+TFB0Qub6a1VZWMNZ6/7zEopvYivdqa5yDLLDSBRWb6P80RuONXyGnM1pa7l5nYopX+r/23GQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/core": "14.3.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-14.3.0.tgz", + "integrity": "sha512-E15Rh0t3vA+bctbKnBCaDmLvc3ix+ZBt6yFZmhZalReQ+KpOlvOJv+L9oiFEgg+rYVl2QdvN7US1fvT0PqswLw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/core": "14.3.0" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-14.3.0.tgz", + "integrity": "sha512-eoKpKdQ2X6axMgzcPUMZVYl3bIlTMzMeTo5V29No4BzgiUB+QoOTYGNJZkGRyqTNpwD9uSBJvmT2vG9+eC4ghQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.17.2", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "dependency-graph": "^0.11.0", + "magic-string": "^0.26.0", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "sourcemap-codec": "^1.4.8", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/main-ngcc.js" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/compiler": "14.3.0", + "typescript": ">=4.6.2 <4.9" + } + }, + "node_modules/@angular/core": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-14.3.0.tgz", + "integrity": "sha512-wYiwItc0Uyn4FWZ/OAx/Ubp2/WrD3EgUJ476y1XI7yATGPF8n9Ld5iCXT08HOvc4eBcYlDfh90kTXR6/MfhzdQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.11.4 || ~0.12.0" + } + }, + "node_modules/@angular/forms": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-14.3.0.tgz", + "integrity": "sha512-fBZZC2UFMom2AZPjGQzROPXFWO6kvCsPDKctjJwClVC8PuMrkm+RRyiYRdBbt2qxWHEqOZM2OCQo73xUyZOYHw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/common": "14.3.0", + "@angular/core": "14.3.0", + "@angular/platform-browser": "14.3.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/material": { + "version": "13.3.9", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-13.3.9.tgz", + "integrity": "sha512-FU8lcMgo+AL8ckd27B4V097ZPoIZNRHiCe3wpgkImT1qC0YwcyXZVn0MqQTTFSdC9a/aI8wPm3AbTClJEVw5Vw==", + "peer": true, + "dependencies": { + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^13.0.0 || ^14.0.0-0", + "@angular/cdk": "13.3.9", + "@angular/common": "^13.0.0 || ^14.0.0-0", + "@angular/core": "^13.0.0 || ^14.0.0-0", + "@angular/forms": "^13.0.0 || ^14.0.0-0", + "@angular/platform-browser": "^13.0.0 || ^14.0.0-0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-14.3.0.tgz", + "integrity": "sha512-w9Y3740UmTz44T0Egvc+4QV9sEbO61L+aRHbpkLTJdlEGzHByZvxJmJyBYmdqeyTPwc/Zpy7c02frlpfAlyB7A==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/animations": "14.3.0", + "@angular/common": "14.3.0", + "@angular/core": "14.3.0" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-14.3.0.tgz", + "integrity": "sha512-rneZiMrIiYRhrkQvdL40E2ErKRn4Zdo6EtjBM9pAmWeyoM8oMnOZb9gz5vhrkNWg06kVMVg0yKqluP5How7j3A==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/common": "14.3.0", + "@angular/compiler": "14.3.0", + "@angular/core": "14.3.0", + "@angular/platform-browser": "14.3.0" + } + }, + "node_modules/@angular/router": { + "version": "14.3.0", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-14.3.0.tgz", + "integrity": "sha512-uip0V7w7k7xyxxpTPbr7EuMnYLj3FzJrwkLVJSEw3TMMGHt5VU5t4BBa9veGZOta2C205XFrTAHnp8mD+XYY1w==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0" + }, + "peerDependencies": { + "@angular/common": "14.3.0", + "@angular/core": "14.3.0", + "@angular/platform-browser": "14.3.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.10.tgz", + "integrity": "sha512-JQM6k6ENcBFKVtWvLavlvi/mPcpYZ3+R+2EySDEMSMbp7Mn4FexlbbJVrx2R7Ijhr01T8gyqrOaABWIOgxeUyw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.18.10", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-module-transforms": "^7.18.9", + "@babel/helpers": "^7.18.9", + "@babel/parser": "^7.18.10", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.18.10", + "@babel/types": "^7.18.10", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.18.12", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.12.tgz", + "integrity": "sha512-dfQ8ebCN98SvyL7IxNMCUtZQSq5R7kxgN+r8qYTGDmmSion1hX2C0zq2yo1bsCDhXixokv1SAWTZUMYbO/V5zg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.10", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "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==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.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==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.2", + "@babel/helper-validator-option": "^7.24.8", + "browserslist": "^4.23.1", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "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", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz", + "integrity": "sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + }, + "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==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.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==", + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.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==", + "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==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-wrap-function": "^7.25.0", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator/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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.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==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.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==", + "dev": true, + "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==", + "dev": true, + "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==", + "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==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function/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==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "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==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.0", + "@babel/types": "^7.25.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers/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==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.6.tgz", + "integrity": "sha512-trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.6" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "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==", + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.18.10.tgz", + "integrity": "sha512-1mFuY2TOsR1hxbjCo4QL+qlIjV07p4H4EUYw2J/WCqsvFV6V9X9z9YhXbWndc/4fw+hYGlDT7egYxliMp5O6Ew==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead.", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-static-block": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", + "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-static-block instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-proposal-dynamic-import": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", + "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-dynamic-import instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-export-namespace-from": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", + "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-export-namespace-from instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-json-strings instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", + "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-logical-assignment-operators instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", + "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-numeric-separator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", + "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead.", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-chaining": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", + "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-methods": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", + "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-unicode-property-regex instead.", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.18.6.tgz", + "integrity": "sha512-ARE5wZLKnTgPW7/1ftQmSi1CmkqqHo2DNmtztFhvgtOWSDfq0Cq9/9L+KnZNYSNrydBekhW3rwShduf59RoXag==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-remap-async-to-generator": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "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", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/template": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties/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==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/traverse": "^7.25.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.8", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-simple-access": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "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" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-replace-supers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.18.10.tgz", + "integrity": "sha512-q5mMeYAdfEbpBAgzl7tBre/la3LeCxmDO1+wMXRdPWbcoMjR3GiXlCLk7JBZVVye0bqTGNMbt0yYVXX1B1jEWQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.9", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "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==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.18.10.tgz", + "integrity": "sha512-wVxs1yjFdW3Z/XkNfXKoblxoHgbtUF7/l3PvvP4m02Qz9TZ6uZGxRVYjSQeR87oQmHco9zWitW5J82DJ7sCjvA==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.18.8", + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9", + "@babel/helper-validator-option": "^7.18.6", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-async-generator-functions": "^7.18.10", + "@babel/plugin-proposal-class-properties": "^7.18.6", + "@babel/plugin-proposal-class-static-block": "^7.18.6", + "@babel/plugin-proposal-dynamic-import": "^7.18.6", + "@babel/plugin-proposal-export-namespace-from": "^7.18.9", + "@babel/plugin-proposal-json-strings": "^7.18.6", + "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", + "@babel/plugin-proposal-numeric-separator": "^7.18.6", + "@babel/plugin-proposal-object-rest-spread": "^7.18.9", + "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", + "@babel/plugin-proposal-optional-chaining": "^7.18.9", + "@babel/plugin-proposal-private-methods": "^7.18.6", + "@babel/plugin-proposal-private-property-in-object": "^7.18.6", + "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", + "@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.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.18.6", + "@babel/plugin-transform-async-to-generator": "^7.18.6", + "@babel/plugin-transform-block-scoped-functions": "^7.18.6", + "@babel/plugin-transform-block-scoping": "^7.18.9", + "@babel/plugin-transform-classes": "^7.18.9", + "@babel/plugin-transform-computed-properties": "^7.18.9", + "@babel/plugin-transform-destructuring": "^7.18.9", + "@babel/plugin-transform-dotall-regex": "^7.18.6", + "@babel/plugin-transform-duplicate-keys": "^7.18.9", + "@babel/plugin-transform-exponentiation-operator": "^7.18.6", + "@babel/plugin-transform-for-of": "^7.18.8", + "@babel/plugin-transform-function-name": "^7.18.9", + "@babel/plugin-transform-literals": "^7.18.9", + "@babel/plugin-transform-member-expression-literals": "^7.18.6", + "@babel/plugin-transform-modules-amd": "^7.18.6", + "@babel/plugin-transform-modules-commonjs": "^7.18.6", + "@babel/plugin-transform-modules-systemjs": "^7.18.9", + "@babel/plugin-transform-modules-umd": "^7.18.6", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.18.6", + "@babel/plugin-transform-new-target": "^7.18.6", + "@babel/plugin-transform-object-super": "^7.18.6", + "@babel/plugin-transform-parameters": "^7.18.8", + "@babel/plugin-transform-property-literals": "^7.18.6", + "@babel/plugin-transform-regenerator": "^7.18.6", + "@babel/plugin-transform-reserved-words": "^7.18.6", + "@babel/plugin-transform-shorthand-properties": "^7.18.6", + "@babel/plugin-transform-spread": "^7.18.9", + "@babel/plugin-transform-sticky-regex": "^7.18.6", + "@babel/plugin-transform-template-literals": "^7.18.9", + "@babel/plugin-transform-typeof-symbol": "^7.18.9", + "@babel/plugin-transform-unicode-escapes": "^7.18.10", + "@babel/plugin-transform-unicode-regex": "^7.18.6", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.18.10", + "babel-plugin-polyfill-corejs2": "^0.3.2", + "babel-plugin-polyfill-corejs3": "^0.5.3", + "babel-plugin-polyfill-regenerator": "^0.4.0", + "core-js-compat": "^3.22.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@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.18.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", + "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "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==", + "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", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/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==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.6", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/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==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/parser": "^7.25.0", + "@babel/types": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.25.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.6.tgz", + "integrity": "sha512-/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.24.8", + "@babel/helper-validator-identifier": "^7.24.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@csstools/postcss-cascade-layers": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-1.1.1.tgz", + "integrity": "sha512-+KdYrpKC5TgomQr2DlZF4lDEpHcoxnj5IGddYYfBWJAKfj1JtuHUIqMa+E1pJJ+z3kvDViWMqyqPlG4Ja7amQA==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.2", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-color-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-1.1.1.tgz", + "integrity": "sha512-Bc0f62WmHdtRDjf5f3e2STwRAl89N2CLb+9iAwzrv4L2hncrbDwnQD9PCq0gtAt7pOI2leIV08HIBUd4jxD8cw==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-font-format-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-1.0.1.tgz", + "integrity": "sha512-ZgrlzuUAjXIOc2JueK0X5sZDjCtgimVp/O5CEqTcs5ShWBa6smhWYbS0x5cVc/+rycTDbjjzoP0KTDnUneZGOg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-hwb-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-1.0.2.tgz", + "integrity": "sha512-YHdEru4o3Rsbjmu6vHy4UKOXZD+Rn2zmkAmLRfPet6+Jz4Ojw8cbWxe1n42VaXQhD3CQUXXTooIy8OkVbUcL+w==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-ic-unit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-1.0.1.tgz", + "integrity": "sha512-Ot1rcwRAaRHNKC9tAqoqNZhjdYBzKk1POgWfhN4uCOE47ebGcLRqXjKkApVDpjifL6u2/55ekkpnFcp+s/OZUw==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-is-pseudo-class": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-2.0.7.tgz", + "integrity": "sha512-7JPeVVZHd+jxYdULl87lvjgvWldYu+Bc62s9vD/ED6/QTGjy0jy0US/f6BG53sVMTBJ1lzKZFpYmofBN9eaRiA==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-nested-calc": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-1.0.0.tgz", + "integrity": "sha512-JCsQsw1wjYwv1bJmgjKSoZNvf7R6+wuHDAbi5f/7MbFhl2d/+v+TvBTU4BJH3G1X1H87dHl0mh6TfYogbT/dJQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-normalize-display-values": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-1.0.1.tgz", + "integrity": "sha512-jcOanIbv55OFKQ3sYeFD/T0Ti7AMXc9nM1hZWu8m/2722gOTxFg7xYu4RDLJLeZmPUVQlGzo4jhzvTUq3x4ZUw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-oklab-function": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-1.1.1.tgz", + "integrity": "sha512-nJpJgsdA3dA9y5pgyb/UfEzE7W5Ka7u0CX0/HIMVBNWzWemdcTH3XwANECU6anWv/ao4vVNLTMxhiPNZsTK6iA==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-progressive-custom-properties": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-1.3.0.tgz", + "integrity": "sha512-ASA9W1aIy5ygskZYuWams4BzafD12ULvSypmaLJT2jvQ8G0M3I8PRQhC0h7mG0Z3LI05+agZjqSR9+K9yaQQjA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/@csstools/postcss-stepped-value-functions": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-1.0.1.tgz", + "integrity": "sha512-dz0LNoo3ijpTOQqEJLY8nyaapl6umbmDcgj4AD0lgVQ572b2eqA1iGZYTTWhrcrHztWDDRAX2DGYyw2VBjvCvQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-text-decoration-shorthand": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-1.0.0.tgz", + "integrity": "sha512-c1XwKJ2eMIWrzQenN0XbcfzckOLLJiczqy+YvfGmzoVXd7pT9FfObiSEfzs84bpE/VqfpEuAZ9tCRbZkZxxbdw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-trigonometric-functions": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-1.0.2.tgz", + "integrity": "sha512-woKaLO///4bb+zZC2s80l+7cm07M7268MsyG3M0ActXXEFi6SuhvriQYcb58iiKGbjwwIU7n45iRLEHypB47Og==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/postcss-unset-value": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-1.0.2.tgz", + "integrity": "sha512-c8J4roPBILnelAsdLr4XOAR/GsTm0GJi4XpcfvoWk3U6KiTCqiFYc63KhRMQQX35jYMp4Ao8Ij9+IZRgMfJp1g==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/@csstools/selector-specificity": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-2.2.0.tgz", + "integrity": "sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==", + "dev": true, + "engines": { + "node": "^14 || ^16 || >=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss-selector-parser": "^6.0.10" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.5.tgz", + "integrity": "sha512-UHkDFCfSGTuXq08oQltXxSZmH1TXyWsL+4QhZDWvvLl6mEJQqk3u7/wq1LjhrrAXYIllaTtRSzUXl4Olkf2J8A==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true + }, + "node_modules/@ngtools/webpack": { + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-14.2.13.tgz", + "integrity": "sha512-RQx/rGX7K/+R55x1R6Ax1JzyeHi8cW11dEXpzHWipyuSpusQLUN53F02eMB4VTakXsL3mFNWWy4bX3/LSq8/9w==", + "dev": true, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^14.0.0", + "typescript": ">=4.6.2 <4.9", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-3.0.2.tgz", + "integrity": "sha512-CAcd08y3DWBJqJDpfuVL0uijlq5oaXaOJEKHKc4wqrjd00gkvTZB+nFuLn+doOOKddaQS9JfqtNoFCO2LCvA3w==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-2.0.0.tgz", + "integrity": "sha512-doNI35wIe3bBaEgrlPfdJPaCpUR89pJWep4Hq3aRdh6gKazIVWfs0jHttvSSoq47ZXgC7h73kDsUl8AoIQUB+A==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-3.0.0.tgz", + "integrity": "sha512-s9SgS+p3a9Eohe68cSI3fi+hpcZUmXq5P7w0kMlAsWVtR7XbK3ptkZqKT2cK1zLDObJ3sR+8P59sJE0w/KTL1g==", + "dev": true, + "dependencies": { + "infer-owner": "^1.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-4.2.1.tgz", + "integrity": "sha512-7dqywvVudPSrRCW5nTHpHgeWnbBtz8cFkOuKrecm6ih+oO9ciydhWt6OF7HlqupRRmB8Q/gECVdB9LMfToJbRg==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@schematics/angular": { + "version": "14.2.13", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-14.2.13.tgz", + "integrity": "sha512-MLxTpTU3E8QACQ/5c0sENMR2gRiMXpGaKeD5IHY+3wyU2fUSJVB0QPU/l1WhoyZbX8N9ospBgf5UEG7taVF9rg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "14.2.13", + "@angular-devkit/schematics": "14.2.13", + "jsonc-parser": "3.1.0" + }, + "engines": { + "node": "^14.15.0 || >=16.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz", + "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", + "dev": true + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.17", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", + "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.5", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz", + "integrity": "sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.15", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.15.tgz", + "integrity": "sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.0.3.tgz", + "integrity": "sha512-Opp1LvvEuZdk8fSSvchK2mZwhVrsNT0JgJE9Di6MjnaIpmEXM8TLCPPrVtNTYh8+5MPdY8j9bAHMu2SSfwpZJg==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.7.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.0.tgz", + "integrity": "sha512-MOdOibwBs6KW1vfqz2uKMlxq5xAfAZ98SZjO8e3XnAbFnTJtAspqhWk7hrdSAs9/Y14ZWMiy7/MxMUzAOadYEw==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.12", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.12.tgz", + "integrity": "sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "deprecated": "Use your platform's native atob() and btoa() methods instead", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.3.tgz", + "integrity": "sha512-zKsXDh0XjnrUEW0mxIHLfjBfnXSMr5Q/goMe/fxpQnLm07mcOZiIZHBNWCMx60HmdvjxfXcalac0tfFg0wqxyw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.2", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", + "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtins": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", + "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.2.tgz", + "integrity": "sha512-Xx+xPlfCZIUHagysjjOAje9nRo8pRDczQCcXb4J2O0BLtH+xeVue6ba4y1kfJfQMAnM2mkcoMIAyOctlaRGWYA==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001663", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz", + "integrity": "sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/core-js-compat": { + "version": "3.38.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.38.1.tgz", + "integrity": "sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/critters": { + "version": "0.0.16", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.16.tgz", + "integrity": "sha512-JwjgmO6i3y6RWtLYmXwO5jMd+maZt8Tnfu7VVISmEWyQqfLpB8soBswf8/2bu6SBXxtKA68Al3c+qIG1ApT68A==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^4.2.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "postcss": "^8.3.7", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-blank-pseudo": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-3.0.3.tgz", + "integrity": "sha512-VS90XWtsHGqoM0t4KpH053c4ehxZ2E6HtGI7x68YFV0pTo/QmkV/YFA+NnlvK8guxZVNWGQhVNJGC39Q8XF4OQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-blank-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-has-pseudo": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-3.0.4.tgz", + "integrity": "sha512-Vse0xpR1K9MNlp2j5w1pgWIJtm1a8qS0JwS9goFYcImjlHEmywP9VUF05aGBXzGpDJF86QXk4L0ypBmwPhGArw==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "bin": { + "css-has-pseudo": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-loader": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.1.tgz", + "integrity": "sha512-yB5CNFa14MbPJcomwNh3wLThtkZgcNyI2bNMRt8iE5Z8Vwl7f8vQXFAzn2HDOJvtDq2NTZBUGMSUNNyrv3/+cw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.7", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-prefers-color-scheme": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-6.0.3.tgz", + "integrity": "sha512-4BqMbZksRkJQx2zAjrokiGMd07RqOa2IxIrrN10lyBe9xhn9DEvjUK79J6jkeiv9D9hQFXKb6g1jwU62jziJZA==", + "dev": true, + "bin": { + "css-prefers-color-scheme": "dist/cli.cjs" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssdb": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.11.2.tgz", + "integrity": "sha512-lhQ32TFkc1X4eTefGfYPvgovRSzIMofHkigfH8nWtyRL4XJLsRhJFreRvEgKzept7x1rjBuy3J/MurXLaFxW/A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + } + ] + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dependency-graph": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", + "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.28", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.28.tgz", + "integrity": "sha512-VufdJl+rzaKZoYVUijN13QcXVF5dWPZANeFTLNy+OSpHdDL5ynXTF35+60RSBbaQYB1ae723lQXHCrf4pyLsMw==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.1.tgz", + "integrity": "sha512-NEpDCw9hrvBW+hVEOK4T7v0jFJ++KgtPl4jKFwsZVfG1XhS0dCrSb3VMb9gPAd7VAdW52VT1EnaNiU2vM8C0og==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.2.1", + "ws": "~8.17.1" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.1.tgz", + "integrity": "sha512-QHuXVeZx9d+tIQAz/XztU0ZwZf2Agg9CcXcgE1rurqvdBeDBrpSwjl8/6XUqMg7tw2Y7uAdKb2sRv+bSEFqQ5A==", + "dev": true, + "dependencies": { + "punycode": "^1.4.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.5.tgz", + "integrity": "sha512-VSf6S1QVqvxfIsSKb3UKr3VhUCis7wgDbtF4Vd9z84UJr05/Sp2fRKmzC+CSPG/dNAPPJZ0BTBLTT1Fhd6N9Gg==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.15.5", + "esbuild-android-64": "0.15.5", + "esbuild-android-arm64": "0.15.5", + "esbuild-darwin-64": "0.15.5", + "esbuild-darwin-arm64": "0.15.5", + "esbuild-freebsd-64": "0.15.5", + "esbuild-freebsd-arm64": "0.15.5", + "esbuild-linux-32": "0.15.5", + "esbuild-linux-64": "0.15.5", + "esbuild-linux-arm": "0.15.5", + "esbuild-linux-arm64": "0.15.5", + "esbuild-linux-mips64le": "0.15.5", + "esbuild-linux-ppc64le": "0.15.5", + "esbuild-linux-riscv64": "0.15.5", + "esbuild-linux-s390x": "0.15.5", + "esbuild-netbsd-64": "0.15.5", + "esbuild-openbsd-64": "0.15.5", + "esbuild-sunos-64": "0.15.5", + "esbuild-windows-32": "0.15.5", + "esbuild-windows-64": "0.15.5", + "esbuild-windows-arm64": "0.15.5" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.5.tgz", + "integrity": "sha512-dYPPkiGNskvZqmIK29OPxolyY3tp+c47+Fsc2WYSOVjEPWNCHNyqhtFqQadcXMJDQt8eN0NMDukbyQgFcHquXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.5.tgz", + "integrity": "sha512-YyEkaQl08ze3cBzI/4Cm1S+rVh8HMOpCdq8B78JLbNFHhzi4NixVN93xDrHZLztlocEYqi45rHHCgA8kZFidFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.5.tgz", + "integrity": "sha512-Cr0iIqnWKx3ZTvDUAzG0H/u9dWjLE4c2gTtRLz4pqOBGjfjqdcZSfAObFzKTInLLSmD0ZV1I/mshhPoYSBMMCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.5.tgz", + "integrity": "sha512-WIfQkocGtFrz7vCu44ypY5YmiFXpsxvz2xqwe688jFfSVCnUsCn2qkEVDo7gT8EpsLOz1J/OmqjExePL1dr1Kg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.5.tgz", + "integrity": "sha512-M5/EfzV2RsMd/wqwR18CELcenZ8+fFxQAAEO7TJKDmP3knhWSbD72ILzrXFMMwshlPAS1ShCZ90jsxkm+8FlaA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.5.tgz", + "integrity": "sha512-2JQQ5Qs9J0440F/n/aUBNvY6lTo4XP/4lt1TwDfHuo0DY3w5++anw+jTjfouLzbJmFFiwmX7SmUhMnysocx96w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.5.tgz", + "integrity": "sha512-gO9vNnIN0FTUGjvTFucIXtBSr1Woymmx/aHQtuU+2OllGU6YFLs99960UD4Dib1kFovVgs59MTXwpFdVoSMZoQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.5.tgz", + "integrity": "sha512-ne0GFdNLsm4veXbTnYAWjbx3shpNKZJUd6XpNbKNUZaNllDZfYQt0/zRqOg0sc7O8GQ+PjSMv9IpIEULXVTVmg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.5.tgz", + "integrity": "sha512-wvAoHEN+gJ/22gnvhZnS/+2H14HyAxM07m59RSLn3iXrQsdS518jnEWRBnJz3fR6BJa+VUTo0NxYjGaNt7RA7Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.5.tgz", + "integrity": "sha512-7EgFyP2zjO065XTfdCxiXVEk+f83RQ1JsryN1X/VSX2li9rnHAt2swRbpoz5Vlrl6qjHrCmq5b6yxD13z6RheA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.5.tgz", + "integrity": "sha512-KdnSkHxWrJ6Y40ABu+ipTZeRhFtc8dowGyFsZY5prsmMSr1ZTG9zQawguN4/tunJ0wy3+kD54GaGwdcpwWAvZQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.5.tgz", + "integrity": "sha512-QdRHGeZ2ykl5P0KRmfGBZIHmqcwIsUKWmmpZTOq573jRWwmpfRmS7xOhmDHBj9pxv+6qRMH8tLr2fe+ZKQvCYw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.5.tgz", + "integrity": "sha512-p+WE6RX+jNILsf+exR29DwgV6B73khEQV0qWUbzxaycxawZ8NE0wA6HnnTxbiw5f4Gx9sJDUBemh9v49lKOORA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.5.tgz", + "integrity": "sha512-J2ngOB4cNzmqLHh6TYMM/ips8aoZIuzxJnDdWutBw5482jGXiOzsPoEF4j2WJ2mGnm7FBCO4StGcwzOgic70JQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.5.tgz", + "integrity": "sha512-MmKUYGDizYjFia0Rwt8oOgmiFH7zaYlsoQ3tIOfPxOqLssAsEgG0MUdRDm5lliqjiuoog8LyDu9srQk5YwWF3w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.5.tgz", + "integrity": "sha512-2mMFfkLk3oPWfopA9Plj4hyhqHNuGyp5KQyTT9Rc8hFd8wAn5ZrbJg+gNcLMo2yzf8Uiu0RT6G9B15YN9WQyMA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.5.tgz", + "integrity": "sha512-2sIzhMUfLNoD+rdmV6AacilCHSxZIoGAU2oT7XmJ0lXcZWnCvCtObvO6D4puxX9YRE97GodciRGDLBaiC6x1SA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.15.5.tgz", + "integrity": "sha512-lTJOEKekN/4JI/eOEq0wLcx53co2N6vaT/XjBz46D1tvIVoUEyM0o2K6txW6gEotf31szFD/J1PbxmnbkGlK9A==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.5.tgz", + "integrity": "sha512-e+duNED9UBop7Vnlap6XKedA/53lIi12xv2ebeNS4gFmu7aKyTrok7DPIZyU5w/ftHD4MUDs5PJUkQPP9xJRzg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.5.tgz", + "integrity": "sha512-v+PjvNtSASHOjPDMIai9Yi+aP+Vwox+3WVdg2JB8N9aivJ7lyhp4NVU+J0MV2OkWFPnVO8AE/7xH+72ibUUEnw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.15.5", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.5.tgz", + "integrity": "sha512-Yz8w/D8CUPYstvVQujByu6mlf48lKmXkq6bkeSZZxTA626efQOJb26aDGLzmFWx6eg/FwrXgt6SZs9V8Pwy/aA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.0.3.tgz", + "integrity": "sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.2.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", + "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-5.2.1.tgz", + "integrity": "sha512-xIcQYMnhcx2Nr4JTjsFmwwnr9vldugPy9uVm0o87bjqqWMv9GaqsTeT+i99wTl0mk1uLxJtHxLb8kymqTENQsw==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", + "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-3.0.0.tgz", + "integrity": "sha512-TxYQaeNW/N8ymDvwAxPyRbhMBtnEwuvaTYpOQkFx1nSeusgezHniEc/l35Vo4iCq/mMiTJbpD7oYxN98hFlfmw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "dev": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jasmine-core": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.3.0.tgz", + "integrity": "sha512-qybtBUesniQdW6n+QIHMng2vDOHscIC/dEXjW+JzO9+LoAZMb03RCUC5xFOv/btSKPm1xL42fn+RjlU4oB42Lg==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "dev": true + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", + "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/karma": { + "version": "6.4.4", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.4.tgz", + "integrity": "sha512-LrtUxbdvt1gOpo3gxG+VAJlJAEMhbWlM4YrFQgql98FwF7+K8K12LYO4hnDdUkNjeztYrOXEMqgTajSWgmtI/w==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.7.2", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.1.1.tgz", + "integrity": "sha512-hsIglcq1vtboGPAN+DGCISCFOxW+ZVnIqhDQcCMqqCp+4dmJ0Qpq5QAjkbA0X2L9Mi6OBkHi2Srrbmm7pUKkzQ==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.1.tgz", + "integrity": "sha512-yj7hbequkQP2qOSb20GuNSIyE//PgJWHwC2IydLE6XRtsnaflv+/OSGNssPjobYUlhVVagy99TQpqUt3vAUG7A==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-coverage/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/karma-coverage/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz", + "integrity": "sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==", + "dev": true, + "peerDependencies": { + "jasmine-core": "^4.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/karma/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/karma/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/karma/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "dev": true, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.0.0.tgz", + "integrity": "sha512-9+LOWWjuoectIEx3zrfN83NAGxSUB5pWEabbbidVQVgZhN+wN68pOvuyirVlH1IK4VT1f3TmlyvAnCXh8O5KEw==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", + "integrity": "sha512-NzzlXpclt5zAbmo6h6jNc8zl2gNRGHvmsZW4IvZhTC4W7k4OlLP+S5YLussa/r3ixNT66KOQfNORlXHSOy/X4A==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.6.1.tgz", + "integrity": "sha512-wd+SD57/K6DiV7jIR34P+s3uckTRuQvx0tKPcvjFlrEylk6P4mQ2KSWk1hblj1Kxaqok7LogKOieygXqBczNlg==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", + "dev": true, + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-json-stream": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.2.tgz", + "integrity": "sha512-myxeeTm57lYs8pH2nxPzmEEg8DGIgW+9mv6D4JZD2pa81I/OBjeU7PtICXV6c9eRGTA5JMDsuIPUZRCyBMYNhg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.3.1.tgz", + "integrity": "sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-4.0.1.tgz", + "integrity": "sha512-EBk5QKKuocMJhB3BILuKhmaPjI8vNRSpIfO9woLC6NyHVkKKdVEdAO1mrT0ZfxNR1lKwCcTkuZfmGIFdizZ8Pg==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-5.0.0.tgz", + "integrity": "sha512-65lUsMI8ztHCxFz5ckCEC44DRvEGdZX5usQFriauxHEwt7upv1FKaQEmAtU0YnOAdwuNWCmk64xYiQABNrEyLA==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-9.1.0.tgz", + "integrity": "sha512-4J0GL+u2Nh6OnhvUKXRr2ZMG4lR8qtLp+kv7UiV00Y+nGiSxtttCyIRHCt5L5BNkXQld/RceYItau3MDOoGiBw==", + "dev": true, + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.3.tgz", + "integrity": "sha512-263/0NGrn32YFYi4J533qzrQ/krmmrWwhKkzwTuM4f/07ug51odoaNjUexxO4vxlzURHcmYMH1QjvHjsNDKLVg==", + "dev": true, + "dependencies": { + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/npm-bundled": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-2.0.1.tgz", + "integrity": "sha512-gZLxXdjEzE/+mOstGDqR6b0EkhJ+kM6fxM6vUuckuctuVPh80Q6pw/rSZj9s4Gex9GxWtIicO1pc8DB9KZWudw==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-7.0.1.tgz", + "integrity": "sha512-IA8+tuv8KujbsbLQvselW2XQgmXWS47t3CB0ZrzsRZ82DbDfkcFunOaPm4X7qNuhMfq+FmV7hQT4iFVpHqV7mg==", + "dev": true, + "dependencies": { + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-13.3.1.tgz", + "integrity": "sha512-eukJPi++DKRTjSBRcDZSDDsGqRK3ehbxfFUcgaRd0Yp6kRwOwh2WVn0r+8rMB4nnuzvAk6rQVzl6K5CkYOmnvw==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "deprecated": "This package is no longer supported.", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.0.tgz", + "integrity": "sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "13.6.2", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-13.6.2.tgz", + "integrity": "sha512-Gu8fU3GsvOPkak2CkbojR7vjs3k3P9cA6uazKTHdsdV0gpCEQq2opelnEv30KRQWgVzP5Vd/5umjcedma3MKtg==", + "dev": true, + "dependencies": { + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-6.0.1.tgz", + "integrity": "sha512-vwLQzynJVEfUlURxgnf51yAJDQTtVpNyGD8tKi2Za7m+akukNHxCcUQMAa/mUGLhCeicFdpy7Tlvj8ZNKadprg==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1", + "parse5-sax-parser": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-6.0.1.tgz", + "integrity": "sha512-kXX+5S81lgESA0LsDuGjAlBybImAChYRMT+/uKCEXFBFOeEhS52qUCydGhU3qLRD8D9DVjaUo821WK7DM4iCeg==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-attribute-case-insensitive": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-5.0.2.tgz", + "integrity": "sha512-XIidXV8fDr0kKt28vqki84fRK8VW8eTuIa4PChv2MqKuT6C9UjmSKzen6KaWhWEoYvwxFCa7n/tC1SZ3tyq4SQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-clamp": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz", + "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": ">=7.6.0" + }, + "peerDependencies": { + "postcss": "^8.4.6" + } + }, + "node_modules/postcss-color-functional-notation": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-4.2.4.tgz", + "integrity": "sha512-2yrTAUZUab9s6CpxkxC4rVgFEVaR6/2Pipvi6qcgvnYiVqZcbDHEoBDhrXzyb7Efh2CCfHQNtcqWcIruDTIUeg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-color-hex-alpha": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-8.0.4.tgz", + "integrity": "sha512-nLo2DCRC9eE4w2JmuKgVA3fGL3d01kGq752pVALF68qpGLmx2Qrk91QTKkdUqqp45T1K1XV8IhQpcu1hoAQflQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-color-rebeccapurple": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-7.1.1.tgz", + "integrity": "sha512-pGxkuVEInwLHgkNxUc4sdg4g3py7zUeCQ9sMfwyHAT+Ezk8a4OaaVZ8lIY5+oNqA/BXXgLyXv0+5wHP68R79hg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-media": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-8.0.2.tgz", + "integrity": "sha512-7yi25vDAoHAkbhAzX9dHx2yc6ntS4jQvejrNcC+csQJAXjj15e7VcWfMgLqBNAbOvqi5uIa9huOVwdHbf+sKqg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-custom-properties": { + "version": "12.1.11", + "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz", + "integrity": "sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-custom-selectors": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-6.0.3.tgz", + "integrity": "sha512-fgVkmyiWDwmD3JbpCmB45SvvlCD6z9CG6Ie6Iere22W5aHea6oWa7EM2bpnv2Fj3I94L3VbtvX9KqwSi5aFzSg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.3" + } + }, + "node_modules/postcss-dir-pseudo-class": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-6.0.5.tgz", + "integrity": "sha512-eqn4m70P031PF7ZQIvSgy9RSJ5uI2171O/OO/zcRNYpJbvaeKFUlar1aJ7rmgiQtbm0FSPsRewjpdS0Oew7MPA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-double-position-gradients": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-3.1.2.tgz", + "integrity": "sha512-GX+FuE/uBR6eskOK+4vkXgT6pDkexLokPaz/AbJna9s5Kzp/yl488pKPjhy0obB475ovfT1Wv8ho7U/cHNaRgQ==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-env-function": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/postcss-env-function/-/postcss-env-function-4.0.6.tgz", + "integrity": "sha512-kpA6FsLra+NqcFnL81TnsU+Z7orGtDTxcOhl6pwXeEq1yFPpRMkCDpHhrz8CFQDr/Wfm0jLiNQ1OsGGPjlqPwA==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-visible": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-6.0.4.tgz", + "integrity": "sha512-QcKuUU/dgNsstIK6HELFRT5Y3lbrMLEOwG+A4s5cA+fx3A3y/JTq3X9LaOj3OC3ALH0XqyrgQIgey/MIZ8Wczw==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-focus-within": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-5.0.4.tgz", + "integrity": "sha512-vvjDN++C0mu8jz4af5d52CB184ogg/sSxAFS+oUJQq2SuCe7T5U2iIsVJtsCp2d6R4j0jr5+q3rPkBVZkXD9fQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.9" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-font-variant": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz", + "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==", + "dev": true, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-gap-properties": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-3.0.5.tgz", + "integrity": "sha512-IuE6gKSdoUNcvkGIqdtjtcMtZIFyXZhmFd5RUlg97iVEvp1BZKV5ngsAjCjrVy+14uhGBQl9tzmi1Qwq4kqVOg==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-image-set-function": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-4.0.7.tgz", + "integrity": "sha512-9T2r9rsvYzm5ndsBE8WgtrMlIT7VbtTfE7b3BQnudUqnBcBo7L758oc+o+pdj/dUV0l5wjwSdjeOH2DZtfv8qw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-import": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.0.0.tgz", + "integrity": "sha512-Y20shPQ07RitgBGv2zvkEAu9bqvrD77C9axhj/aA1BQj4czape2MdClCExvB27EwYEJdGgKZBpKanb0t1rK2Kg==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-initial/-/postcss-initial-4.0.1.tgz", + "integrity": "sha512-0ueD7rPqX8Pn1xJIjay0AZeIuDoF+V+VvMt/uOnn+4ezUKhZM/NokDeP6DwMNyIoYByuN/94IQnt5FEkaN59xQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-lab-function": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-4.2.1.tgz", + "integrity": "sha512-xuXll4isR03CrQsmxyz92LJB2xX9n+pZJ5jE9JgcnmsCammLyKdlzrBin+25dy6wIjfhJpKBAN80gsTlCgRk2w==", + "dev": true, + "dependencies": { + "@csstools/postcss-progressive-custom-properties": "^1.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-loader": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.0.1.tgz", + "integrity": "sha512-VRviFEyYlLjctSM93gAZtcJJ/iSkPZ79zWbN/1fSH+NisBByEiVLqpdVDrPLVSi8DX0oJo12kL/GppTBdKVXiQ==", + "dev": true, + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.7" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-logical": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-5.0.4.tgz", + "integrity": "sha512-RHXxplCeLh9VjinvMrZONq7im4wjWGlRJAqmAVLXyZaXwfDWP73/oq4NdIp+OZwhQUMj0zjqDfM5Fj7qby+B4g==", + "dev": true, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.4" + } + }, + "node_modules/postcss-media-minmax": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-media-minmax/-/postcss-media-minmax-5.0.0.tgz", + "integrity": "sha512-yDUvFf9QdFZTuCUg0g0uNSHVlJ5X1lSzDZjPSFaiCWvjgsvu8vEVxtahPrLMinIDEEGnx6cBe6iqdx5YWz08wQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.5.tgz", + "integrity": "sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.0.tgz", + "integrity": "sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-nesting": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-10.2.0.tgz", + "integrity": "sha512-EwMkYchxiDiKUhlJGzWsD9b2zvq/r2SSubcRrgP+jujMXFzqvANLt16lJANC+5uZ6hjI7lpRmI6O8JIl+8l1KA==", + "dev": true, + "dependencies": { + "@csstools/selector-specificity": "^2.0.0", + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-opacity-percentage": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-1.1.3.tgz", + "integrity": "sha512-An6Ba4pHBiDtyVpSLymUUERMo2cU7s+Obz6BTrS+gxkbnSBNKSuD0AVUc+CpBMrpVPKKfoVz0WQCX+Tnst0i4A==", + "dev": true, + "funding": [ + { + "type": "kofi", + "url": "https://ko-fi.com/mrcgrtz" + }, + { + "type": "liberapay", + "url": "https://liberapay.com/mrcgrtz" + } + ], + "engines": { + "node": "^12 || ^14 || >=16" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-overflow-shorthand": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-3.0.4.tgz", + "integrity": "sha512-otYl/ylHK8Y9bcBnPLo3foYFLL6a6Ak+3EQBPOTR7luMYCOsiVTUk1iLvNf6tVPNGXcoL9Hoz37kpfriRIFb4A==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-page-break": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz", + "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==", + "dev": true, + "peerDependencies": { + "postcss": "^8" + } + }, + "node_modules/postcss-place": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-7.0.5.tgz", + "integrity": "sha512-wR8igaZROA6Z4pv0d+bvVrvGY4GVHihBCBQieXFY3kuSuMyOmEnnfFzHl/tQuqHZkfkIVBEbDvYcFfHmpSet9g==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-preset-env": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-7.8.0.tgz", + "integrity": "sha512-leqiqLOellpLKfbHkD06E04P6d9ZQ24mat6hu4NSqun7WG0UhspHR5Myiv/510qouCjoo4+YJtNOqg5xHaFnCA==", + "dev": true, + "dependencies": { + "@csstools/postcss-cascade-layers": "^1.0.5", + "@csstools/postcss-color-function": "^1.1.1", + "@csstools/postcss-font-format-keywords": "^1.0.1", + "@csstools/postcss-hwb-function": "^1.0.2", + "@csstools/postcss-ic-unit": "^1.0.1", + "@csstools/postcss-is-pseudo-class": "^2.0.7", + "@csstools/postcss-nested-calc": "^1.0.0", + "@csstools/postcss-normalize-display-values": "^1.0.1", + "@csstools/postcss-oklab-function": "^1.1.1", + "@csstools/postcss-progressive-custom-properties": "^1.3.0", + "@csstools/postcss-stepped-value-functions": "^1.0.1", + "@csstools/postcss-text-decoration-shorthand": "^1.0.0", + "@csstools/postcss-trigonometric-functions": "^1.0.2", + "@csstools/postcss-unset-value": "^1.0.2", + "autoprefixer": "^10.4.8", + "browserslist": "^4.21.3", + "css-blank-pseudo": "^3.0.3", + "css-has-pseudo": "^3.0.4", + "css-prefers-color-scheme": "^6.0.3", + "cssdb": "^7.0.0", + "postcss-attribute-case-insensitive": "^5.0.2", + "postcss-clamp": "^4.1.0", + "postcss-color-functional-notation": "^4.2.4", + "postcss-color-hex-alpha": "^8.0.4", + "postcss-color-rebeccapurple": "^7.1.1", + "postcss-custom-media": "^8.0.2", + "postcss-custom-properties": "^12.1.8", + "postcss-custom-selectors": "^6.0.3", + "postcss-dir-pseudo-class": "^6.0.5", + "postcss-double-position-gradients": "^3.1.2", + "postcss-env-function": "^4.0.6", + "postcss-focus-visible": "^6.0.4", + "postcss-focus-within": "^5.0.4", + "postcss-font-variant": "^5.0.0", + "postcss-gap-properties": "^3.0.5", + "postcss-image-set-function": "^4.0.7", + "postcss-initial": "^4.0.1", + "postcss-lab-function": "^4.2.1", + "postcss-logical": "^5.0.4", + "postcss-media-minmax": "^5.0.0", + "postcss-nesting": "^10.1.10", + "postcss-opacity-percentage": "^1.1.2", + "postcss-overflow-shorthand": "^3.0.4", + "postcss-page-break": "^3.0.4", + "postcss-place": "^7.0.5", + "postcss-pseudo-class-any-link": "^7.1.6", + "postcss-replace-overflow-wrap": "^4.0.0", + "postcss-selector-not": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-pseudo-class-any-link": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-7.1.6.tgz", + "integrity": "sha512-9sCtZkO6f/5ML9WcTLcIyV1yz9D1rf0tWc+ulKcvV30s0iZKS/ONyETvoWsr6vnrmW+X+KmuK3gV/w5EWnT37w==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-replace-overflow-wrap": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz", + "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==", + "dev": true, + "peerDependencies": { + "postcss": "^8.0.3" + } + }, + "node_modules/postcss-selector-not": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-6.0.1.tgz", + "integrity": "sha512-1i9affjAe9xu/y9uqWH+tD4r6/hDaXJruk8xn2x1vzxC2U3J3LKO3zJW4CyxlNhA56pADJ/djpEwpH1RClI2rQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": "^12 || ^14 || >=16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + }, + "peerDependencies": { + "postcss": "^8.2" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-2.0.1.tgz", + "integrity": "sha512-Kcmo2FhfDTXdcbfDH76N7uBYHINxc/8GW7UAVuVP9I+Va3uHSerrnKV6dLooga/gh7GlgzuCCr/eoldnL1muGw==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/read-package-json": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-5.0.2.tgz", + "integrity": "sha512-BSzugrt4kQ/Z0krro8zhTwV1Kd79ue25IhNN/VtHFy1mG/6Tluyi+msc0UpwaoQzxSHa28mntAjIZY6kEgfR9Q==", + "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", + "dev": true, + "dependencies": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-2.0.0.tgz", + "integrity": "sha512-awzfKUO7v0FscrSpRoogyNm0sajikhBWpU0QMrW09AMi9n1PoKU6WaIqUzuJSQnpciZZmJ/jMZ2Egfmb/9LiWQ==", + "dev": true, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.14", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.14.tgz", + "integrity": "sha512-ZhYeb6nRaXCfhnndflDK8qI6ZQ/YcWZCISRAWICW9XYqMUwjZM9Z0DveWX/ABN01oxSHwVxKQmxeYZSsm0jh5A==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz", + "integrity": "sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.3.0.tgz", + "integrity": "sha512-TVILVSz2jY5D47F4mA4MppkBrafEaiUWJO/TcZHEIuI13AqoZMkK1WMA4Om1YkYbTx+9Ki1/tSUXbceyr9saRg==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "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/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.54.4", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.4.tgz", + "integrity": "sha512-3tmF16yvnBwtlPrNBHw/H907j8MlOX8aTBnlNX1yrKx24RKcJGPyLhFUwkoKBKesR3unP93/2z14Ll8NicwQUA==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.0.2.tgz", + "integrity": "sha512-BbiqbVmbfJaWVeOOAu2o7DhYWtcNmTfvroVgFXa6k2hHheMxNAeDHLNoDy/Q5aoaVlz0LH+MbMktKwm9vN/j8Q==", + "dev": true, + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true, + "optional": true + }, + "node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "cors": "~2.8.5", + "debug": "~4.3.2", + "engine.io": "~6.6.0", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.4" + }, + "engines": { + "node": ">=10.2.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "dev": true, + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz", + "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dev": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.0.tgz", + "integrity": "sha512-i3KVgM3+QPAHNbGavK+VBq03YoJl24m9JWNbLgsjTj8aJzXG9M61bantBTNBt7CNwY2FYf+RJRYJ3pzalKjIrw==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/stylus": { + "version": "0.59.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.59.0.tgz", + "integrity": "sha512-lQ9w/XIOH5ZHVNuNbWW8D822r+/wBSO/d6XvtyHLF7LW4KaCIDeVbvn5DF8fGCJAUCwVhVi/h6J0NUcnylUEjg==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.0.1", + "debug": "^4.3.2", + "glob": "^7.1.6", + "sax": "~1.2.4", + "source-map": "^0.7.3" + }, + "bin": { + "stylus": "bin/stylus" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://opencollective.com/stylus" + } + }, + "node_modules/stylus-loader": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/stylus-loader/-/stylus-loader-7.0.0.tgz", + "integrity": "sha512-WTbtLrNfOfLgzTaR9Lj/BPhQroKk/LC1hfTXSUbrxmxgfUo3Y3LpmKRVA2R1XbjvTAvOfaian9vOyfv1z99E+A==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "klona": "^2.0.5", + "normalize-path": "^3.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "stylus": ">=0.52.4", + "webpack": "^5.0.0" + } + }, + "node_modules/stylus/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/stylus/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/stylus/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/stylus/node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/terser": { + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.20", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.26.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser-webpack-plugin/node_modules/terser": { + "version": "5.33.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.33.0.tgz", + "integrity": "sha512-JuPVaB7s1gdFKPKTelwUyRq5Sid2A3Gko2S0PncwdBq7kN9Ti9HPWDQ06MPsEDGsZeVESjKEnyGy68quBk1w6g==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.39.tgz", + "integrity": "sha512-IZ6acm6RhQHNibSt7+c09hhvsKy9WUr4DVbeq9U8o71qxyYtJpQeDxQnMrVqnIFMLcQjHO0I9wgfO2vIahht4w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" + } + ], + "bin": { + "ua-parser-js": "script/cli.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz", + "integrity": "sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz", + "integrity": "sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.2", + "picocolors": "^1.0.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/uri-js/node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz", + "integrity": "sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.76.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.1.tgz", + "integrity": "sha512-4+YIK4Abzv8172/SGqObnUjaIHjLEuUasz9EwQj/9xmPPkYJy2Mh03Q/lJfSD3YLzbxy5FeTq5Uw0323Oh6SJQ==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.11.0.tgz", + "integrity": "sha512-L5S4Q2zT57SK7tazgzjMiSMBdsw+rGYIX27MgPgx7LDhWO0lViPrHKoLS7jo5In06PWYAhlYu3PbyoC6yAThbw==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.0.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.4.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", + "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-merge": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.8.0.tgz", + "integrity": "sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.5.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.5.1.tgz", + "integrity": "sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/zone.js": { + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.11.8.tgz", + "integrity": "sha512-82bctBg2hKcEJ21humWIkXRlLBBmrc3nN7DFh5LGGhcyycO2S7FN8NmdvlcKaGFDNVL4/9kFLmwmInTavdJERA==", + "dependencies": { + "tslib": "^2.3.0" + } + } + } +} diff --git a/demo/package.json b/demo/package.json new file mode 100644 index 0000000..647c190 --- /dev/null +++ b/demo/package.json @@ -0,0 +1,42 @@ +{ + "name": "detection", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "start": "ng serve --host 0.0.0.0", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^14.2.0", + "@angular/common": "^14.2.0", + "@angular/compiler": "^14.2.0", + "@angular/core": "^14.2.0", + "@angular/forms": "^14.2.0", + "@angular/platform-browser": "^14.2.0", + "@angular/platform-browser-dynamic": "^14.2.0", + "@angular/router": "^14.2.0", + "rxjs": "^7.8.1", + "tslib": "^2.3.0", + "zone.js": "~0.11.4" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^14.2.13", + "@angular/cli": "~14.2.13", + "@angular/compiler-cli": "^14.2.0", + "@types/jasmine": "~4.0.0", + "jasmine-core": "~4.3.0", + "karma": "~6.4.0", + "karma-chrome-launcher": "~3.1.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "typescript": "~4.7.2" + }, + "peerDependencies": { + "@angular-package/spectre.css": "^1.0.0-alpha.3.0.1", + "@angular/material": "^13.3.9" + } +} diff --git a/demo/src/app/@detection/change-detection.class.ts b/demo/src/app/@detection/change-detection.class.ts new file mode 100644 index 0000000..c6616aa --- /dev/null +++ b/demo/src/app/@detection/change-detection.class.ts @@ -0,0 +1,212 @@ +// ChangeDetectorRef +import { ChangeDetectorRef } from '@angular/core'; + +// Property. +// import { Property } from '../../../../../property/src/lib'; +import { Property } from '@angular-package/property'; + +// Type. +// import { SetterCallback } from '../../../../../property/src/type'; +import { SetterCallback } from '@angular-package/property'; +import { DetectionProperties } from './type/detection-properties.type'; + +/** + * + */ +export class ChangeDetection { + /** + * Deactivated properties. + */ + public get deactivated(): Set { + return this.#deactivated; + } + + /** + * The `get` accessor returns the list of detectable property names if set. + * @returns The return value is the `Set` object containing the list of detectable properties. + * @angularpackage + */ + public get detectable(): Set { + return this.#property.wrapped as any; + } + + /** + * The property indicates the detection state of the component given in the constructor. When set to `true` all the properties indicated + * as detectable perform `detectChanges()` of `detector` on set. + */ + public get detection() { + return this.#detection; + } + + /** + * + */ + public get properties() { + return this.#properties; + } + + /** + * + */ + #changeDetectorRef!: ChangeDetectorRef; + + /** + * Deactivated properties. + */ + #deactivated: Set = new Set(); + + /** + * Component detection status. + */ + #detection = false; + + /** + * Private property of `Property` handles inject detection to specified properties. + */ + #property!: Property; + + /** + * Detection properties. + */ + #properties: DetectionProperties = {}; + + /** + * + * @param component + * @param keys + * @param callbackFn + * @angularpackage + */ + constructor( + changeDetectorRefKey: keyof Cmp, // ChangeDetector, + component: Cmp, + keys: (keyof Cmp)[], + callbackFn?: SetterCallback + ) { + keys.forEach(property => Object.assign(this.#properties, { [property]: true })); + + // Set the detector to use. + this.#changeDetectorRef = component[changeDetectorRefKey] as unknown as ChangeDetectorRef; + + // Set detection to specified keys on initialize with the given optional `callbackFn`. + this.#property = Property.wrap( + component, + keys, + undefined, + this.#defineDetectionCallback(callbackFn) + ); + } + + /** + * Activates detection in the component of the given deactivated properties, which means perform `detectChanges` on set if detection is + * enabled. + * @param keys + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public activate(...keys: (keyof Cmp)[]): this { + Array.isArray(keys) && keys.forEach((key) => this.#deactivated.delete(key)); + return this; + } + + /** + * Deactivates detection in the component of the given properties, which means detectable properties don't perform `detectChanges` on set + * if detection is enabled. + * @param keys + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public deactivate(...keys: (keyof Cmp)[]): this { + Array.isArray(keys) && keys.forEach(key => this.#deactivated.add(key)); + return this; + } + + /** + * Disables detection in the component, which means detectable properties don't perform `detectChanges` on set. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public disable(): this { + this.#detection = false; + return this; + } + + /** + * Enables detection in the component, which means detectable(not deactivated) properties perform `detectChanges` on set. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public enable(): this { + this.#detection = true; + return this; + } + + /** + * Checks whether the component property of the given `key` is detectable. + * @param key The property name of component to check. + * @returns The return value is a `boolean` type indicating whether the component property of the given `key` is detectable. + * @angularpackage + */ + public has(key: keyof Cmp): boolean { + return this.#property?.wrapped.has(key) || false; + } + + /** + * Checks whether the component property of the given `key` is deactivated from detection. + * @param key The property name of `keyof Cmp` to check. + * @returns The return value is a `boolean` type indicating whether the property is deactivated from the detection. + * @angularpackage + */ + public isDeactivated(key: keyof Cmp): boolean { + return this.#deactivated.has(key); + } + + /** + * Removes properties given in the `keys` from the detectable, which means they don't perform `detectChanges()` on set. + * @param keys An array of `keyof Cmp` to remove from the detectable. + * @returns The return value is an instance of `ChangeDetector` for the chaining purpose. + * @angularpackage + */ + public remove(...keys: (keyof Cmp)[]): this { + this.#property?.unwrap(...keys); + return this; + } + + /** + * Sets detection on `set` to the component properties of the given `keys` making them detectable, which means each performs + * `detectChanges()` on set. + * @param keys The component keys of an `Array` to set detection. + * @param callbackFn Optional callback function to inject with detection. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public set( + keys: Keys[], + callbackFn?: SetterCallback + ): this { + this.#property?.wrap( + keys, + undefined, + this.#defineDetectionCallback(callbackFn) + ); + return this; + } + + /** + * Defines function with detection and optional callback function to inject to property setter. + * @param callbackFn Callback function of generic type `SetterCallback` to inject along with detection. + * @returns The return value is the function to detect changes on set in the specified property with optional callback function. + * @angularpackage + */ + #defineDetectionCallback( + callbackFn?: SetterCallback + ): SetterCallback { + return (value: Cmp[Key], oldValue: Cmp[Key], key: Key, instance: Cmp) => { + typeof callbackFn === 'function' && + callbackFn(value, oldValue, key, instance); + this.detection === true && + this.deactivated.has(key) === false && + this.#changeDetectorRef?.detectChanges(); + }; + } +} diff --git a/demo/src/app/@detection/change-detector.class.ts b/demo/src/app/@detection/change-detector.class.ts new file mode 100644 index 0000000..5aeff6c --- /dev/null +++ b/demo/src/app/@detection/change-detector.class.ts @@ -0,0 +1,137 @@ +// ChangeDetectorRef +import { ChangeDetectorRef } from '@angular/core'; + +// Class. +import { ChangeDetection } from './change-detection.class'; + +// Type. +// import { SetterCallback } from '../../../../../property/src/type'; +import { SetterCallback } from '@angular-package/property'; + +/** + * + */ +export class ChangeDetector { + /** + * Indicates `detached` state of the component given in the constructor. + */ + public get detached() { + return this.#detached; + } + + /** + * The property contains the change detector instance of the component given in the constructor. + */ + public get detector() { + return this.#detector; + } + + /** + * + */ + public get detection() { + return this.#detection; + } + + /** + * + */ + #detector!: ChangeDetectorRef; + + /** + * Private property string-type of the found change detector in the component given in the constructor. + */ + #changeDetectorRefKey!: keyof Cmp; + + /** + * Component detached status. + */ + #detached = false; + + /** + * Component detection. + */ + #detection!: ChangeDetection; + + /** + * + * @param component + * @param keys + * @param callbackFn + * @angularpackage + */ + constructor( + component: Cmp, + keys: (keyof Cmp)[], + callbackFn?: SetterCallback + ) { + // Set picked key of the change detector. + if (typeof this.#setDetectorKey(component) === 'string') { + // Set the detector to use. + this.#detector = component[this.#changeDetectorRefKey] as any; + + // Detach component on initialize to use `detectChanges()`. + this.detach(); + + // Detection. + this.#detection = new ChangeDetection( + this.#changeDetectorRefKey, + component, + keys, + callbackFn + ); + } + } + + /** + * Detaches the component from the change detector tree and sets property `detached` to `true`. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public detach(): this { + setTimeout(() => this.#detector && (this.#detector.detach(), (this.#detached = true)), 0); + return this; + } + + /** + * Detaches the component from the change detector tree and sets property `detached` to `true`. + * @returns The return value is an instance of `ChangeDetector`. + * @angularpackage + */ + public reattach(): this { + setTimeout(() => this.#detector && (this.#detector.reattach(), (this.#detached = false))); + return this; + } + + /** + * The method returns the property name of found change detector in the specified component. + * @param component Component to find change detector instance. + * @returns The return value is a string-type property name of the given `component` under which the change detector is stored. + * @angularpackage + */ + #setDetectorKey(component: Cmp): keyof Cmp { + let prop; + if (this.#changeDetectorRefKey === undefined) { + if (typeof component === 'object') { + Object + .keys(component) + .forEach(property => ( + (prop = component[property as keyof typeof component]), + typeof prop === 'object' && prop !== null && 'detectChanges' in prop && + 'reattach' in prop && + 'detach' in prop && + (this.#changeDetectorRefKey = property as keyof Cmp), + false + ) + ); + } + if (this.#changeDetectorRefKey === undefined) { + throw new Error(` + Problem: ChangeDetectorClass: couldn't find ChangeDetectorRef instance. + Quick fix: Add to constructor "public changeDetectorRef: ChangeDetectorRef". + `); + } + } + return this.#changeDetectorRefKey; + } +} diff --git a/demo/src/app/@detection/interface/detector-options.interface.ts b/demo/src/app/@detection/interface/detector-options.interface.ts new file mode 100644 index 0000000..2aed0ac --- /dev/null +++ b/demo/src/app/@detection/interface/detector-options.interface.ts @@ -0,0 +1,9 @@ +/** + * + */ +export interface DetectorOptions { + changeDetector: 'changeDetector' | string; + detached: 'detached' | string; + detection: 'detection' | string; + properties: 'properties' | string; +} diff --git a/demo/src/app/@detection/interface/index.ts b/demo/src/app/@detection/interface/index.ts new file mode 100644 index 0000000..c507b3f --- /dev/null +++ b/demo/src/app/@detection/interface/index.ts @@ -0,0 +1 @@ +export { DetectorOptions } from './detector-options.interface'; diff --git a/demo/src/app/@detection/lib/change-detection-helper.abstract.ts b/demo/src/app/@detection/lib/change-detection-helper.abstract.ts new file mode 100644 index 0000000..bc7c5bb --- /dev/null +++ b/demo/src/app/@detection/lib/change-detection-helper.abstract.ts @@ -0,0 +1,20 @@ +// Angular. +import { ChangeDetectorRef } from '@angular/core'; + +// Type. +import { DetectionProperties } from '../type/detection-properties.type'; + +/** + * Helper class for component. + */ +export abstract class ChangeDetectionHelper { + public detached?: boolean; + public detection?: boolean; + public readonly properties?: DetectionProperties; + + /** + * + * @param changeDetectorRef + */ + constructor(public changeDetectorRef: ChangeDetectorRef) {} +} diff --git a/demo/src/app/@detection/lib/change-detection.decorator.ts b/demo/src/app/@detection/lib/change-detection.decorator.ts new file mode 100644 index 0000000..9709bfe --- /dev/null +++ b/demo/src/app/@detection/lib/change-detection.decorator.ts @@ -0,0 +1,26 @@ +// internal +import { configureDetector } from './configure-detector.func'; + +// Interface. +import { DetectorOptions } from '../interface/detector-options.interface'; + +// Type. +import { DetectionProperties } from '../type/detection-properties.type'; + +/** + * Decorator. + * @param properties + * @param options + * @returns + */ +export function ChangeDetection({}: { + properties: DetectionProperties, + options?: DetectorOptions +}): ClassDecorator { + return (component: Function): any => + configureDetector( + component, + arguments[0].properties, + arguments[0].options, + ); +} diff --git a/demo/src/app/@detection/lib/configure-detector.func.ts b/demo/src/app/@detection/lib/configure-detector.func.ts new file mode 100644 index 0000000..c235ecf --- /dev/null +++ b/demo/src/app/@detection/lib/configure-detector.func.ts @@ -0,0 +1,75 @@ + +// Class. +import { ChangeDetector } from '../change-detector.class'; + +// const. +import { DETECTOR_OPTIONS } from './detector-options.const'; + +// Interface. +import { DetectorOptions } from '../interface/detector-options.interface'; + +// Type. +import { DetectionProperties } from '../type/detection-properties.type'; + +/** + * Function to use with decorator. + * @param component Source component for properties. + * @param properties Properties names to detect changes if true. + * @param options Change default names assigned to component. + */ +export const configureDetector = ( + component: Function, + properties: DetectionProperties, + options: DetectorOptions = DETECTOR_OPTIONS +): void => { + if ((component)) { + if ((options)) { + options = Object.assign(DETECTOR_OPTIONS, options); + } + Object.defineProperties(component.prototype, { + $$changeDetector: { writable: true }, + + [options.changeDetector]: { + get(): ChangeDetector { + if (this.$$changeDetector === undefined) { + this.$$changeDetector = new ChangeDetector( + this, + Object.keys(properties) as (keyof Cmp)[] + ); + } + return this.$$changeDetector; + } + }, + + // Detaches the component from the change detector tree if `true`. + [options.detached]: { + set(value: boolean): void { + if (value === true) { + (this[options.changeDetector] as ChangeDetector).detach(); + } else if (value === false) { + (this[options.changeDetector] as ChangeDetector).reattach(); + } + } + }, + + // Enables detection in the component, which means detectable(not deactivated) properties perform detectChanges on set. + [options.detection]: { + set(value: boolean): void { + if (value === false) { + (this[options.changeDetector] as ChangeDetector).detection.disable(); + } else if (value === true) { + (this[options.changeDetector] as ChangeDetector).detection.enable(); + } + } + }, + + // Detection properties. + [options.properties]: { + get(): DetectionProperties { + return (this.$$changeDetector as ChangeDetector).detection.properties; + } + }, + + }); + } +}; diff --git a/demo/src/app/@detection/lib/detector-options.const.ts b/demo/src/app/@detection/lib/detector-options.const.ts new file mode 100644 index 0000000..f192c1e --- /dev/null +++ b/demo/src/app/@detection/lib/detector-options.const.ts @@ -0,0 +1,12 @@ +// Interface. +import { DetectorOptions } from '../interface/detector-options.interface'; + +/** + * + */ +export const DETECTOR_OPTIONS: DetectorOptions = { + changeDetector: 'changeDetector', + detached: 'detached', + detection: 'detection', + properties: 'properties', +}; diff --git a/demo/src/app/@detection/type/detection-properties.type.ts b/demo/src/app/@detection/type/detection-properties.type.ts new file mode 100644 index 0000000..b945be0 --- /dev/null +++ b/demo/src/app/@detection/type/detection-properties.type.ts @@ -0,0 +1,12 @@ +/** + * + */ +export type DetectionProperties = Partial>; diff --git a/demo/src/app/app-routing.module.ts b/demo/src/app/app-routing.module.ts new file mode 100644 index 0000000..d4eb62d --- /dev/null +++ b/demo/src/app/app-routing.module.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { RouterModule, Routes } from '@angular/router'; + +// Component. +import { DetectionComponent } from './detection/detection.component'; + +const routes: Routes = [ + { path: '', component: DetectionComponent } +]; + +@NgModule({ + imports: [RouterModule.forRoot(routes)], + exports: [RouterModule] +}) +export class AppRoutingModule { } diff --git a/demo/src/app/app.component.html b/demo/src/app/app.component.html new file mode 100644 index 0000000..90c6b64 --- /dev/null +++ b/demo/src/app/app.component.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/demo/src/app/app.component.scss b/demo/src/app/app.component.scss new file mode 100644 index 0000000..2d27c86 --- /dev/null +++ b/demo/src/app/app.component.scss @@ -0,0 +1 @@ +@use "../../node_modules/@angular-package/spectre.css/spectre.scss"; \ No newline at end of file diff --git a/demo/src/app/app.component.spec.ts b/demo/src/app/app.component.spec.ts new file mode 100644 index 0000000..2eed254 --- /dev/null +++ b/demo/src/app/app.component.spec.ts @@ -0,0 +1,35 @@ +import { TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + RouterTestingModule + ], + declarations: [ + AppComponent + ], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have as title 'indexeddb'`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('indexeddb'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('.content span')?.textContent).toContain('indexeddb app is running!'); + }); +}); diff --git a/demo/src/app/app.component.ts b/demo/src/app/app.component.ts new file mode 100644 index 0000000..55bf543 --- /dev/null +++ b/demo/src/app/app.component.ts @@ -0,0 +1,18 @@ +import { ChangeDetectorRef, Component, OnInit, ViewEncapsulation } from '@angular/core'; + + +@Component({ + selector: 'app-root', + templateUrl: './app.component.html', + styleUrls: ['./app.component.scss'], + preserveWhitespaces: true, + encapsulation: ViewEncapsulation.None +}) +export class AppComponent implements OnInit { + public title = 'detection'; + + constructor() {} + + ngOnInit(): void { + } +} diff --git a/demo/src/app/app.module.ts b/demo/src/app/app.module.ts new file mode 100644 index 0000000..f4d7e9a --- /dev/null +++ b/demo/src/app/app.module.ts @@ -0,0 +1,28 @@ +import { NgModule } from '@angular/core'; +import { BrowserModule } from '@angular/platform-browser'; + +// Component +import { AppComponent } from './app.component'; + +// Module. +import { AppRoutingModule } from './app-routing.module'; +import { DetectionComponent } from './detection/detection.component'; + + +@NgModule({ + declarations: [ + AppComponent, + DetectionComponent, + ], + imports: [ + BrowserModule, + AppRoutingModule, + ], + exports: [ + ], + providers: [ + ], + bootstrap: [AppComponent] +}) +export class AppModule { +} diff --git a/demo/src/app/detection/detection.component.html b/demo/src/app/detection/detection.component.html new file mode 100644 index 0000000..0ba8e5c --- /dev/null +++ b/demo/src/app/detection/detection.component.html @@ -0,0 +1,8 @@ +

detection works!

+ + +Title:

{{ title }}

+ + +Age:

{{ age }}

+ diff --git a/demo/src/app/detection/detection.component.scss b/demo/src/app/detection/detection.component.scss new file mode 100644 index 0000000..e69de29 diff --git a/demo/src/app/detection/detection.component.spec.ts b/demo/src/app/detection/detection.component.spec.ts new file mode 100644 index 0000000..4d114f0 --- /dev/null +++ b/demo/src/app/detection/detection.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { DetectionComponent } from './detection.component'; + +describe('DetectionComponent', () => { + let component: DetectionComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ DetectionComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(DetectionComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/demo/src/app/detection/detection.component.ts b/demo/src/app/detection/detection.component.ts new file mode 100644 index 0000000..229daba --- /dev/null +++ b/demo/src/app/detection/detection.component.ts @@ -0,0 +1,45 @@ +import { AfterViewInit, ChangeDetectorRef, Component, OnInit } from '@angular/core'; + +// Detection. +import { ChangeDetector } from '../@detection/change-detector.class'; +import { ChangeDetectionHelper } from '../@detection/lib/change-detection-helper.abstract'; + +// Decorator. +import { ChangeDetection } from '../@detection/lib/change-detection.decorator'; + +@Component({ + selector: 'app-detection', + templateUrl: './detection.component.html', + styleUrls: ['./detection.component.scss'] +}) +@ChangeDetection({ + properties: { + 'title': true, + 'age': true, + } +}) +export class DetectionComponent + extends ChangeDetectionHelper + implements AfterViewInit, OnInit + { + + public age = 27; + public title = 'The book'; + + changeDetector!: ChangeDetector; + + constructor(changeDetectorRef: ChangeDetectorRef) { + super(changeDetectorRef); + } + + ngOnInit(): void { + this.detection = true; + // this.changeDetector.detection.disable(); + // this.changeDetector.detection.deactivate('age'); + this.age = 37; + } + + ngAfterViewInit(): void { + this.age = 47; + } +} diff --git a/demo/src/assets/.gitkeep b/demo/src/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/demo/src/environments/environment.prod.ts b/demo/src/environments/environment.prod.ts new file mode 100644 index 0000000..3612073 --- /dev/null +++ b/demo/src/environments/environment.prod.ts @@ -0,0 +1,3 @@ +export const environment = { + production: true +}; diff --git a/demo/src/environments/environment.ts b/demo/src/environments/environment.ts new file mode 100644 index 0000000..f56ff47 --- /dev/null +++ b/demo/src/environments/environment.ts @@ -0,0 +1,16 @@ +// This file can be replaced during build by using the `fileReplacements` array. +// `ng build` replaces `environment.ts` with `environment.prod.ts`. +// The list of file replacements can be found in `angular.json`. + +export const environment = { + production: false +}; + +/* + * For easier debugging in development mode, you can import the following file + * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. + * + * This import should be commented out in production mode because it will have a negative impact + * on performance if an error is thrown. + */ +// import 'zone.js/plugins/zone-error'; // Included with Angular CLI. diff --git a/demo/src/favicon.ico b/demo/src/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..997406ad22c29aae95893fb3d666c30258a09537 GIT binary patch literal 948 zcmV;l155mgP)CBYU7IjCFmI-B}4sMJt3^s9NVg!P0 z6hDQy(L`XWMkB@zOLgN$4KYz;j0zZxq9KKdpZE#5@k0crP^5f9KO};h)ZDQ%ybhht z%t9#h|nu0K(bJ ztIkhEr!*UyrZWQ1k2+YkGqDi8Z<|mIN&$kzpKl{cNP=OQzXHz>vn+c)F)zO|Bou>E z2|-d_=qY#Y+yOu1a}XI?cU}%04)zz%anD(XZC{#~WreV!a$7k2Ug`?&CUEc0EtrkZ zL49MB)h!_K{H(*l_93D5tO0;BUnvYlo+;yss%n^&qjt6fZOa+}+FDO(~2>G z2dx@=JZ?DHP^;b7*Y1as5^uphBsh*s*z&MBd?e@I>-9kU>63PjP&^#5YTOb&x^6Cf z?674rmSHB5Fk!{Gv7rv!?qX#ei_L(XtwVqLX3L}$MI|kJ*w(rhx~tc&L&xP#?cQow zX_|gx$wMr3pRZIIr_;;O|8fAjd;1`nOeu5K(pCu7>^3E&D2OBBq?sYa(%S?GwG&_0-s%_v$L@R!5H_fc)lOb9ZoOO#p`Nn`KU z3LTTBtjwo`7(HA6 z7gmO$yTR!5L>Bsg!X8616{JUngg_@&85%>W=mChTR;x4`P=?PJ~oPuy5 zU-L`C@_!34D21{fD~Y8NVnR3t;aqZI3fIhmgmx}$oc-dKDC6Ap$Gy>a!`A*x2L1v0 WcZ@i?LyX}70000 + + + + Indexeddb + + + + + + + + diff --git a/demo/src/main.ts b/demo/src/main.ts new file mode 100644 index 0000000..c7b673c --- /dev/null +++ b/demo/src/main.ts @@ -0,0 +1,12 @@ +import { enableProdMode } from '@angular/core'; +import { platformBrowserDynamic } from '@angular/platform-browser-dynamic'; + +import { AppModule } from './app/app.module'; +import { environment } from './environments/environment'; + +if (environment.production) { + enableProdMode(); +} + +platformBrowserDynamic().bootstrapModule(AppModule) + .catch(err => console.error(err)); diff --git a/demo/src/polyfills.ts b/demo/src/polyfills.ts new file mode 100644 index 0000000..429bb9e --- /dev/null +++ b/demo/src/polyfills.ts @@ -0,0 +1,53 @@ +/** + * This file includes polyfills needed by Angular and is loaded before the app. + * You can add your own extra polyfills to this file. + * + * This file is divided into 2 sections: + * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. + * 2. Application imports. Files imported after ZoneJS that should be loaded before your main + * file. + * + * The current setup is for so-called "evergreen" browsers; the last versions of browsers that + * automatically update themselves. This includes recent versions of Safari, Chrome (including + * Opera), Edge on the desktop, and iOS and Chrome on mobile. + * + * Learn more in https://angular.io/guide/browser-support + */ + +/*************************************************************************************************** + * BROWSER POLYFILLS + */ + +/** + * By default, zone.js will patch all possible macroTask and DomEvents + * user can disable parts of macroTask/DomEvents patch by setting following flags + * because those flags need to be set before `zone.js` being loaded, and webpack + * will put import in the top of bundle, so user need to create a separate file + * in this directory (for example: zone-flags.ts), and put the following flags + * into that file, and then add the following code before importing zone.js. + * import './zone-flags'; + * + * The flags allowed in zone-flags.ts are listed here. + * + * The following flags will work for all browsers. + * + * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame + * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick + * (window as any).__zone_symbol__UNPATCHED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames + * + * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js + * with the following flag, it will bypass `zone.js` patch for IE/Edge + * + * (window as any).__Zone_enable_cross_context_check = true; + * + */ + +/*************************************************************************************************** + * Zone JS is required by default for Angular itself. + */ +import 'zone.js'; // Included with Angular CLI. + + +/*************************************************************************************************** + * APPLICATION IMPORTS + */ diff --git a/demo/src/styles.scss b/demo/src/styles.scss new file mode 100644 index 0000000..90d4ee0 --- /dev/null +++ b/demo/src/styles.scss @@ -0,0 +1 @@ +/* You can add global styles to this file, and also import other style files */ diff --git a/demo/src/test.ts b/demo/src/test.ts new file mode 100644 index 0000000..c04c876 --- /dev/null +++ b/demo/src/test.ts @@ -0,0 +1,26 @@ +// This file is required by karma.conf.js and loads recursively all the .spec and framework files + +import 'zone.js/testing'; +import { getTestBed } from '@angular/core/testing'; +import { + BrowserDynamicTestingModule, + platformBrowserDynamicTesting +} from '@angular/platform-browser-dynamic/testing'; + +declare const require: { + context(path: string, deep?: boolean, filter?: RegExp): { + (id: string): T; + keys(): string[]; + }; +}; + +// First, initialize the Angular testing environment. +getTestBed().initTestEnvironment( + BrowserDynamicTestingModule, + platformBrowserDynamicTesting(), +); + +// Then we find all the tests. +const context = require.context('./', true, /\.spec\.ts$/); +// And load the modules. +context.keys().forEach(context); diff --git a/demo/tsconfig.app.json b/demo/tsconfig.app.json new file mode 100644 index 0000000..82d91dc --- /dev/null +++ b/demo/tsconfig.app.json @@ -0,0 +1,15 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/demo/tsconfig.json b/demo/tsconfig.json new file mode 100644 index 0000000..333c207 --- /dev/null +++ b/demo/tsconfig.json @@ -0,0 +1,33 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "es2020", + "module": "es2020", + "lib": [ + "es2020", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true, + "skipLibCheck": true + } +} diff --git a/demo/tsconfig.spec.json b/demo/tsconfig.spec.json new file mode 100644 index 0000000..092345b --- /dev/null +++ b/demo/tsconfig.spec.json @@ -0,0 +1,18 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "files": [ + "src/test.ts", + "src/polyfills.ts" + ], + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} From c41d9718a2e9b09cb3c854c1c938e5f3a1ad2ce8 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sat, 5 Oct 2024 23:45:32 +0000 Subject: [PATCH 16/22] chore: add angular logo. --- angular_gradient.png | Bin 0 -> 173827 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 angular_gradient.png diff --git a/angular_gradient.png b/angular_gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..2f17323605272fe44ccc309aab339f24185cc124 GIT binary patch literal 173827 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 literal 0 HcmV?d00001 From 15c5b74784508166793305492bd63a5a09536c4e Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sun, 6 Oct 2024 02:45:55 +0000 Subject: [PATCH 17/22] chore: add funding. --- .github/FUNDING.YML | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .github/FUNDING.YML diff --git a/.github/FUNDING.YML b/.github/FUNDING.YML new file mode 100644 index 0000000..514fb22 --- /dev/null +++ b/.github/FUNDING.YML @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [angular-package] # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +patreon: angularpackage # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] \ No newline at end of file From 88462e273084b53868351976744ed917d57a1315 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sun, 6 Oct 2024 02:46:20 +0000 Subject: [PATCH 18/22] chore(package): update. --- package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 2675aae..d8b5823 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,9 @@ "access": "public", "registry": "https://registry.npmjs.org" }, + "peerDependencies": { + "@angular-package/property": "^1.0.2-alpha" + }, "devDependencies": { "stylelint": "^15.10.3", "stylelint-config-prettier-scss": "^1.0.0", @@ -51,8 +54,5 @@ "type": "github", "url": "https://github.com/sponsors/angular-package" } - ], - "peerDependencies": { - "@angular-package/property": "^1.0.2-alpha" - } + ] } From dba2f6d6551aa4385b9377faf75c2ba457a47c3a Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sun, 6 Oct 2024 02:47:32 +0000 Subject: [PATCH 19/22] docs(README.md): prepare to update in change-detection. --- README.md | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 57be5d2..7cd6c9a 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,13 @@ The angular-package supports the development process of [angular](https://angular.io)-based applications in varied ways through the thoughtful, reusable, easy-to-use small pieces of code called packages. +
+ + + ## Detection -Improve application performance. +Detection in property on change to improve application performance. [![Gitter][gitter-badge]][gitter-chat] [![Discord][discord-badge]][discord-channel] @@ -27,7 +31,6 @@ Improve application performance. [![GitHub Sponsors][github-badge-sponsor]][github-sponsor-link] [![Patreon Sponsors][patreon-badge]][patreon-link] -
The package is **free** to use. If you enjoy it, please consider donating via [fiat](https://docs.angular-package.dev/v/sass/donate/fiat), [Revolut platform](https://checkout.revolut.com/pay/048b10a3-0e10-42c8-a917-e3e9cb4c8e29) or [cryptocurrency](https://spectrecss.angular-package.dev/donate/thb-cryptocurrency) the [@angular-package](https://github.com/sponsors/angular-package) for further development. ♥ @@ -47,6 +50,7 @@ The package is **free** to use. If you enjoy it, please consider donating via [f * [Versioning](#versioning) * [License](#license) +
## Skeleton @@ -60,7 +64,7 @@ Copy this package to the `packages/detection` folder of the [skeleton workspace] ## Code scaffolding Run `ng generate component component-name --project detection` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project detection`. -> Note: Don't forget to add `--project detection` or else it will be added to the default project in your `angular.json` file. +> Note: Don't forget to add `--project detection` or else it will be added to the default project in your `angular.json` file. ### Build @@ -180,10 +184,10 @@ MIT © angular-package ([license][detection-license]) - [detection-npm-badge-svg]: https://badge.fury.io/js/@angular-package%2Fdetection.svg - [detection-npm-badge-png]: https://badge.fury.io/js/@angular-package%2Fdetection.png - [detection-npm-badge]: https://badge.fury.io/js/@angular-package%2Fdetection - [detection-npm-readme]: https://www.npmjs.com/package/@angular-package/detection#readme + [detection-npm-badge-svg]: https://badge.fury.io/js/@angular-package%2Fchange-detection.svg + [detection-npm-badge-png]: https://badge.fury.io/js/@angular-package%2Fchange-detection.png + [detection-npm-badge]: https://badge.fury.io/js/@angular-package%2Fchange-detection + [detection-npm-readme]: https://www.npmjs.com/package/@angular-package/change-detection#readme [detection-github-readme]: https://github.com/angular-package/detection#readme From 56ffa78d210076ff223df6048eed888fc6a97227 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sun, 6 Oct 2024 02:49:52 +0000 Subject: [PATCH 20/22] docs(README.md): add packages. --- README.md | 268 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 261 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 7cd6c9a..cd2649a 100644 --- a/README.md +++ b/README.md @@ -131,6 +131,37 @@ How do I know when to release 1.0.0? MIT © angular-package ([license][detection-license]) +## Packages + +Useful and simple to use packages. + +| Package | Description | Status | +| :------------------------------------------- | :---------------------------------------------------------------- | -----: | +| [callback][callback-github-readme] | Manages the callback [`function`][js-function]. | [![npm version][callback-npm-badge-png]][callback-npm-badge] | +| [change-detection][cd-github-readme] | Improves application performance. | [![npm version][cd-npm-badge-png]][cd-npm-badge] | +| [component-loader][cl-github-readme] | Handles dynamic loading components. | [![npm version][cl-npm-badge-png]][cl-npm-badge] | +| [core][core-github-readme] | Core features. | [![npm version][core-npm-badge-png]][core-npm-badge] | +| [error][error-github-readme] | Manages an [`Error`][js-error]. | [![npm version][error-npm-badge-png]][error-npm-badge] | +| [indexeddb][indexeddb-github-readme] | Wrapper to IndexedDB client-side storage. | [![npm version][indexeddb-npm-badge-png]][indexeddb-npm-badge] | +| name | The name with prefix and suffix. | ![inprogress] | +| preferences | Preferences, settings, options, configuration and setup in steps. | ![inprogress] | +| [prism][prism-github-readme] | [`Prism`][prism-js] highlighter module. | [![npm version][prism-npm-badge-png]][prism-npm-badge] | +| [property][property-github-readme] | Handles object properties. | [![npm version][property-npm-badge-png]][property-npm-badge] | +| [range][range-github-readme] | The range between a minimum and maximum. | [![npm version][range-npm-badge-png]][range-npm-badge] | +| [reactive][reactive-github-readme] | Automatize the process of creating some rxjs features. | [![npm version][reactive-npm-badge-png]][reactive-npm-badge] | +| [sass][sass-github-readme] | Extension for sass modules and new modules. | [![npm version][sass-npm-badge-png]][sass-npm-badge] | +| [sass-list][sass-list-github-readme] | Modified list Sass module. | [![npm version][sass-list-npm-badge-png]][sass-list-npm-badge] | +| [sass-string][sass-string-github-readme] | Modified string Sass module. | [![npm version][sass-string-npm-badge-png]][sass-string-npm-badge] | +| [spectre.css][spectrecss-github-readme] | Modified Spectre.css - a lightweight, responsive, and modern CSS framework originally designed by Yan Zhu. | [![npm version][spectrecss-npm-badge-png]][spectrecss-npm-badge] | +| storage | The storage of data under allowed names. | ![inprogress] | +| tag | Any tag with optional attributes. | ![inprogress] | +| [testing][testing-github-readme] | Support for testing other packages. | [![npm version][testing-npm-badge-png]][testing-npm-badge] | +| text | Text on the template with replaceable tags. | ![inprogress] | +| [type][type-github-readme] | Common types, type guards, and type checkers. | [![npm version][type-npm-badge-png]][type-npm-badge] | +| [ui][ui-github-readme] | User interface. | [![npm version][ui-npm-badge-png]][ui-npm-badge] | +| [wrapper][wrapper-github-readme] | Wrap the text with the opening and closing chars. | [![npm version][wrapper-npm-badge-png]][wrapper-npm-badge] | + + [github-badge-sponsor]: https://img.shields.io/static/v1?label=Sponsor&message=%E2%9D%A4&logo=GitHub&link=https://github.com/sponsors/angular-package [github-sponsor-link]: https://github.com/sponsors/angular-package @@ -168,7 +199,7 @@ MIT © angular-package ([license][detection-license]) [git-commit-karma]: http://karma-runner.github.io/0.10/dev/git-commit-msg.html [git-commit-conventional]: https://www.conventionalcommits.org/en/v1.0.0/ - + [detection-badge-issues]: https://img.shields.io/github/issues/angular-package/detection [detection-badge-forks]: https://img.shields.io/github/forks/angular-package/detection @@ -182,12 +213,235 @@ MIT © angular-package ([license][detection-license]) [detection-github-changelog]: https://github.com/angular-package/detection/blob/main/CHANGELOG.md - + + + [callback-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fcallback.svg + [callback-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fcallback.png + [callback-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fcallback + [callback-npm-readme]: https://www.npmjs.com/package/@angular-package/callback#readme + + + [callback-github-readme]: https://github.com/angular-package/callback#readme + + [package-callback-callbackpayload]: https://github.com/angular-package/callback#callbackpayload + [package-callback-resultcallback]: https://github.com/angular-package/callback#resultcallback + + + + [cd-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fchange-detection.svg + [cd-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fchange-detection.png + [cd-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fchange-detection + [cd-npm-readme]: https://www.npmjs.com/package/@angular-package/change-detection#readme + + + [cd-github-readme]: https://github.com/angular-package/change-detection#readme + + + + [cl-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fcomponent-loader.svg + [cl-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fcomponent-loader.png + [cl-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fcomponent-loader + [cl-npm-readme]: https://www.npmjs.com/package/@angular-package/component-loader#readme + + + [cl-github-readme]: https://github.com/angular-package/component-loader#readme + + + + [core-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fcore.svg + [core-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fcore.png + [core-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fcore + [core-npm-readme]: https://www.npmjs.com/package/@angular-package/core#readme + + + [core-github-readme]: https://github.com/angular-package/core#readme + + + + [error-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ferror.svg + [error-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ferror.png + [error-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ferror + [error-npm-readme]: https://www.npmjs.com/package/@angular-package/error#readme + + + [error-github-readme]: https://github.com/angular-package/error#readme + + + + [indexeddb-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Findexeddb.svg + [indexeddb-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Findexeddb.png + [indexeddb-npm-badge]: https://badge.fury.io/js/%40angular-package%2Findexeddb + [indexeddb-npm-readme]: https://www.npmjs.com/package/@angular-package/indexeddb#readme + + + [indexeddb-github-readme]: https://github.com/angular-package/indexeddb#readme + + + + [name-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fname.svg + [name-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fname.png + [name-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fname + [name-npm-readme]: https://www.npmjs.com/package/@angular-package/name#readme + + + [name-github-readme]: https://github.com/angular-package/name#readme + + + + [preferences-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fpreferences.svg + [preferences-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fpreferences.png + [preferences-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fpreferences + [preferences-npm-readme]: https://www.npmjs.com/package/@angular-package/preferences#readme + + + [preferences-github-readme]: https://github.com/angular-package/preferences#readme + + + + [prism-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fprism.svg + [prism-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fprism.png + [prism-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fprism + [prism-npm-readme]: https://www.npmjs.com/package/@angular-package/prism#readme + + + [prism-github-readme]: https://github.com/angular-package/prism#readme + + + + [property-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fproperty.svg + [property-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fproperty.png + [property-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fproperty + [property-npm-readme]: https://www.npmjs.com/package/@angular-package/property#readme + + + [property-github-readme]: https://github.com/angular-package/property#readme + + + + [range-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Frange.svg + [range-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Frange.png + [range-npm-badge]: https://badge.fury.io/js/%40angular-package%2Frange + [range-npm-readme]: https://www.npmjs.com/package/@angular-package/range#readme + + + [range-github-readme]: https://github.com/angular-package/range#readme + + + + [reactive-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Freactive.svg + [reactive-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Freactive.png + [reactive-npm-badge]: https://badge.fury.io/js/%40angular-package%2Freactive + [reactive-npm-readme]: https://www.npmjs.com/package/@angular-package/reactive#readme + + + [reactive-github-readme]: https://github.com/angular-package/reactive#readme + + + + [sass-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fsass.svg + [sass-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fsass.png + [sass-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fsass + [sass-npm-readme]: https://www.npmjs.com/package/@angular-package/sass#readme + + + [sass-github-readme]: https://github.com/angular-package/sass#readme + + + + [sass-list-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fsass-list.svg + [sass-list-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fsass-list.png + [sass-list-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fsass-list + [sass-list-npm-readme]: https://www.npmjs.com/package/@angular-package/sass-list#readme + + + [sass-list-github-readme]: https://github.com/angular-package/sass-string#readme + + + + [sass-string-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fsass-string.svg + [sass-string-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fsass-string.png + [sass-string-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fsass-string + [sass-string-npm-readme]: https://www.npmjs.com/package/@angular-package/sass-string#readme + + + [sass-string-github-readme]: https://github.com/angular-package/sass-string#readme + + + + [spectrecss-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fspectrecss.svg + [spectrecss-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fspectrecss.png + [spectrecss-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fspectre.css + [spectrecss-npm-readme]: https://www.npmjs.com/package/@angular-package/spectre.css#readme + + + [spectrecss-github-readme]: https://github.com/angular-package/spectre.css#readme + + + + [storage-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fstorage.svg + [storage-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fstorage.png + [storage-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fstorage + [storage-npm-readme]: https://www.npmjs.com/package/@angular-package/storage#readme + + + [storage-github-readme]: https://github.com/angular-package/storage#readme + + + + [tag-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftag.svg + [tag-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftag.png + [tag-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftag + [tag-npm-readme]: https://www.npmjs.com/package/@angular-package/tag#readme + + + [tag-github-readme]: https://github.com/angular-package/tag#readme + + + + [testing-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftesting.svg + [testing-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftesting.png + [testing-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftesting + [testing-npm-readme]: https://www.npmjs.com/package/@angular-package/testing#readme + + + [testing-github-readme]: https://github.com/angular-package/testing#readme + + + + [text-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftext.svg + [text-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftext.png + [text-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftext + [text-npm-readme]: https://www.npmjs.com/package/@angular-package/text#readme + + + [text-github-readme]: https://github.com/angular-package/text#readme + + + + [type-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Ftype.svg + [type-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Ftype.png + [type-npm-badge]: https://badge.fury.io/js/%40angular-package%2Ftype + [type-npm-readme]: https://www.npmjs.com/package/@angular-package/type#readme + [package-type-resultcallback]: https://github.com/angular-package/type#resultcallback + + + [type-github-readme]: https://github.com/angular-package/type#readme + + + + [ui-npm-badge-svg]: https://badge.fury.io/js/%40angular-package%2Fui.svg + [ui-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fui.png + [ui-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fui + [ui-npm-readme]: https://www.npmjs.com/package/@angular-package/ui#readme + + + [ui-github-readme]: https://github.com/angular-package/ui#readme + + - [detection-npm-badge-svg]: https://badge.fury.io/js/@angular-package%2Fchange-detection.svg - [detection-npm-badge-png]: https://badge.fury.io/js/@angular-package%2Fchange-detection.png - [detection-npm-badge]: https://badge.fury.io/js/@angular-package%2Fchange-detection - [detection-npm-readme]: https://www.npmjs.com/package/@angular-package/change-detection#readme + [wrapper-npm-badge-png]: https://badge.fury.io/js/%40angular-package%2Fwrapper.png + [wrapper-npm-badge]: https://badge.fury.io/js/%40angular-package%2Fwrapper + [wrapper-npm-readme]: https://www.npmjs.com/package/@angular-package/wrapper#readme - [detection-github-readme]: https://github.com/angular-package/detection#readme + [wrapper-github-readme]: https://github.com/angular-package/wrapper#readme From f0d16178750f1f35b810827c3e230c9316000810 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sun, 6 Oct 2024 02:51:07 +0000 Subject: [PATCH 21/22] docs(README.md): add statuses. --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index cd2649a..13f8da0 100644 --- a/README.md +++ b/README.md @@ -173,9 +173,10 @@ Useful and simple to use packages. [experimental]: https://img.shields.io/badge/-Experimental-orange -[fix]: https://img.shields.io/badge/-Fix-red -[new]: https://img.shields.io/badge/-eNw-green -[update]: https://img.shields.io/badge/-Update-red +[fix]: https://img.shields.io/badge/-fix-red +[new]: https://img.shields.io/badge/-new-green +[update]: https://img.shields.io/badge/-update-red +[inprogress]: https://img.shields.io/badge/-In%20progress-gray [documentation]: https://img.shields.io/badge/-Documentation-informational [demonstration]: https://img.shields.io/badge/-Demonstration-green From a085e87f0288f31133aeac526ccc635a3d233a32 Mon Sep 17 00:00:00 2001 From: Scibor Rudnicki Date: Sun, 6 Oct 2024 03:04:14 +0000 Subject: [PATCH 22/22] chore: demo update. --- demo/package-lock.json | 44 ++++++++++++++---- demo/package.json | 2 + .../app/@detection/change-detection.class.ts | 26 +++++++++-- .../app/@detection/change-detector.class.ts | 20 ++++++--- .../interface/detector-options.interface.ts | 9 ++-- .../lib/change-detection-helper.abstract.ts | 7 +++ .../lib/change-detection.decorator.ts | 10 ++--- .../@detection/lib/configure-detector.func.ts | 30 +++++++++++-- .../@detection/lib/detector-options.const.ts | 3 ++ .../type/detection-properties.type.ts | 5 ++- demo/src/app/detection/detection.component.ts | 45 +++++++++++++++---- 11 files changed, 164 insertions(+), 37 deletions(-) diff --git a/demo/package-lock.json b/demo/package-lock.json index 12abb35..c51f3e5 100644 --- a/demo/package-lock.json +++ b/demo/package-lock.json @@ -1,14 +1,14 @@ { - "name": "indexeddb", + "name": "detection", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "indexeddb", + "name": "detection", "version": "0.0.0", "dependencies": { - "@angular-package/indexeddb": "^1.0.1-alpha", + "@angular-package/change-detection": "^1.0.0", "@angular/animations": "^14.2.0", "@angular/common": "^14.2.0", "@angular/compiler": "^14.2.0", @@ -35,6 +35,7 @@ "typescript": "~4.7.2" }, "peerDependencies": { + "@angular-package/property": "^1.0.3-alpha", "@angular-package/spectre.css": "^1.0.0-alpha.3.0.1", "@angular/material": "^13.3.9" } @@ -340,10 +341,29 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, - "node_modules/@angular-package/indexeddb": { - "version": "1.0.1-alpha", - "resolved": "https://registry.npmjs.org/@angular-package/indexeddb/-/indexeddb-1.0.1-alpha.tgz", - "integrity": "sha512-iBfCC4+SUz8YOBf0o3KyBjhoX7K+2YtwpD8iAyATBr6poDedaBRHzo1Ir+3j6ZoOXuA6nNSO60eOX8/IkRnNkg==", + "node_modules/@angular-package/change-detection": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@angular-package/change-detection/-/change-detection-1.0.0.tgz", + "integrity": "sha512-kjdfpeSu/LOBLcJCi9VO4TCkHdJ/EwNH9OtFJMlOzTN97jTxh2Bpef1kjjbeRBbCktoAEgPsI6eZFJ+i2Mmunw==", + "license": "MIT", + "peerDependencies": { + "@angular-package/core": "^1.0.1" + } + }, + "node_modules/@angular-package/core": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@angular-package/core/-/core-1.0.1.tgz", + "integrity": "sha512-hfJGuIO1PqVOz7Q/LcsVjaA74/IMCUU/Mb0fMdY4Cej3t4MU4RKLKZtmUcclHhj3hP04LZUUOIM80hUrEM4CUw==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "lodash-es": "^4.17.7" + } + }, + "node_modules/@angular-package/property": { + "version": "1.0.3-alpha", + "resolved": "https://registry.npmjs.org/@angular-package/property/-/property-1.0.3-alpha.tgz", + "integrity": "sha512-yOIZeiPZzcucqU0Oj63u/qDSb1GZGYTmGQGRuxfiSLDptjpQ60qd7QGhTkWDNXm6G7+d8rL2iFbb6r2wGa4WQQ==", "funding": [ { "type": "individual", @@ -362,7 +382,8 @@ "url": "https://github.com/sponsors/angular-package" } ], - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@angular-package/spectre.css": { "version": "1.0.0-alpha.3.0.1", @@ -7767,6 +7788,13 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT", + "peer": true + }, "node_modules/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", diff --git a/demo/package.json b/demo/package.json index 647c190..3d19b54 100644 --- a/demo/package.json +++ b/demo/package.json @@ -10,6 +10,7 @@ }, "private": true, "dependencies": { + "@angular-package/change-detection": "^1.0.0", "@angular/animations": "^14.2.0", "@angular/common": "^14.2.0", "@angular/compiler": "^14.2.0", @@ -36,6 +37,7 @@ "typescript": "~4.7.2" }, "peerDependencies": { + "@angular-package/property": "^1.0.3-alpha", "@angular-package/spectre.css": "^1.0.0-alpha.3.0.1", "@angular/material": "^13.3.9" } diff --git a/demo/src/app/@detection/change-detection.class.ts b/demo/src/app/@detection/change-detection.class.ts index c6616aa..ddaca50 100644 --- a/demo/src/app/@detection/change-detection.class.ts +++ b/demo/src/app/@detection/change-detection.class.ts @@ -2,11 +2,9 @@ import { ChangeDetectorRef } from '@angular/core'; // Property. -// import { Property } from '../../../../../property/src/lib'; import { Property } from '@angular-package/property'; // Type. -// import { SetterCallback } from '../../../../../property/src/type'; import { SetterCallback } from '@angular-package/property'; import { DetectionProperties } from './type/detection-properties.type'; @@ -16,6 +14,7 @@ import { DetectionProperties } from './type/detection-properties.type'; export class ChangeDetection { /** * Deactivated properties. + * @angularpackage */ public get deactivated(): Set { return this.#deactivated; @@ -39,7 +38,7 @@ export class ChangeDetection { } /** - * + * @angularpackage */ public get properties() { return this.#properties; @@ -52,21 +51,25 @@ export class ChangeDetection { /** * Deactivated properties. + * @angularpackage */ #deactivated: Set = new Set(); /** * Component detection status. + * @angularpackage */ #detection = false; /** * Private property of `Property` handles inject detection to specified properties. + * @angularpackage */ #property!: Property; /** * Detection properties. + * @angularpackage */ #properties: DetectionProperties = {}; @@ -121,6 +124,23 @@ export class ChangeDetection { return this; } + /** + * + * @param key + * @returns + * @angularpackage + */ + public detect(key?: keyof Cmp): this { + if (key) { + if (this.isDeactivated(key) === false) { + this.#changeDetectorRef.detectChanges(); + } + } else { + this.#changeDetectorRef.detectChanges(); + } + return this; + } + /** * Disables detection in the component, which means detectable properties don't perform `detectChanges` on set. * @returns The return value is an instance of `ChangeDetector`. diff --git a/demo/src/app/@detection/change-detector.class.ts b/demo/src/app/@detection/change-detector.class.ts index 5aeff6c..6587341 100644 --- a/demo/src/app/@detection/change-detector.class.ts +++ b/demo/src/app/@detection/change-detector.class.ts @@ -5,7 +5,6 @@ import { ChangeDetectorRef } from '@angular/core'; import { ChangeDetection } from './change-detection.class'; // Type. -// import { SetterCallback } from '../../../../../property/src/type'; import { SetterCallback } from '@angular-package/property'; /** @@ -70,9 +69,6 @@ export class ChangeDetector { // Set the detector to use. this.#detector = component[this.#changeDetectorRefKey] as any; - // Detach component on initialize to use `detectChanges()`. - this.detach(); - // Detection. this.#detection = new ChangeDetection( this.#changeDetectorRefKey, @@ -80,6 +76,9 @@ export class ChangeDetector { keys, callbackFn ); + + // Detach component on initialize to use `detectChanges()`. + this.detach(); } } @@ -89,7 +88,16 @@ export class ChangeDetector { * @angularpackage */ public detach(): this { - setTimeout(() => this.#detector && (this.#detector.detach(), (this.#detached = true)), 0); + (setTimeout(() => this.#detector && this.#detector.detach(), 0), this.#detached = true); + return this; + } + + /** + * + * @returns + */ + public detect(key?: keyof Cmp): this { + setTimeout(() => this.#detector && this.#detection.detect(key), 0); return this; } @@ -99,7 +107,7 @@ export class ChangeDetector { * @angularpackage */ public reattach(): this { - setTimeout(() => this.#detector && (this.#detector.reattach(), (this.#detached = false))); + (setTimeout(() => this.#detector && this.#detector.reattach()), this.#detached = false); return this; } diff --git a/demo/src/app/@detection/interface/detector-options.interface.ts b/demo/src/app/@detection/interface/detector-options.interface.ts index 2aed0ac..9a4e6ef 100644 --- a/demo/src/app/@detection/interface/detector-options.interface.ts +++ b/demo/src/app/@detection/interface/detector-options.interface.ts @@ -3,7 +3,10 @@ */ export interface DetectorOptions { changeDetector: 'changeDetector' | string; - detached: 'detached' | string; - detection: 'detection' | string; - properties: 'properties' | string; + detach: 'detach' | string; // Method + detached: 'detached' | string; // Property + detect: 'detect' | string; // Property + detection: 'detection' | string; // Property + properties: 'properties' | string; // Object + reattach: 'reattach' | string; // Method } diff --git a/demo/src/app/@detection/lib/change-detection-helper.abstract.ts b/demo/src/app/@detection/lib/change-detection-helper.abstract.ts index bc7c5bb..ff99c9e 100644 --- a/demo/src/app/@detection/lib/change-detection-helper.abstract.ts +++ b/demo/src/app/@detection/lib/change-detection-helper.abstract.ts @@ -1,6 +1,9 @@ // Angular. import { ChangeDetectorRef } from '@angular/core'; +// Class. +import { ChangeDetector } from '../change-detector.class'; + // Type. import { DetectionProperties } from '../type/detection-properties.type'; @@ -8,9 +11,13 @@ import { DetectionProperties } from '../type/detection-properties.type'; * Helper class for component. */ export abstract class ChangeDetectionHelper { + public changeDetector?: ChangeDetector; + public detach?: () => Cmp; public detached?: boolean; + public detect?: (key?: keyof Cmp) => Cmp; public detection?: boolean; public readonly properties?: DetectionProperties; + public reattach?: () => Cmp; /** * diff --git a/demo/src/app/@detection/lib/change-detection.decorator.ts b/demo/src/app/@detection/lib/change-detection.decorator.ts index 9709bfe..3279c5b 100644 --- a/demo/src/app/@detection/lib/change-detection.decorator.ts +++ b/demo/src/app/@detection/lib/change-detection.decorator.ts @@ -13,14 +13,14 @@ import { DetectionProperties } from '../type/detection-properties.type'; * @param options * @returns */ -export function ChangeDetection({}: { +export function ChangeDetection( properties: DetectionProperties, - options?: DetectorOptions -}): ClassDecorator { + options?: Partial +): ClassDecorator { return (component: Function): any => configureDetector( component, - arguments[0].properties, - arguments[0].options, + properties, + options as any, ); } diff --git a/demo/src/app/@detection/lib/configure-detector.func.ts b/demo/src/app/@detection/lib/configure-detector.func.ts index c235ecf..2f57f49 100644 --- a/demo/src/app/@detection/lib/configure-detector.func.ts +++ b/demo/src/app/@detection/lib/configure-detector.func.ts @@ -1,4 +1,3 @@ - // Class. import { ChangeDetector } from '../change-detector.class'; @@ -22,13 +21,14 @@ export const configureDetector = ( properties: DetectionProperties, options: DetectorOptions = DETECTOR_OPTIONS ): void => { - if ((component)) { - if ((options)) { + if (component) { + if (options) { options = Object.assign(DETECTOR_OPTIONS, options); } Object.defineProperties(component.prototype, { $$changeDetector: { writable: true }, + // Change ChangeDetector. [options.changeDetector]: { get(): ChangeDetector { if (this.$$changeDetector === undefined) { @@ -41,8 +41,18 @@ export const configureDetector = ( } }, + // Detach. + [options.detach]: { + get(): () => Cmp { + return () => ((this[options.changeDetector] as ChangeDetector).detach(), this); + } + }, + // Detaches the component from the change detector tree if `true`. [options.detached]: { + get(): boolean { + return (this[options.changeDetector] as ChangeDetector).detached; + }, set(value: boolean): void { if (value === true) { (this[options.changeDetector] as ChangeDetector).detach(); @@ -52,6 +62,13 @@ export const configureDetector = ( } }, + // Detect changes + [options.detect]: { + get(): (key?: keyof Cmp) => Cmp { + return (key?: keyof Cmp) => ((this[options.changeDetector] as ChangeDetector).detect(key), this); + } + }, + // Enables detection in the component, which means detectable(not deactivated) properties perform detectChanges on set. [options.detection]: { set(value: boolean): void { @@ -70,6 +87,13 @@ export const configureDetector = ( } }, + // Reattach. + [options.reattach]: { + get(): () => Cmp { + return () => ((this[options.changeDetector] as ChangeDetector).reattach(), this); + } + }, + }); } }; diff --git a/demo/src/app/@detection/lib/detector-options.const.ts b/demo/src/app/@detection/lib/detector-options.const.ts index f192c1e..892d7af 100644 --- a/demo/src/app/@detection/lib/detector-options.const.ts +++ b/demo/src/app/@detection/lib/detector-options.const.ts @@ -6,7 +6,10 @@ import { DetectorOptions } from '../interface/detector-options.interface'; */ export const DETECTOR_OPTIONS: DetectorOptions = { changeDetector: 'changeDetector', + detach: 'detach', + detect: 'detect', detached: 'detached', detection: 'detection', properties: 'properties', + reattach: 'reattach' }; diff --git a/demo/src/app/@detection/type/detection-properties.type.ts b/demo/src/app/@detection/type/detection-properties.type.ts index b945be0..5a02d7f 100644 --- a/demo/src/app/@detection/type/detection-properties.type.ts +++ b/demo/src/app/@detection/type/detection-properties.type.ts @@ -6,7 +6,10 @@ export type DetectionProperties = Partial>; diff --git a/demo/src/app/detection/detection.component.ts b/demo/src/app/detection/detection.component.ts index 229daba..b9310b3 100644 --- a/demo/src/app/detection/detection.component.ts +++ b/demo/src/app/detection/detection.component.ts @@ -1,7 +1,6 @@ import { AfterViewInit, ChangeDetectorRef, Component, OnInit } from '@angular/core'; // Detection. -import { ChangeDetector } from '../@detection/change-detector.class'; import { ChangeDetectionHelper } from '../@detection/lib/change-detection-helper.abstract'; // Decorator. @@ -13,10 +12,8 @@ import { ChangeDetection } from '../@detection/lib/change-detection.decorator'; styleUrls: ['./detection.component.scss'] }) @ChangeDetection({ - properties: { - 'title': true, - 'age': true, - } + 'title': true, + 'age': true, }) export class DetectionComponent extends ChangeDetectionHelper @@ -26,7 +23,7 @@ export class DetectionComponent public age = 27; public title = 'The book'; - changeDetector!: ChangeDetector; + // changeDetector!: ChangeDetector; constructor(changeDetectorRef: ChangeDetectorRef) { super(changeDetectorRef); @@ -34,12 +31,44 @@ export class DetectionComponent ngOnInit(): void { this.detection = true; - // this.changeDetector.detection.disable(); - // this.changeDetector.detection.deactivate('age'); + + // Disable detection in component. + this.changeDetector?.detection.disable(); + + // Disable property age detection. + this.changeDetector?.detection.deactivate('age'); + this.age = 37; } ngAfterViewInit(): void { this.age = 47; + + // changeDetector. + console.info(`Works!`, this.changeDetector); + + // detach. + if (this.detach) { + console.info(`Works!`, this.detach(), this.detached); + } + + if (this.detached) { + console.info(`Works!`, this.detached = false); + } + + // detect. + if (this.detect) { + console.info(`Works!`, this.detect()); + } + + // properties. + if (this.properties) { + console.info(`Works!`, this.properties); + } + + if (this.reattach) { + console.info(`Works!`, this.reattach(), this.detached); + } + } }