diff --git a/.github/workflows/node.js.yml b/.github/workflows/node.js.yml index c744c92..9763c7b 100644 --- a/.github/workflows/node.js.yml +++ b/.github/workflows/node.js.yml @@ -14,21 +14,22 @@ jobs: runs-on: ubuntu-latest - strategy: - matrix: - node-version: [19.x, 20.x, 21.x] - # See supported Node.js release schedule at https://nodejs.org/en/about/releases/ - steps: - - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - cache: 'npm' - - run: npm install - - run: npm run build - - run: npm test - - run: sudo apt-get install xvfb - - run: xvfb-run --auto-servernum npm run test:chrome - - run: xvfb-run --auto-servernum npm run test:firefox + - uses: actions/checkout@v3 + - name: Use Node.js 20.x + uses: actions/setup-node@v3 + with: + node-version: "20.x" + cache: "npm" + - run: npm install + - run: npm run build + - run: npm test + - run: sudo apt-get install xvfb + - run: xvfb-run --auto-servernum npm run test:chrome + - run: xvfb-run --auto-servernum npm run test:firefox + + - name: Publish to npm + if: github.ref == 'refs/heads/master' && github.event_name == 'push' + env: + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + run: npm publish diff --git a/README.md b/README.md index 05dd64a..71a3286 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,11 @@ PureMVC is a lightweight framework for creating applications based upon the clas * [API Docs](https://puremvc.org/pages/docs/JS/es/) * [Legacy Implementation](https://github.com/PureMVC/puremvc-js-multicore-framework/tree/1.0.1) +## Installation +```shell +npm i @puremvc/puremvc-js-multicore-framework +``` + ## Demos * [Frontend Demo: EmployeeAdmin](https://github.com/PureMVC/puremvc-js-demo-employeeadmin) * [Backend Demo: Employee Admin NodeJS Microservice](https://github.com/PureMVC/puremvc-js-demo-microservice-employeeadmin) @@ -19,7 +24,7 @@ PureMVC is a lightweight framework for creating applications based upon the clas * [React Native](https://en.wikipedia.org/wiki/React_Native) ## Status -Production - [Version 2.0.7](https://github.com/PureMVC/puremvc-js-multicore-framework/blob/master/VERSION) +Production - [Version 2.0.8](https://github.com/PureMVC/puremvc-js-multicore-framework/blob/master/VERSION) #### Documentation - https://jsdoc.app/about-commandline.html diff --git a/VERSION b/VERSION index 654b7bd..adeb862 100644 --- a/VERSION +++ b/VERSION @@ -1,10 +1,10 @@ PureMVC MultiCore Framework for JavaScript -------------------------------------------------------------------------- -Release Date: 8/14/24 +Release Date: 9/4/24 Platform: JavaScript Version: 2 Revision: 0 - Minor: 7 + Minor: 8 Authors: Saad Shams : David Foley : Cliff Hall @@ -17,3 +17,4 @@ Release Date: 8/14/24 2.0.5 - NPM package borked for cjs 2.0.6 - NPM package bundling the ESM/CommonJS support 2.0.7 - Finally? NPM bundling +2.0.8 - CI/CD Pipeline diff --git a/bin/cjs/puremvc.cjs b/bin/cjs/index.cjs similarity index 98% rename from bin/cjs/puremvc.cjs rename to bin/cjs/index.cjs index b997a61..f5dc90a 100644 --- a/bin/cjs/puremvc.cjs +++ b/bin/cjs/index.cjs @@ -34,12 +34,12 @@ class Observer { *

The notification method on the interested object should take * one parameter of type `Notification`

* - * @param {function(Notification):void} notifyMethod - * @param {Object} notifyContext + * @param {function(Notification):void | null} [notify = null] + * @param {Object | null} [context = null] */ - constructor(notifyMethod, notifyContext) { - this._notifyMethod = notifyMethod; - this._notifyContext = notifyContext; + constructor(notify = null, context = null) { + this._notifyMethod = notify; + this._notifyContext = context; } /** @@ -420,10 +420,10 @@ class Controller { * passing the unique key for this instance * `Controller.getInstance( multitonKey )`

* - * @throws {Error} Error if instance for this Multiton key has already been constructed - * * @constructor * @param {string} key + * + * @throws {Error} Error if instance for this Multiton key has already been constructed */ constructor(key) { if (Controller.instanceMap[key] != null) throw new Error(Controller.MULTITON_MSG); @@ -592,7 +592,6 @@ class Controller { * * @class Model */ - class Model { /** @@ -722,7 +721,6 @@ class Model { */ /** - * * A base `Notification` implementation. * *

PureMVC does not rely upon underlying event models such @@ -780,7 +778,7 @@ class Notification { /** * Get the body of the `Notification` instance. * - * @returns {Object} + * @returns {Object | null} */ get body() { return this._body; @@ -858,6 +856,7 @@ class Facade { * * @constructor * @param {string} key + * * @throws {Error} Error if instance for this Multiton key has already been constructed */ constructor(key) { @@ -1022,7 +1021,7 @@ class Facade { } /** - * Check if a Proxy is registered + * Check if a `Proxy` is registered * * @param {string} proxyName * @returns {boolean} whether a Proxy is currently registered with the given `proxyName`. @@ -1061,7 +1060,7 @@ class Facade { } /** - * Check if a Mediator is registered or not + * Check if a `Mediator` is registered or not * * @param {string} mediatorName * @returns {boolean} whether a Mediator is registered with the given `mediatorName`. @@ -1101,7 +1100,7 @@ class Facade { * compatibility, and to allow you to send custom * notification classes using the facade.

* - *

Usually you should just call sendNotification + *

Usually you should just call `sendNotification` * and pass the parameters, never having to * construct the notification yourself.

* @@ -1440,10 +1439,10 @@ class Mediator extends Notifier { * Constructor. * * @constructor - * @param {string} mediatorName - * @param {Object} [viewComponent] viewComponent + * @param {string | null} [mediatorName=null] + * @param {Object | null} [viewComponent=null] */ - constructor(mediatorName, viewComponent = null) { + constructor(mediatorName = null, viewComponent = null) { super(); this._mediatorName = mediatorName || Mediator.NAME; this._viewComponent = viewComponent; @@ -1504,7 +1503,7 @@ class Mediator extends Notifier { * be defined in the subclass that casts the view * object to a type, like this:

* - * @returns {Object} + * @returns {Object | null} */ get viewComponent() { return this._viewComponent; @@ -1566,16 +1565,16 @@ class Proxy extends Notifier { * Constructor * * @constructor - * @param {string} proxyName - * @param {Object} [data] + * @param {string | null} [proxyName=null] + * @param {Object | null} [data=null] */ - constructor(proxyName, data = null) { + constructor(proxyName = null, data = null) { super(); /** @protected * @type {string} */ this._proxyName = proxyName || Proxy.NAME; /** @protected - * @type {Object} */ + * @type {Object | null} */ this._data = data; } @@ -1601,7 +1600,7 @@ class Proxy extends Notifier { /** * Get the data object * - * @returns {Object} + * @returns {Object | null} */ get data () { return this._data; diff --git a/bin/cjs/index.min.cjs b/bin/cjs/index.min.cjs new file mode 100644 index 0000000..e3b9eab --- /dev/null +++ b/bin/cjs/index.min.cjs @@ -0,0 +1,2 @@ +"use strict";class t{constructor(t=null,e=null){this._notifyMethod=t,this._notifyContext=e}notifyObserver(t){this._notifyMethod.call(this._notifyContext,t)}compareNotifyContext(t){return this._notifyContext===t}get notifyMethod(){return this._notifyMethod}set notifyMethod(t){this._notifyMethod=t}get notifyContext(){return this._notifyContext}set notifyContext(t){this._notifyContext=t}}class e{constructor(t){if(null!=e.instanceMap.get(t))throw new Error(e.MULTITON_MSG);this.multitonKey=t,e.instanceMap.set(this.multitonKey,this),this.mediatorMap=new Map,this.observerMap=new Map,this.initializeView()}initializeView(){}static getInstance(t,i){return null==e.instanceMap&&(e.instanceMap=new Map),null==e.instanceMap.get(t)&&e.instanceMap.set(t,i(t)),e.instanceMap.get(t)}registerObserver(t,e){if(null!=this.observerMap.get(t)){this.observerMap.get(t).push(e)}else this.observerMap.set(t,new Array(e))}notifyObservers(t){if(this.observerMap.has(t.name)){let e=this.observerMap.get(t.name).slice();for(let i=0;i0){let n=new t(e.handleNotification.bind(e),e);for(let t=0;tnew e(t)))}static getInstance(t,e){return null==i.instanceMap&&(i.instanceMap=new Map),null==i.instanceMap.get(t)&&i.instanceMap.set(t,e(t)),i.instanceMap.get(t)}executeCommand(t){let e=this.commandMap.get(t.name);if(null==e)return;let i=e();i.initializeNotifier(this.multitonKey),i.execute(t)}registerCommand(e,i){null==this.commandMap.get(e)&&this.view.registerObserver(e,new t(this.executeCommand,this)),this.commandMap.set(e,i)}hasCommand(t){return this.commandMap.has(t)}removeCommand(t){this.hasCommand(t)&&(this.view.removeObserver(t,this),this.commandMap.delete(t))}static removeController(t){i.instanceMap.delete(t)}static get MULTITON_MSG(){return"Controller instance for this Multiton key already constructed!"}}class n{constructor(t){if(null!=n.instanceMap.get(t))throw new Error(n.MULTITON_MSG);this.multitonKey=t,n.instanceMap.set(this.multitonKey,this),this.proxyMap=new Map,this.initializeModel()}initializeModel(){}static getInstance(t,e){return null==n.instanceMap&&(n.instanceMap=new Map),null==n.instanceMap.get(t)&&n.instanceMap.set(t,e(t)),n.instanceMap.get(t)}registerProxy(t){t.initializeNotifier(this.multitonKey),this.proxyMap.set(t.proxyName,t),t.onRegister()}retrieveProxy(t){return this.proxyMap.get(t)||null}hasProxy(t){return this.proxyMap.has(t)}removeProxy(t){let e=this.proxyMap.get(t);return null!=e&&(this.proxyMap.delete(t),e.onRemove()),e}static removeModel(t){n.instanceMap.delete(t)}static get MULTITON_MSG(){return"Model instance for this Multiton key already constructed!"}}class r{constructor(t,e=null,i=""){this._name=t,this._body=e,this._type=i}get name(){return this._name}get body(){return this._body}set body(t){this._body=t}get type(){return this._type}set type(t){this._type=t}toString(){let t="Notification Name: "+this.name;return t+="\nBody:"+(null==this.body?"null":this.body.toString()),t+="\nType:"+(null==this.type?"null":this.type),t}}class s{constructor(t){if(null!=s.instanceMap[t])throw new Error(s.MULTITON_MSG);this.initializeNotifier(t),s.instanceMap.set(this.multitonKey,this),this.initializeFacade()}initializeFacade(){this.initializeModel(),this.initializeController(),this.initializeView()}static getInstance(t,e){return null==s.instanceMap&&(s.instanceMap=new Map),null==s.instanceMap.get(t)&&s.instanceMap.set(t,e(t)),s.instanceMap.get(t)}initializeModel(){null==this.model&&(this.model=n.getInstance(this.multitonKey,(t=>new n(t))))}initializeController(){null==this.controller&&(this.controller=i.getInstance(this.multitonKey,(t=>new i(t))))}initializeView(){null==this.view&&(this.view=e.getInstance(this.multitonKey,(t=>new e(t))))}registerCommand(t,e){this.controller.registerCommand(t,e)}hasCommand(t){return this.controller.hasCommand(t)}removeCommand(t){this.controller.removeCommand(t)}registerProxy(t){this.model.registerProxy(t)}removeProxy(t){return this.model.removeProxy(t)}hasProxy(t){return this.model.hasProxy(t)}retrieveProxy(t){return this.model.retrieveProxy(t)}registerMediator(t){this.view.registerMediator(t)}removeMediator(t){return this.view.removeMediator(t)}hasMediator(t){return this.view.hasMediator(t)}retrieveMediator(t){return this.view.retrieveMediator(t)}sendNotification(t,e=null,i=""){this.notifyObservers(new r(t,e,i))}notifyObservers(t){this.view.notifyObservers(t)}initializeNotifier(t){this.multitonKey=t}static hasCore(t){return this.instanceMap.has(t)}static removeCore(t){null!=s.instanceMap.get(t)&&(n.removeModel(t),e.removeView(t),i.removeController(t),this.instanceMap.delete(t))}static get MULTITON_MSG(){return"Facade instance for this Multiton key already constructed!"}}class o{constructor(){}sendNotification(t,e=null,i=""){null!=this.facade&&this.facade.sendNotification(t,e,i)}initializeNotifier(t){this.multitonKey=t}get facade(){if(null==this.multitonKey)throw new Error(o.MULTITON_MSG);return s.getInstance(this.multitonKey,(t=>new s(t)))}static get MULTITON_MSG(){return"multitonKey for this Notifier not yet initialized!"}}class a extends o{constructor(){super()}execute(t){}}class l extends o{constructor(t=null,e=null){super(),this._mediatorName=t||l.NAME,this._viewComponent=e}onRegister(){}onRemove(){}listNotificationInterests(){return[]}handleNotification(t){}get mediatorName(){return this._mediatorName}get viewComponent(){return this._viewComponent}set viewComponent(t){this._viewComponent=t}static get NAME(){return"Mediator"}}class h extends o{constructor(t=null,e=null){super(),this._proxyName=t||h.NAME,this._data=e}onRegister(){}onRemove(){}get proxyName(){return this._proxyName}get data(){return this._data}set data(t){this._data=t}static get NAME(){return"Proxy"}}exports.Controller=i,exports.Facade=s,exports.MacroCommand=class extends a{constructor(){super(),this.subCommands=[],this.initializeMacroCommand()}initializeMacroCommand(){}addSubCommand(t){this.subCommands.push(t)}execute(t){for(;this.subCommands.length>0;){let e=this.subCommands.shift()();e.initializeNotifier(this.multitonKey),e.execute(t)}}},exports.Mediator=l,exports.Model=n,exports.Notification=r,exports.Notifier=o,exports.Observer=t,exports.Proxy=h,exports.SimpleCommand=a,exports.View=e; +//# sourceMappingURL=index.min.cjs.map diff --git a/bin/cjs/index.min.cjs.map b/bin/cjs/index.min.cjs.map new file mode 100644 index 0000000..c915234 --- /dev/null +++ b/bin/cjs/index.min.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"index.min.cjs","sources":["../../src/patterns/observer/Observer.js","../../src/core/View.js","../../src/core/Controller.js","../../src/core/Model.js","../../src/patterns/observer/Notification.js","../../src/patterns/facade/Facade.js","../../src/patterns/observer/Notifier.js","../../src/patterns/command/SimpleCommand.js","../../src/patterns/mediator/Mediator.js","../../src/patterns/proxy/Proxy.js","../../src/patterns/command/MacroCommand.js"],"sourcesContent":["/*\n * Observer.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n * A base `Observer` implementation.\n *\n *

An `Observer` is an object that encapsulates information\n * about an interested object with a method that should\n * be called when a particular `Notification` is broadcast.

\n *\n *

In PureMVC, the `Observer` class assumes these responsibilities:

\n *\n *
    \n *
  • Encapsulate the notification (callback) method of the interested object.
  • \n *
  • Encapsulate the notification context (this) of the interested object.
  • \n *
  • Provide methods for setting the notification method and context.
  • \n *
  • Provide a method for notifying the interested object.
  • \n *
\n *\n * @class Observer\n */\nclass Observer {\n\n /**\n * Constructor.\n *\n *

The notification method on the interested object should take\n * one parameter of type `Notification`

\n *\n * @param {function(Notification):void | null} [notify = null]\n * @param {Object | null} [context = null]\n */\n constructor(notify = null, context = null) {\n this._notifyMethod = notify;\n this._notifyContext = context;\n }\n\n /**\n * Notify the interested object.\n *\n * @param {Notification} notification\n */\n notifyObserver(notification) {\n this._notifyMethod.call(this._notifyContext, notification);\n }\n\n /**\n * Compare an object to the notification context.\n *\n * @param {Object} notifyContext\n * @returns {boolean}\n */\n compareNotifyContext(notifyContext) {\n return this._notifyContext === notifyContext;\n }\n\n /**\n * Get the notification method.\n *\n * @returns {function(Notification):void}\n */\n get notifyMethod() {\n return this._notifyMethod\n }\n\n /**\n * Set the notification method.\n *\n *

The notification method should take one parameter of type `Notification`.

\n *\n * @param {function(Notification): void} notifyMethod - The function to be called when a notification is received.\n */\n set notifyMethod(notifyMethod) {\n this._notifyMethod = notifyMethod;\n }\n\n /**\n * Get the notifyContext\n *\n * @returns {Object}\n */\n get notifyContext() {\n return this._notifyContext;\n }\n\n /**\n * Set the notification context.\n *\n * @param {Object} notifyContext\n */\n set notifyContext(notifyContext) {\n this._notifyContext = notifyContext;\n }\n\n}\nexport { Observer }\n","/*\n * View.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Observer} from \"../patterns/observer/Observer.js\";\n\n/**\n * A Multiton `View` implementation.\n *\n *

In PureMVC, the `View` class assumes these responsibilities:

\n *\n *
    \n *
  • Maintain a cache of `Mediator` instances.
  • \n *
  • Provide methods for registering, retrieving, and removing `Mediators`.
  • \n *
  • Notifying `Mediators` when they are registered or removed.
  • \n *
  • Managing the observer lists for each `Notification` in the application.
  • \n *
  • Providing a method for attaching `Observers` to a `Notification`'s observer list.
  • \n *
  • Providing a method for broadcasting a `Notification`.
  • \n *
  • Notifying the `Observers` of a given `Notification` when it broadcast.
  • \n *
\n *\n * @see Mediator Mediator\n * @see Observer Observer\n * @see Notification Notification\n *\n * @class View\n */\nclass View {\n\n /**\n * Constructor.\n *\n *

This `View` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Multiton\n * Factory method `View.getInstance( multitonKey )`\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n */\n constructor(key) {\n if (View.instanceMap.get(key) != null) throw new Error(View.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n View.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.mediatorMap = new Map();\n /** @protected\n * @type {Map.>} */\n this.observerMap = new Map();\n this.initializeView();\n }\n\n /**\n *

Initialize the Multiton View instance.

\n *\n *

Called automatically by the constructor, this\n * is your opportunity to initialize the Multiton\n * instance in your subclass without overriding the\n * constructor.

\n */\n initializeView() {\n\n }\n\n /**\n * View Multiton factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):View} factory\n * @returns {View} the Multiton instance of `View`\n */\n static getInstance(key, factory) {\n if (View.instanceMap == null)\n /** @static\n * @type {Map} */\n View.instanceMap = new Map();\n if (View.instanceMap.get(key) == null) View.instanceMap.set(key, factory(key));\n return View.instanceMap.get(key);\n }\n\n /**\n *

Register an `Observer` to be notified\n * of `Notifications` with a given name.

\n *\n * @param {string} notificationName the name of the `Notifications` to notify this `Observer` of\n * @param {Observer} observer the `Observer` to register\n */\n registerObserver(notificationName, observer) {\n if (this.observerMap.get(notificationName) != null) {\n let observers = this.observerMap.get(notificationName);\n observers.push(observer);\n } else {\n this.observerMap.set(notificationName, new Array(observer));\n }\n }\n\n /**\n *

Notify the `Observers` for a particular `Notification`.

\n *\n *

All previously attached `Observers` for this `Notification`'s\n * list are notified and are passed a reference to the `Notification` in\n * the order in which they were registered.

\n *\n * @param {Notification} notification the `Notification` to notify `Observers` of.\n */\n notifyObservers(notification) {\n if (this.observerMap.has(notification.name)) {\n // Copy observers from reference array to working array,\n // since the reference array may change during the notification loop\n let observers = this.observerMap.get(notification.name).slice();\n\n // Notify Observers from the working array\n for(let i = 0; i < observers.length; i++) {\n observers[i].notifyObserver(notification);\n }\n }\n }\n\n /**\n *

Remove the observer for a given notifyContext from an observer list for a given Notification name.

\n *\n * @param {string} notificationName which observer list to remove from\n * @param {Object} notifyContext remove the observer with this object as its notifyContext\n */\n removeObserver(notificationName, notifyContext) {\n // the observer list for the notification under inspection\n let observers = this.observerMap.get(notificationName);\n\n // find the observer for the notifyContext\n for (let i = 0; i < observers.length; i++) {\n if (observers[i].compareNotifyContext(notifyContext) === true) {\n // there can only be one Observer for a given notifyContext\n // in any given Observer list, so remove it and break\n observers.splice(i, 1);\n break;\n }\n }\n\n // Also, when a Notification's Observer list length falls to\n // zero, delete the notification key from the observer map\n if (observers.length === 0) {\n this.observerMap.delete(notificationName);\n }\n }\n\n /**\n * Register a `Mediator` instance with the `View`.\n *\n *

Registers the `Mediator` so that it can be retrieved by name,\n * and further interrogates the `Mediator` for its\n * `Notification` interests.

\n *\n *

If the `Mediator` returns any `Notification`\n * names to be notified about, an `Observer` is created encapsulating\n * the `Mediator` instance's `handleNotification` method\n * and registering it as an `Observer` for all `Notifications` the\n * `Mediator` is interested in.

\n *\n * @param {Mediator} mediator a reference to the `Mediator` instance\n */\n registerMediator(mediator) {\n // do not allow re-registration (you must to removeMediator fist)\n if (this.mediatorMap.has(mediator.mediatorName) !== false) return;\n\n mediator.initializeNotifier(this.multitonKey);\n\n // Register the Mediator for retrieval by name\n this.mediatorMap.set(mediator.mediatorName, mediator);\n\n // Get Notification interests, if any.\n let interests = mediator.listNotificationInterests();\n\n // Register Mediator as an observer for each notification of interests\n if (interests.length > 0) {\n // Create Observer referencing this mediator's handleNotification method\n let observer = new Observer(mediator.handleNotification.bind(mediator), mediator); // check bind\n\n // Register Mediator as Observer for its list of Notification interests\n for (let i = 0; i < interests.length; i++) {\n this.registerObserver(interests[i], observer);\n }\n }\n\n // alert the mediator that it has been registered\n mediator.onRegister();\n }\n\n /**\n * Retrieve a `Mediator` from the `View`.\n *\n * @param {string} mediatorName the name of the `Mediator` instance to retrieve.\n * @returns {Mediator} the `Mediator` instance previously registered with the given `mediatorName`.\n */\n retrieveMediator(mediatorName) {\n return this.mediatorMap.get(mediatorName) || null;\n }\n\n /**\n * Remove a `Mediator` from the `View`.\n *\n * @param {string} mediatorName name of the `Mediator` instance to be removed.\n * @returns {Mediator} the `Mediator` that was removed from the `View`\n */\n removeMediator(mediatorName) {\n // Retrieve the named mediator\n let mediator = this.mediatorMap.get(mediatorName);\n\n if (mediator) {\n // for every notification this mediator is interested in...\n let interests = mediator.listNotificationInterests();\n for (let i = 0; i < interests.length; i++) {\n // remove the observer linking the mediator\n // to the notification interest\n this.removeObserver(interests[i], mediator);\n }\n\n // remove the mediator from the map\n this.mediatorMap.delete(mediatorName);\n\n // alert the mediator that it has been removed\n mediator.onRemove();\n }\n\n return mediator;\n }\n\n /**\n * Check if a Mediator is registered or not\n *\n * @param {string} mediatorName\n * @returns {boolean} whether a Mediator is registered with the given `mediatorName`.\n */\n hasMediator(mediatorName) {\n return this.mediatorMap.has(mediatorName);\n }\n\n /**\n * Remove a View instance\n *\n * @static\n * @param key multitonKey of View instance to remove\n */\n static removeView(key) {\n this.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"View instance for this Multiton key already constructed!\" };\n\n}\nexport { View }\n","/*\n * Controller.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {View} from \"./View.js\"\nimport {Observer} from \"../patterns/observer/Observer.js\";\n\n/**\n * A Multiton `Controller` implementation.\n *\n *

In PureMVC, the `Controller` class follows the\n * 'Command and Controller' strategy, and assumes these\n * responsibilities:

\n *\n *
    \n *
  • Remembering which `Command`s\n * are intended to handle which `Notifications`.
  • \n *
  • Registering itself as an `Observer` with\n * the `View` for each `Notification`\n * that it has a `Command` mapping for.
  • \n *
  • Creating a new instance of the proper `Command`\n * to handle a given `Notification` when notified by the `View`.
  • \n *
  • Calling the `Command`'s `execute`\n * method, passing in the `Notification`.
  • \n *
\n *\n *

Your application must register `Commands` with the\n * Controller.

\n *\n *

The simplest way is to subclass `Facade`,\n * and use its `initializeController` method to add your\n * registrations.

\n *\n * @see View View\n * @see Observer Observer\n * @see Notification Notification\n * @see SimpleCommand SimpleCommand\n * @see MacroCommand MacroCommand\n *\n * @class Controller\n */\nclass Controller {\n\n /**\n * Constructor.\n *\n *

This `Controller` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Factory method,\n * passing the unique key for this instance\n * `Controller.getInstance( multitonKey )`

\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n */\n constructor(key) {\n if (Controller.instanceMap[key] != null) throw new Error(Controller.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n Controller.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.commandMap = new Map();\n this.initializeController();\n }\n\n /**\n * Initialize the Multiton `Controller` instance.\n *\n *

Called automatically by the constructor.

\n *\n *

Note that if you are using a subclass of `View`\n * in your application, you should also subclass `Controller`\n * and override the `initializeController` method in the\n * following way:

\n *\n *
`\n     *\t\t// ensure that the Controller is talking to my View implementation\n     *\t\tinitializeController( )\n     *\t\t{\n     *\t\t\tthis.view = MyView.getInstance(this.multitonKey, (key) => new MyView(key));\n     *\t\t}\n     * `
\n *\n */\n initializeController() {\n /** @protected\n * @type {View} **/\n this.view = View.getInstance(this.multitonKey, (key) => new View(key));\n }\n\n /**\n * `Controller` Multiton Factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):Controller} factory\n * @returns {Controller} the Multiton instance of `Controller`\n */\n static getInstance(key, factory) {\n if (Controller.instanceMap == null)\n /** @static\n @type {Map} */\n Controller.instanceMap = new Map();\n if (Controller.instanceMap.get(key) == null) Controller.instanceMap.set(key, factory(key));\n return Controller.instanceMap.get(key);\n }\n\n /**\n *

If a `Command` has previously been registered\n * to handle the given `Notification`, then it is executed.

\n *\n * @param {Notification} notification a `Notification`\n */\n executeCommand(notification) {\n let factory = this.commandMap.get(notification.name);\n if (factory == null) return;\n\n let commandInstance = factory();\n commandInstance.initializeNotifier(this.multitonKey);\n commandInstance.execute(notification);\n }\n\n /**\n *

Register a particular `Command` class as the handler\n * for a particular `Notification`.

\n *\n *

If an `Command` has already been registered to\n * handle `Notification`s with this name, it is no longer\n * used, the new `Command` is used instead.

\n *\n *

The Observer for the new Command is only created if this the\n * first time a Command has been registered for this Notification name.

\n *\n * @param notificationName the name of the `Notification`\n * @param {function():SimpleCommand} factory\n */\n registerCommand(notificationName, factory) {\n if (this.commandMap.get(notificationName) == null) {\n this.view.registerObserver(notificationName, new Observer(this.executeCommand, this));\n }\n this.commandMap.set(notificationName, factory);\n }\n\n /**\n * Check if a Command is registered for a given Notification\n *\n * @param {string} notificationName\n * @return {boolean} whether a Command is currently registered for the given `notificationName`.\n */\n hasCommand(notificationName) {\n return this.commandMap.has(notificationName);\n }\n\n /**\n * Remove a previously registered `Command` to `Notification` mapping.\n *\n * @param {string} notificationName the name of the `Notification` to remove the `Command` mapping for\n */\n removeCommand(notificationName) {\n // if the Command is registered...\n if(this.hasCommand(notificationName)) {\n // remove the observer\n this.view.removeObserver(notificationName, this);\n\n // remove the command\n this.commandMap.delete(notificationName)\n }\n }\n\n /**\n * Remove a Controller instance\n *\n * @static\n * @param {string} key of Controller instance to remove\n */\n static removeController(key) {\n Controller.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"Controller instance for this Multiton key already constructed!\" };\n}\nexport { Controller }\n","/*\n * Model.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n * A Multiton `Model` implementation.\n *\n *

In PureMVC, the `Model` class provides\n * access to model objects (Proxies) by named lookup.\n *\n *

The `Model` assumes these responsibilities:

\n *\n *
    \n *
  • Maintain a cache of `Proxy` instances.
  • \n *
  • Provide methods for registering, retrieving, and removing\n * `Proxy` instances.
  • \n *
\n *\n *

Your application must register `Proxy` instances\n * with the `Model`. Typically, you use an\n * `Command` to create and register `Proxy`\n * instances once the `Facade` has initialized the Core\n * actors.

\n *\n * @see Proxy Proxy\n *\n * @class Model\n */\nclass Model {\n\n /**\n * Constructor.\n *\n *

This `Model` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Multiton\n * Factory method `Model.getInstance( multitonKey )`\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key instance has already been constructed\n */\n constructor(key) {\n if (Model.instanceMap.get(key) != null) throw new Error(Model.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n Model.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.proxyMap = new Map();\n this.initializeModel();\n }\n\n /**\n * Initialize the `Model` instance.\n *\n *

Called automatically by the constructor, this\n * is your opportunity to initialize the Multiton\n * instance in your subclass without overriding the\n * constructor.

\n *\n */\n initializeModel() {\n\n }\n\n /**\n * `Model` Multiton Factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):Model} factory\n * @returns {Model} the instance for this Multiton key\n */\n static getInstance(key, factory) {\n if (Model.instanceMap == null)\n /** @static\n @type {Map} */\n Model.instanceMap = new Map();\n if (Model.instanceMap.get(key) == null) Model.instanceMap.set(key, factory(key));\n return Model.instanceMap.get(key);\n }\n\n /**\n * Register a `Proxy` with the `Model`.\n *\n * @param {Proxy} proxy a `Proxy` to be held by the `Model`.\n */\n registerProxy(proxy) {\n proxy.initializeNotifier(this.multitonKey);\n this.proxyMap.set(proxy.proxyName, proxy);\n proxy.onRegister();\n }\n\n /**\n * Retrieve a `Proxy` from the `Model`.\n *\n * @param {string} proxyName\n * @returns {Proxy} the `Proxy` instance previously registered with the given `proxyName`.\n */\n retrieveProxy(proxyName) {\n return this.proxyMap.get(proxyName) || null;\n }\n\n /**\n * Check if a Proxy is registered\n *\n * @param {string} proxyName\n * @returns {boolean} whether a Proxy is currently registered with the given `proxyName`.\n */\n hasProxy(proxyName) {\n return this.proxyMap.has(proxyName);\n }\n\n /**\n * Remove a `Proxy` from the `Model`.\n *\n * @param {string} proxyName name of the `Proxy` instance to be removed.\n * @returns {Proxy} the `Proxy` that was removed from the `Model`\n */\n removeProxy(proxyName) {\n let proxy = this.proxyMap.get(proxyName);\n if (proxy != null) {\n this.proxyMap.delete(proxyName);\n proxy.onRemove();\n }\n return proxy;\n }\n\n /**\n * Remove a Model instance\n *\n * @static\n * @param key\n */\n static removeModel(key) {\n Model.instanceMap.delete(key);\n }\n\n /**\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"Model instance for this Multiton key already constructed!\" };\n}\nexport { Model }\n","/*\n * Notification.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n * A base `Notification` implementation.\n *\n *

PureMVC does not rely upon underlying event models such\n * as the one provided with Flash, and ActionScript 3 does\n * not have an inherent event model.

\n *\n *

The Observer Pattern as implemented within PureMVC exists\n * to support event-driven communication between the\n * application and the actors of the MVC triad.

\n *\n *

Notifications are not meant to be a replacement for Events\n * in Flex/Flash/Apollo. Generally, `Mediator` implementors\n * place event listeners on their view components, which they\n * then handle in the usual way. This may lead to the broadcast of `Notification`s to\n * trigger `Command`s or to communicate with other `Mediators`. `Proxy` and `Command`\n * instances communicate with each other and `Mediator`s\n * by broadcasting `Notification`s.

\n *\n *

A key difference between Flash `Event`s and PureMVC\n * `Notification`s is that `Event`s follow the\n * 'Chain of Responsibility' pattern, 'bubbling' up the display hierarchy\n * until some parent component handles the `Event`, while\n * PureMVC `Notification`s follow a 'Publish/Subscribe'\n * pattern. PureMVC classes need not be related to each other in a\n * parent/child relationship in order to communicate with one another\n * using `Notification`s.

\n *\n * @class Notification\n */\nclass Notification {\n\n /**\n * Constructor.\n *\n * @constructor\n * @param {string} name - The name of the notification.\n * @param {Object|null} [body=null] - The body of the notification, defaults to `null`.\n * @param {string} [type=\"\"] - The type of the notification, defaults to an empty string.\n */\n constructor(name, body = null, type = \"\") {\n this._name = name;\n this._body = body;\n this._type = type;\n }\n\n /**\n * Get the name of the `Notification` instance.\n *\n * @returns {string}\n */\n get name() {\n return this._name;\n }\n\n /**\n * Get the body of the `Notification` instance.\n *\n * @returns {Object | null}\n */\n get body() {\n return this._body;\n }\n\n /**\n * Set the body of the `Notification` instance.\n *\n * @param {Object|null} body\n */\n set body(body) {\n this._body = body;\n }\n\n /**\n * Get the type of the `Notification` instance.\n *\n * @returns {string}\n */\n get type() {\n return this._type;\n }\n\n /**\n * Set the type of the `Notification` instance.\n *\n * @param {string} type\n */\n set type(type) {\n this._type = type;\n }\n\n /**\n * Get the string representation of the `Notification` instance.\n *\n * @returns {string}\n */\n toString() {\n let str= \"Notification Name: \" + this.name;\n str+= \"\\nBody:\" + ((this.body == null ) ? \"null\" : this.body.toString());\n str+= \"\\nType:\" + ((this.type == null ) ? \"null\" : this.type);\n return str;\n }\n\n}\nexport { Notification }\n","/*\n * Facade.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Controller} from \"../../core/Controller.js\";\nimport {Model} from \"../../core/Model.js\";\nimport {View} from \"../../core/View.js\";\nimport {Notification} from \"../observer/Notification.js\";\n\n/**\n * A base Multiton `Facade` implementation.\n *\n * @see Model Model\n * @see View View\n * @see Controller Controller\n *\n * @class Facade\n */\nclass Facade {\n\n /**\n * Constructor.\n *\n *

This `Facade` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Factory method,\n * passing the unique key for this instance\n * `Facade.getInstance( multitonKey )`

\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n */\n constructor(key) {\n if (Facade.instanceMap[key] != null) throw new Error(Facade.MULTITON_MSG);\n this.initializeNotifier(key);\n Facade.instanceMap.set(this.multitonKey, this);\n this.initializeFacade();\n }\n\n /**\n * Initialize the Multiton `Facade` instance.\n *\n *

Called automatically by the constructor. Override in your\n * subclass to do any subclass specific initializations. Be\n * sure to call `super.initializeFacade()`, though.

\n */\n initializeFacade() {\n this.initializeModel();\n this.initializeController();\n this.initializeView();\n }\n\n /**\n * Facade Multiton Factory method\n *\n * @static\n * @param {string} key\n * @param {function(string):Facade} factory\n * @returns {Facade} the Multiton instance of the Facade\n */\n static getInstance(key, factory) {\n if (Facade.instanceMap == null)\n /** @static\n * @type {Map} */\n Facade.instanceMap = new Map();\n if (Facade.instanceMap.get(key) == null) Facade.instanceMap.set(key, factory(key));\n return Facade.instanceMap.get(key);\n }\n\n /**\n * Initialize the `Model`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `Model`.
  • \n *
  • You have `Proxy`s to register with the Model that do not\n * retrieve a reference to the Facade at construction time.`
  • \n *
\n *\n * If you don't want to initialize a different `Model`,\n * call `super.initializeModel()` at the beginning of your\n * method, then register `Proxy`s.\n *\n *

Note: This method is rarely overridden; in practice you are more\n * likely to use a `Command` to create and register `Proxy`s\n * with the `Model`, since `Proxy`s with mutable data will likely\n * need to send `Notification`s and thus will likely want to fetch a reference to\n * the `Facade` during their construction.

\n */\n initializeModel() {\n if (this.model != null) return;\n this.model = Model.getInstance(this.multitonKey, key => new Model(key));\n }\n\n /**\n * Initialize the `Controller`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `Controller`.
  • \n *
  • You have `Commands` to register with the `Controller` at startup.`.
  • \n *
\n *\n *

If you don't want to initialize a different `Controller`,\n * call `super.initializeController()` at the beginning of your\n * method, then register `Command`s.

\n */\n initializeController() {\n if (this.controller != null) return;\n this.controller = Controller.getInstance(this.multitonKey, key => new Controller(key));\n }\n\n /**\n * Initialize the `View`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `View`.
  • \n *
  • You have `Observers` to register with the `View`
  • \n *
\n *\n *

If you don't want to initialize a different `View`,\n * call `super.initializeView()` at the beginning of your\n * method, then register `Mediator` instances.

\n *\n *

Note: This method is rarely overridden; in practice you are more\n * likely to use a `Command` to create and register `Mediator`s\n * with the `View`, since `Mediator` instances will need to send\n * `Notification`s and thus will likely want to fetch a reference\n * to the `Facade` during their construction.

\n */\n initializeView() {\n if (this.view != null) return;\n this.view = View.getInstance(this.multitonKey, key => new View(key));\n }\n\n /**\n * Register a `Command` with the `Controller` by Notification name.\n *\n * @param {string} notificationName the name of the `Notification` to associate the `Command` with\n * @param {function():SimpleCommand} factory a reference to the factory of the `Command`\n */\n registerCommand(notificationName, factory) {\n this.controller.registerCommand(notificationName, factory);\n }\n\n /**\n * Check if a Command is registered for a given Notification\n *\n * @param {string} notificationName\n * @returns {boolean} whether a Command is currently registered for the given `notificationName`.\n */\n hasCommand(notificationName) {\n return this.controller.hasCommand(notificationName);\n }\n\n /**\n * Remove a previously registered `Command` to `Notification` mapping from the Controller.\n *\n * @param {string} notificationName the name of the `Notification` to remove the `Command` mapping for\n */\n removeCommand(notificationName) {\n this.controller.removeCommand(notificationName);\n }\n\n /**\n * Register a `Proxy` with the `Model` by name.\n *\n * @param {Proxy} proxy the `Proxy` instance to be registered with the `Model`.\n */\n registerProxy(proxy) {\n this.model.registerProxy(proxy);\n }\n\n /**\n * Remove a `Proxy` from the `Model` by name.\n *\n * @param {string} proxyName the `Proxy` to remove from the `Model`.\n * @returns {Proxy} the `Proxy` that was removed from the `Model`\n */\n removeProxy(proxyName) {\n return this.model.removeProxy(proxyName);\n }\n\n /**\n * Check if a `Proxy` is registered\n *\n * @param {string} proxyName\n * @returns {boolean} whether a Proxy is currently registered with the given `proxyName`.\n */\n hasProxy(proxyName) {\n return this.model.hasProxy(proxyName);\n }\n\n /**\n * Retrieve a `Proxy` from the `Model` by name.\n *\n * @param {string} proxyName the name of the proxy to be retrieved.\n * @returns {Proxy} the `Proxy` instance previously registered with the given `proxyName`.\n */\n retrieveProxy(proxyName) {\n return this.model.retrieveProxy(proxyName);\n }\n\n /**\n * Register a `Mediator` with the `View`.\n *\n * @param {Mediator} mediator a reference to the `Mediator`\n */\n registerMediator(mediator) {\n this.view.registerMediator(mediator);\n }\n\n /**\n * Remove a `Mediator` from the `View`.\n *\n * @param {string} mediatorName name of the `Mediator` to be removed.\n * @returns {Mediator} the `Mediator` that was removed from the `View`\n */\n removeMediator(mediatorName) {\n return this.view.removeMediator(mediatorName);\n }\n\n /**\n * Check if a `Mediator` is registered or not\n *\n * @param {string} mediatorName\n * @returns {boolean} whether a Mediator is registered with the given `mediatorName`.\n */\n hasMediator(mediatorName) {\n return this.view.hasMediator(mediatorName);\n }\n\n /**\n * Retrieve a `Mediator` from the `View`.\n *\n * @param {string} mediatorName\n * @returns {Mediator} the `Mediator` previously registered with the given `mediatorName`.\n */\n retrieveMediator(mediatorName) {\n return this.view.retrieveMediator(mediatorName);\n }\n\n /**\n * Create and send an `Notification`.\n *\n *

Keeps us from having to construct new notification\n * instances in our implementation code.

\n *\n * @param {string} notificationName the name of the notification to send\n * @param {Object} [body] body the body of the notification (optional)\n * @param {string} [type] type the type of the notification (optional)\n */\n sendNotification(notificationName, body = null, type = \"\") {\n this.notifyObservers(new Notification(notificationName, body, type));\n }\n\n /**\n * Notify `Observer`s.\n *\n *

This method is left public mostly for backward\n * compatibility, and to allow you to send custom\n * notification classes using the facade.

\n *\n *

Usually you should just call `sendNotification`\n * and pass the parameters, never having to\n * construct the notification yourself.

\n *\n * @param {Notification} notification the `Notification` to have the `View` notify `Observers` of.\n */\n notifyObservers(notification) {\n this.view.notifyObservers(notification);\n }\n\n /**\n * Set the Multiton key for this facade instance.\n *\n *

Not called directly, but instead from the\n * constructor when getInstance is invoked.\n * It is necessary to be public in order to\n * implement Notifier.

\n */\n initializeNotifier(key) {\n this.multitonKey = key;\n }\n\n /**\n * Check if a Core is registered or not\n *\n * @static\n * @param {string} key the multiton key for the Core in question\n * @returns {boolean} whether a Core is registered with the given `key`.\n */\n static hasCore(key) {\n return this.instanceMap.has(key);\n }\n\n /**\n * Remove a Core.\n *\n *

Remove the Model, View, Controller and Facade\n * instances for the given key.

\n *\n * @static\n * @param {string} key multitonKey of the Core to remove\n */\n static removeCore(key) {\n if (Facade.instanceMap.get(key) == null) return;\n Model.removeModel(key);\n View.removeView(key);\n Controller.removeController(key);\n this.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @returns {string}\n */\n static get MULTITON_MSG() {return \"Facade instance for this Multiton key already constructed!\"};\n}\nexport { Facade }\n","/*\n * Notifier.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Facade} from \"../facade/Facade.js\";\n\n/**\n * A Base `Notifier` implementation.\n *\n *

`MacroCommand, Command, Mediator` and `Proxy`\n * all have a need to send `Notifications`.

\n *\n *

The `Notifier` interface provides a common method called\n * `sendNotification` that relieves implementation code of\n * the necessity to actually construct `Notifications`.

\n *\n *

The `Notifier` class, which all the above-mentioned classes\n * extend, provides an initialized reference to the `Facade`\n * Multiton, which is required for the convenience method\n * for sending `Notifications`, but also eases implementation as these\n * classes have frequent `Facade` interactions and usually require\n * access to the facade anyway.

\n *\n *

NOTE: In the MultiCore version of the framework, there is one caveat to\n * notifiers, they cannot send notifications or reach the facade until they\n * have a valid multitonKey.

\n *\n * The multitonKey is set:\n * * on a Command when it is executed by the Controller\n * * on a Mediator is registered with the View\n * * on a Proxy is registered with the Model.\n *\n * @see Proxy Proxy\n * @see Facade Facade\n * @see Mediator Mediator\n * @see MacroCommand MacroCommand\n * @see SimpleCommand SimpleCommand\n *\n * @class Notifier\n */\nclass Notifier {\n\n constructor() {}\n\n /**\n * Create and send an `Notification`.\n *\n *

Keeps us from having to construct new Notification\n * instances in our implementation code.

\n *\n * @param {string} notificationName\n * @param {Object} [body] body\n * @param {string} [type] type\n */\n sendNotification (notificationName, body = null, type = \"\") {\n if (this.facade != null) {\n this.facade.sendNotification(notificationName, body, type);\n }\n }\n\n /**\n * Initialize this Notifier instance.\n *\n *

This is how a Notifier gets its multitonKey.\n * Calls to sendNotification or to access the\n * facade will fail until after this method\n * has been called.

\n *\n *

Mediators, Commands or Proxies may override\n * this method in order to send notifications\n * or access the Multiton Facade instance as\n * soon as possible. They CANNOT access the facade\n * in their constructors, since this method will not\n * yet have been called.

\n *\n * @param {string} key the multitonKey for this Notifier to use\n */\n initializeNotifier(key) {\n this.multitonKey = key;\n }\n\n /**\n * Return the Multiton Facade instance\n *\n * @typedef {Facade} Facade\n *\n * @throws {Error}\n */\n get facade() {\n if (this.multitonKey == null) throw new Error(Notifier.MULTITON_MSG);\n return Facade.getInstance(this.multitonKey, key => new Facade(key));\n }\n\n /**\n * Message Constants\n *\n * @static\n * @returns {string}\n */\n static get MULTITON_MSG() { return \"multitonKey for this Notifier not yet initialized!\" }\n}\nexport { Notifier }\n","/*\n * SimpleCommand.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Command` implementation.\n *\n *

Your subclass should override the `execute`\n * method where your business logic will handle the `Notification`.

\n *\n * @see Controller Controller\n * @see Notification Notification\n * @see MacroCommand MacroCommand\n *\n * @class SimpleCommand\n */\nclass SimpleCommand extends Notifier {\n\n constructor() {\n super();\n }\n\n /**\n * Fulfill the use-case initiated by the given `Notification`.\n *\n *

In the Command Pattern, an application use-case typically\n * begins with some user action, which results in a `Notification` being broadcast, which\n * is handled by business logic in the `execute` method of an\n * `Command`.

\n *\n * @param {Notification} notification\n */\n execute(notification) {\n\n }\n\n}\nexport { SimpleCommand }\n","/*\n * Mediator.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Mediator` implementation.\n *\n * @see View View\n *\n * @class Mediator\n */\nclass Mediator extends Notifier {\n\n /**\n * Constructor.\n *\n * @constructor\n * @param {string | null} [mediatorName=null]\n * @param {Object | null} [viewComponent=null]\n */\n constructor(mediatorName = null, viewComponent = null) {\n super();\n this._mediatorName = mediatorName || Mediator.NAME;\n this._viewComponent = viewComponent;\n }\n\n /**\n * Called by the View when the Mediator is registered\n */\n onRegister() {\n\n }\n\n /**\n * Called by the View when the Mediator is removed\n */\n onRemove() {\n\n }\n\n /**\n * List the `Notification` names this\n * `Mediator` is interested in being notified of.\n *\n * @returns {string[]}\n */\n listNotificationInterests() {\n return [];\n }\n\n /**\n * Handle `Notification`s.\n *\n *

\n * Typically this will be handled in a switch statement,\n * with one 'case' entry per `Notification`\n * the `Mediator` is interested in.\n *\n * @param {Notification} notification\n */\n handleNotification(notification) {\n\n }\n\n /**\n * the mediator name\n *\n * @returns {string}\n */\n get mediatorName() {\n return this._mediatorName;\n }\n\n /**\n * Get the `Mediator`'s view component.\n *\n *

\n * Additionally, an implicit getter will usually\n * be defined in the subclass that casts the view\n * object to a type, like this:

\n *\n * @returns {Object | null}\n */\n get viewComponent() {\n return this._viewComponent;\n }\n\n /**\n * Set the `Mediator`'s view component.\n *\n * @param {Object} viewComponent\n */\n set viewComponent(viewComponent) {\n this._viewComponent = viewComponent;\n }\n\n /**\n * The name of the `Mediator`.\n *\n *

Typically, a `Mediator` will be written to serve\n * one specific control or group controls and so,\n * will not have a need to be dynamically named.

\n *\n * @static\n * @returns {string}\n */\n static get NAME() { return \"Mediator\" }\n}\nexport { Mediator }\n","/*\n * Proxy.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Proxy` implementation.\n *\n *

In PureMVC, `Proxy` classes are used to manage parts of the\n * application's data model.

\n *\n *

A `Proxy` might simply manage a reference to a local data object,\n * in which case interacting with it might involve setting and\n * getting of its data in synchronous fashion.

\n *\n *

`Proxy` classes are also used to encapsulate the application's\n * interaction with remote services to save or retrieve data, in which case,\n * we adopt an asynchronous idiom; setting data (or calling a method) on the\n * `Proxy` and listening for a `Notification` to be sent\n * when the `Proxy` has retrieved the data from the service.

\n *\n * @see Model Model\n *\n * @class Proxy\n */\nclass Proxy extends Notifier {\n /**\n * Constructor\n *\n * @constructor\n * @param {string | null} [proxyName=null]\n * @param {Object | null} [data=null]\n */\n constructor(proxyName = null, data = null) {\n super();\n /** @protected\n * @type {string} */\n this._proxyName = proxyName || Proxy.NAME;\n /** @protected\n * @type {Object | null} */\n this._data = data;\n }\n\n /**\n * Called by the Model when the Proxy is registered\n */\n onRegister() {}\n\n /**\n * Called by the Model when the Proxy is removed\n */\n onRemove() {}\n\n /**\n * Get the proxy name\n *\n * @returns {string}\n */\n get proxyName() {\n return this._proxyName;\n }\n\n /**\n * Get the data object\n *\n * @returns {Object | null}\n */\n get data () {\n return this._data;\n }\n\n /**\n * Set the data object\n *\n * @param {Object} data\n */\n set data(data) {\n this._data = data;\n }\n\n /**\n *\n * @static\n * @returns {string}\n */\n static get NAME() { return \"Proxy\" }\n}\nexport { Proxy }\n","/*\n * MacroCommand.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {SimpleCommand} from \"./SimpleCommand.js\";\n\n/**\n * A base `Command` implementation that executes other `Command`s.\n *\n *

A `MacroCommand` maintains a list of\n * `Command` Class references called SubCommands.

\n *\n *

When `execute` is called, the `MacroCommand`\n * instantiates and calls `execute` on each of its SubCommands turn.\n * Each SubCommand will be passed a reference to the original\n * `Notification` that was passed to the `MacroCommand`'s\n * `execute` method.

\n *\n *

Unlike `SimpleCommand`, your subclass\n * should not override `execute`, but instead, should\n * override the `initializeMacroCommand` method,\n * calling `addSubCommand` once for each SubCommand\n * to be executed.

\n *\n * @see Controller Controller\n * @see Notification Notification\n * @see SimpleCommand SimpleCommand\n *\n * @class MacroCommand\n */\nclass MacroCommand extends SimpleCommand {\n\n /**\n * Constructor.\n *\n *

You should not need to define a constructor,\n * instead, override the `initializeMacroCommand`\n * method.

\n *\n *

If your subclass does define a constructor, be\n * sure to call `super()`.

\n *\n * @constructor\n */\n constructor() {\n super();\n /** @protected\n * @type {Array.} */\n this.subCommands = [];\n this.initializeMacroCommand();\n }\n\n /**\n * Initialize the `MacroCommand`.\n *\n *

In your subclass, override this method to\n * initialize the `MacroCommand`'s SubCommand\n * list with `Command` class references like\n * this:

\n *\n *
`\n     *\t\t// Initialize MyMacroCommand\n     *\t\tinitializeMacroCommand() {\n     *\t\t\tthis.addSubCommand(() => new app.FirstCommand());\n     *\t\t\tthis.addSubCommand(() => new app.SecondCommand());\n     *\t\t\tthis.addSubCommand(() => new app.ThirdCommand());\n     *\t\t}\n     * `
\n *\n *

Note that SubCommands may be any `Command` implementor,\n * `MacroCommand`s or `SimpleCommands` are both acceptable.\n */\n initializeMacroCommand() {\n\n }\n\n /**\n * Add a SubCommand.\n *\n *

The SubCommands will be called in First In/First Out (FIFO)\n * order.

\n *\n * @param {function():SimpleCommand} factory\n */\n addSubCommand(factory) {\n this.subCommands.push(factory);\n }\n\n /**\n * Execute this `MacroCommand`'s SubCommands.\n *\n *

The SubCommands will be called in First In/First Out (FIFO)\n * order.

\n *\n * @param {Notification} notification\n */\n execute(notification) {\n while(this.subCommands.length > 0) {\n let factory = this.subCommands.shift();\n let commandInstance = factory();\n commandInstance.initializeNotifier(this.multitonKey);\n commandInstance.execute(notification);\n }\n }\n\n}\nexport { MacroCommand }\n"],"names":["Observer","constructor","notify","context","this","_notifyMethod","_notifyContext","notifyObserver","notification","call","compareNotifyContext","notifyContext","notifyMethod","View","key","instanceMap","get","Error","MULTITON_MSG","multitonKey","set","mediatorMap","Map","observerMap","initializeView","getInstance","factory","registerObserver","notificationName","observer","push","Array","notifyObservers","has","name","observers","slice","i","length","removeObserver","splice","delete","registerMediator","mediator","mediatorName","initializeNotifier","interests","listNotificationInterests","handleNotification","bind","onRegister","retrieveMediator","removeMediator","onRemove","hasMediator","removeView","Controller","commandMap","initializeController","view","executeCommand","commandInstance","execute","registerCommand","hasCommand","removeCommand","removeController","Model","proxyMap","initializeModel","registerProxy","proxy","proxyName","retrieveProxy","hasProxy","removeProxy","removeModel","Notification","body","type","_name","_body","_type","toString","str","Facade","initializeFacade","model","controller","sendNotification","hasCore","removeCore","Notifier","facade","SimpleCommand","super","Mediator","viewComponent","_mediatorName","NAME","_viewComponent","Proxy","data","_proxyName","_data","subCommands","initializeMacroCommand","addSubCommand","shift"],"mappings":"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"} \ No newline at end of file diff --git a/bin/cjs/puremvc.min.cjs b/bin/cjs/puremvc.min.cjs deleted file mode 100644 index ec5ea30..0000000 --- a/bin/cjs/puremvc.min.cjs +++ /dev/null @@ -1,2 +0,0 @@ -"use strict";class t{constructor(t,e){this._notifyMethod=t,this._notifyContext=e}notifyObserver(t){this._notifyMethod.call(this._notifyContext,t)}compareNotifyContext(t){return this._notifyContext===t}get notifyMethod(){return this._notifyMethod}set notifyMethod(t){this._notifyMethod=t}get notifyContext(){return this._notifyContext}set notifyContext(t){this._notifyContext=t}}class e{constructor(t){if(null!=e.instanceMap.get(t))throw new Error(e.MULTITON_MSG);this.multitonKey=t,e.instanceMap.set(this.multitonKey,this),this.mediatorMap=new Map,this.observerMap=new Map,this.initializeView()}initializeView(){}static getInstance(t,i){return null==e.instanceMap&&(e.instanceMap=new Map),null==e.instanceMap.get(t)&&e.instanceMap.set(t,i(t)),e.instanceMap.get(t)}registerObserver(t,e){if(null!=this.observerMap.get(t)){this.observerMap.get(t).push(e)}else this.observerMap.set(t,new Array(e))}notifyObservers(t){if(this.observerMap.has(t.name)){let e=this.observerMap.get(t.name).slice();for(let i=0;i0){let n=new t(e.handleNotification.bind(e),e);for(let t=0;tnew e(t)))}static getInstance(t,e){return null==i.instanceMap&&(i.instanceMap=new Map),null==i.instanceMap.get(t)&&i.instanceMap.set(t,e(t)),i.instanceMap.get(t)}executeCommand(t){let e=this.commandMap.get(t.name);if(null==e)return;let i=e();i.initializeNotifier(this.multitonKey),i.execute(t)}registerCommand(e,i){null==this.commandMap.get(e)&&this.view.registerObserver(e,new t(this.executeCommand,this)),this.commandMap.set(e,i)}hasCommand(t){return this.commandMap.has(t)}removeCommand(t){this.hasCommand(t)&&(this.view.removeObserver(t,this),this.commandMap.delete(t))}static removeController(t){i.instanceMap.delete(t)}static get MULTITON_MSG(){return"Controller instance for this Multiton key already constructed!"}}class n{constructor(t){if(null!=n.instanceMap.get(t))throw new Error(n.MULTITON_MSG);this.multitonKey=t,n.instanceMap.set(this.multitonKey,this),this.proxyMap=new Map,this.initializeModel()}initializeModel(){}static getInstance(t,e){return null==n.instanceMap&&(n.instanceMap=new Map),null==n.instanceMap.get(t)&&n.instanceMap.set(t,e(t)),n.instanceMap.get(t)}registerProxy(t){t.initializeNotifier(this.multitonKey),this.proxyMap.set(t.proxyName,t),t.onRegister()}retrieveProxy(t){return this.proxyMap.get(t)||null}hasProxy(t){return this.proxyMap.has(t)}removeProxy(t){let e=this.proxyMap.get(t);return null!=e&&(this.proxyMap.delete(t),e.onRemove()),e}static removeModel(t){n.instanceMap.delete(t)}static get MULTITON_MSG(){return"Model instance for this Multiton key already constructed!"}}class r{constructor(t,e=null,i=""){this._name=t,this._body=e,this._type=i}get name(){return this._name}get body(){return this._body}set body(t){this._body=t}get type(){return this._type}set type(t){this._type=t}toString(){let t="Notification Name: "+this.name;return t+="\nBody:"+(null==this.body?"null":this.body.toString()),t+="\nType:"+(null==this.type?"null":this.type),t}}class s{constructor(t){if(null!=s.instanceMap[t])throw new Error(s.MULTITON_MSG);this.initializeNotifier(t),s.instanceMap.set(this.multitonKey,this),this.initializeFacade()}initializeFacade(){this.initializeModel(),this.initializeController(),this.initializeView()}static getInstance(t,e){return null==s.instanceMap&&(s.instanceMap=new Map),null==s.instanceMap.get(t)&&s.instanceMap.set(t,e(t)),s.instanceMap.get(t)}initializeModel(){null==this.model&&(this.model=n.getInstance(this.multitonKey,(t=>new n(t))))}initializeController(){null==this.controller&&(this.controller=i.getInstance(this.multitonKey,(t=>new i(t))))}initializeView(){null==this.view&&(this.view=e.getInstance(this.multitonKey,(t=>new e(t))))}registerCommand(t,e){this.controller.registerCommand(t,e)}hasCommand(t){return this.controller.hasCommand(t)}removeCommand(t){this.controller.removeCommand(t)}registerProxy(t){this.model.registerProxy(t)}removeProxy(t){return this.model.removeProxy(t)}hasProxy(t){return this.model.hasProxy(t)}retrieveProxy(t){return this.model.retrieveProxy(t)}registerMediator(t){this.view.registerMediator(t)}removeMediator(t){return this.view.removeMediator(t)}hasMediator(t){return this.view.hasMediator(t)}retrieveMediator(t){return this.view.retrieveMediator(t)}sendNotification(t,e=null,i=""){this.notifyObservers(new r(t,e,i))}notifyObservers(t){this.view.notifyObservers(t)}initializeNotifier(t){this.multitonKey=t}static hasCore(t){return this.instanceMap.has(t)}static removeCore(t){null!=s.instanceMap.get(t)&&(n.removeModel(t),e.removeView(t),i.removeController(t),this.instanceMap.delete(t))}static get MULTITON_MSG(){return"Facade instance for this Multiton key already constructed!"}}class o{constructor(){}sendNotification(t,e=null,i=""){null!=this.facade&&this.facade.sendNotification(t,e,i)}initializeNotifier(t){this.multitonKey=t}get facade(){if(null==this.multitonKey)throw new Error(o.MULTITON_MSG);return s.getInstance(this.multitonKey,(t=>new s(t)))}static get MULTITON_MSG(){return"multitonKey for this Notifier not yet initialized!"}}class a extends o{constructor(){super()}execute(t){}}class l extends o{constructor(t,e=null){super(),this._mediatorName=t||l.NAME,this._viewComponent=e}onRegister(){}onRemove(){}listNotificationInterests(){return[]}handleNotification(t){}get mediatorName(){return this._mediatorName}get viewComponent(){return this._viewComponent}set viewComponent(t){this._viewComponent=t}static get NAME(){return"Mediator"}}class h extends o{constructor(t,e=null){super(),this._proxyName=t||h.NAME,this._data=e}onRegister(){}onRemove(){}get proxyName(){return this._proxyName}get data(){return this._data}set data(t){this._data=t}static get NAME(){return"Proxy"}}exports.Controller=i,exports.Facade=s,exports.MacroCommand=class extends a{constructor(){super(),this.subCommands=[],this.initializeMacroCommand()}initializeMacroCommand(){}addSubCommand(t){this.subCommands.push(t)}execute(t){for(;this.subCommands.length>0;){let e=this.subCommands.shift()();e.initializeNotifier(this.multitonKey),e.execute(t)}}},exports.Mediator=l,exports.Model=n,exports.Notification=r,exports.Notifier=o,exports.Observer=t,exports.Proxy=h,exports.SimpleCommand=a,exports.View=e; -//# sourceMappingURL=puremvc.min.cjs.map diff --git a/bin/cjs/puremvc.min.cjs.map b/bin/cjs/puremvc.min.cjs.map deleted file mode 100644 index 9bf7af3..0000000 --- a/bin/cjs/puremvc.min.cjs.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"puremvc.min.cjs","sources":["../../src/patterns/observer/Observer.js","../../src/core/View.js","../../src/core/Controller.js","../../src/core/Model.js","../../src/patterns/observer/Notification.js","../../src/patterns/facade/Facade.js","../../src/patterns/observer/Notifier.js","../../src/patterns/command/SimpleCommand.js","../../src/patterns/mediator/Mediator.js","../../src/patterns/proxy/Proxy.js","../../src/patterns/command/MacroCommand.js"],"sourcesContent":["/*\n * Observer.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n * A base `Observer` implementation.\n *\n *

An `Observer` is an object that encapsulates information\n * about an interested object with a method that should\n * be called when a particular `Notification` is broadcast.

\n *\n *

In PureMVC, the `Observer` class assumes these responsibilities:

\n *\n *
    \n *
  • Encapsulate the notification (callback) method of the interested object.
  • \n *
  • Encapsulate the notification context (this) of the interested object.
  • \n *
  • Provide methods for setting the notification method and context.
  • \n *
  • Provide a method for notifying the interested object.
  • \n *
\n *\n * @class Observer\n */\nclass Observer {\n\n /**\n * Constructor.\n *\n *

The notification method on the interested object should take\n * one parameter of type `Notification`

\n *\n * @param {function(Notification):void} notifyMethod\n * @param {Object} notifyContext\n */\n constructor(notifyMethod, notifyContext) {\n this._notifyMethod = notifyMethod;\n this._notifyContext = notifyContext;\n }\n\n /**\n * Notify the interested object.\n *\n * @param {Notification} notification\n */\n notifyObserver(notification) {\n this._notifyMethod.call(this._notifyContext, notification);\n }\n\n /**\n * Compare an object to the notification context.\n *\n * @param {Object} notifyContext\n * @returns {boolean}\n */\n compareNotifyContext(notifyContext) {\n return this._notifyContext === notifyContext;\n }\n\n /**\n * Get the notification method.\n *\n * @returns {function(Notification):void}\n */\n get notifyMethod() {\n return this._notifyMethod\n }\n\n /**\n * Set the notification method.\n *\n *

The notification method should take one parameter of type `Notification`.

\n *\n * @param {function(Notification): void} notifyMethod - The function to be called when a notification is received.\n */\n set notifyMethod(notifyMethod) {\n this._notifyMethod = notifyMethod;\n }\n\n /**\n * Get the notifyContext\n *\n * @returns {Object}\n */\n get notifyContext() {\n return this._notifyContext;\n }\n\n /**\n * Set the notification context.\n *\n * @param {Object} notifyContext\n */\n set notifyContext(notifyContext) {\n this._notifyContext = notifyContext;\n }\n\n}\nexport { Observer }\n","/*\n * View.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Observer} from \"../patterns/observer/Observer.js\";\n\n/**\n * A Multiton `View` implementation.\n *\n *

In PureMVC, the `View` class assumes these responsibilities:

\n *\n *
    \n *
  • Maintain a cache of `Mediator` instances.
  • \n *
  • Provide methods for registering, retrieving, and removing `Mediators`.
  • \n *
  • Notifying `Mediators` when they are registered or removed.
  • \n *
  • Managing the observer lists for each `Notification` in the application.
  • \n *
  • Providing a method for attaching `Observers` to a `Notification`'s observer list.
  • \n *
  • Providing a method for broadcasting a `Notification`.
  • \n *
  • Notifying the `Observers` of a given `Notification` when it broadcast.
  • \n *
\n *\n * @see Mediator Mediator\n * @see Observer Observer\n * @see Notification Notification\n *\n * @class View\n */\nclass View {\n\n /**\n * Constructor.\n *\n *

This `View` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Multiton\n * Factory method `View.getInstance( multitonKey )`\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n */\n constructor(key) {\n if (View.instanceMap.get(key) != null) throw new Error(View.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n View.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.mediatorMap = new Map();\n /** @protected\n * @type {Map.>} */\n this.observerMap = new Map();\n this.initializeView();\n }\n\n /**\n *

Initialize the Multiton View instance.

\n *\n *

Called automatically by the constructor, this\n * is your opportunity to initialize the Multiton\n * instance in your subclass without overriding the\n * constructor.

\n */\n initializeView() {\n\n }\n\n /**\n * View Multiton factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):View} factory\n * @returns {View} the Multiton instance of `View`\n */\n static getInstance(key, factory) {\n if (View.instanceMap == null)\n /** @static\n * @type {Map} */\n View.instanceMap = new Map();\n if (View.instanceMap.get(key) == null) View.instanceMap.set(key, factory(key));\n return View.instanceMap.get(key);\n }\n\n /**\n *

Register an `Observer` to be notified\n * of `Notifications` with a given name.

\n *\n * @param {string} notificationName the name of the `Notifications` to notify this `Observer` of\n * @param {Observer} observer the `Observer` to register\n */\n registerObserver(notificationName, observer) {\n if (this.observerMap.get(notificationName) != null) {\n let observers = this.observerMap.get(notificationName);\n observers.push(observer);\n } else {\n this.observerMap.set(notificationName, new Array(observer));\n }\n }\n\n /**\n *

Notify the `Observers` for a particular `Notification`.

\n *\n *

All previously attached `Observers` for this `Notification`'s\n * list are notified and are passed a reference to the `Notification` in\n * the order in which they were registered.

\n *\n * @param {Notification} notification the `Notification` to notify `Observers` of.\n */\n notifyObservers(notification) {\n if (this.observerMap.has(notification.name)) {\n // Copy observers from reference array to working array,\n // since the reference array may change during the notification loop\n let observers = this.observerMap.get(notification.name).slice();\n\n // Notify Observers from the working array\n for(let i = 0; i < observers.length; i++) {\n observers[i].notifyObserver(notification);\n }\n }\n }\n\n /**\n *

Remove the observer for a given notifyContext from an observer list for a given Notification name.

\n *\n * @param {string} notificationName which observer list to remove from\n * @param {Object} notifyContext remove the observer with this object as its notifyContext\n */\n removeObserver(notificationName, notifyContext) {\n // the observer list for the notification under inspection\n let observers = this.observerMap.get(notificationName);\n\n // find the observer for the notifyContext\n for (let i = 0; i < observers.length; i++) {\n if (observers[i].compareNotifyContext(notifyContext) === true) {\n // there can only be one Observer for a given notifyContext\n // in any given Observer list, so remove it and break\n observers.splice(i, 1);\n break;\n }\n }\n\n // Also, when a Notification's Observer list length falls to\n // zero, delete the notification key from the observer map\n if (observers.length === 0) {\n this.observerMap.delete(notificationName);\n }\n }\n\n /**\n * Register a `Mediator` instance with the `View`.\n *\n *

Registers the `Mediator` so that it can be retrieved by name,\n * and further interrogates the `Mediator` for its\n * `Notification` interests.

\n *\n *

If the `Mediator` returns any `Notification`\n * names to be notified about, an `Observer` is created encapsulating\n * the `Mediator` instance's `handleNotification` method\n * and registering it as an `Observer` for all `Notifications` the\n * `Mediator` is interested in.

\n *\n * @param {Mediator} mediator a reference to the `Mediator` instance\n */\n registerMediator(mediator) {\n // do not allow re-registration (you must to removeMediator fist)\n if (this.mediatorMap.has(mediator.mediatorName) !== false) return;\n\n mediator.initializeNotifier(this.multitonKey);\n\n // Register the Mediator for retrieval by name\n this.mediatorMap.set(mediator.mediatorName, mediator);\n\n // Get Notification interests, if any.\n let interests = mediator.listNotificationInterests();\n\n // Register Mediator as an observer for each notification of interests\n if (interests.length > 0) {\n // Create Observer referencing this mediator's handleNotification method\n let observer = new Observer(mediator.handleNotification.bind(mediator), mediator); // check bind\n\n // Register Mediator as Observer for its list of Notification interests\n for (let i = 0; i < interests.length; i++) {\n this.registerObserver(interests[i], observer);\n }\n }\n\n // alert the mediator that it has been registered\n mediator.onRegister();\n }\n\n /**\n * Retrieve a `Mediator` from the `View`.\n *\n * @param {string} mediatorName the name of the `Mediator` instance to retrieve.\n * @returns {Mediator} the `Mediator` instance previously registered with the given `mediatorName`.\n */\n retrieveMediator(mediatorName) {\n return this.mediatorMap.get(mediatorName) || null;\n }\n\n /**\n * Remove a `Mediator` from the `View`.\n *\n * @param {string} mediatorName name of the `Mediator` instance to be removed.\n * @returns {Mediator} the `Mediator` that was removed from the `View`\n */\n removeMediator(mediatorName) {\n // Retrieve the named mediator\n let mediator = this.mediatorMap.get(mediatorName);\n\n if (mediator) {\n // for every notification this mediator is interested in...\n let interests = mediator.listNotificationInterests();\n for (let i = 0; i < interests.length; i++) {\n // remove the observer linking the mediator\n // to the notification interest\n this.removeObserver(interests[i], mediator);\n }\n\n // remove the mediator from the map\n this.mediatorMap.delete(mediatorName);\n\n // alert the mediator that it has been removed\n mediator.onRemove();\n }\n\n return mediator;\n }\n\n /**\n * Check if a Mediator is registered or not\n *\n * @param {string} mediatorName\n * @returns {boolean} whether a Mediator is registered with the given `mediatorName`.\n */\n hasMediator(mediatorName) {\n return this.mediatorMap.has(mediatorName);\n }\n\n /**\n * Remove a View instance\n *\n * @static\n * @param key multitonKey of View instance to remove\n */\n static removeView(key) {\n this.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"View instance for this Multiton key already constructed!\" };\n\n}\nexport { View }\n","/*\n * Controller.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {View} from \"./View.js\"\nimport {Observer} from \"../patterns/observer/Observer.js\";\n\n/**\n * A Multiton `Controller` implementation.\n *\n *

In PureMVC, the `Controller` class follows the\n * 'Command and Controller' strategy, and assumes these\n * responsibilities:

\n *\n *
    \n *
  • Remembering which `Command`s\n * are intended to handle which `Notifications`.
  • \n *
  • Registering itself as an `Observer` with\n * the `View` for each `Notification`\n * that it has a `Command` mapping for.
  • \n *
  • Creating a new instance of the proper `Command`\n * to handle a given `Notification` when notified by the `View`.
  • \n *
  • Calling the `Command`'s `execute`\n * method, passing in the `Notification`.
  • \n *
\n *\n *

Your application must register `Commands` with the\n * Controller.

\n *\n *

The simplest way is to subclass `Facade`,\n * and use its `initializeController` method to add your\n * registrations.

\n *\n * @see View View\n * @see Observer Observer\n * @see Notification Notification\n * @see SimpleCommand SimpleCommand\n * @see MacroCommand MacroCommand\n *\n * @class Controller\n */\nclass Controller {\n\n /**\n * Constructor.\n *\n *

This `Controller` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Factory method,\n * passing the unique key for this instance\n * `Controller.getInstance( multitonKey )`

\n *\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n *\n * @constructor\n * @param {string} key\n */\n constructor(key) {\n if (Controller.instanceMap[key] != null) throw new Error(Controller.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n Controller.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.commandMap = new Map();\n this.initializeController();\n }\n\n /**\n * Initialize the Multiton `Controller` instance.\n *\n *

Called automatically by the constructor.

\n *\n *

Note that if you are using a subclass of `View`\n * in your application, you should also subclass `Controller`\n * and override the `initializeController` method in the\n * following way:

\n *\n *
`\n     *\t\t// ensure that the Controller is talking to my View implementation\n     *\t\tinitializeController( )\n     *\t\t{\n     *\t\t\tthis.view = MyView.getInstance(this.multitonKey, (key) => new MyView(key));\n     *\t\t}\n     * `
\n *\n */\n initializeController() {\n /** @protected\n * @type {View} **/\n this.view = View.getInstance(this.multitonKey, (key) => new View(key));\n }\n\n /**\n * `Controller` Multiton Factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):Controller} factory\n * @returns {Controller} the Multiton instance of `Controller`\n */\n static getInstance(key, factory) {\n if (Controller.instanceMap == null)\n /** @static\n @type {Map} */\n Controller.instanceMap = new Map();\n if (Controller.instanceMap.get(key) == null) Controller.instanceMap.set(key, factory(key));\n return Controller.instanceMap.get(key);\n }\n\n /**\n *

If a `Command` has previously been registered\n * to handle the given `Notification`, then it is executed.

\n *\n * @param {Notification} notification a `Notification`\n */\n executeCommand(notification) {\n let factory = this.commandMap.get(notification.name);\n if (factory == null) return;\n\n let commandInstance = factory();\n commandInstance.initializeNotifier(this.multitonKey);\n commandInstance.execute(notification);\n }\n\n /**\n *

Register a particular `Command` class as the handler\n * for a particular `Notification`.

\n *\n *

If an `Command` has already been registered to\n * handle `Notification`s with this name, it is no longer\n * used, the new `Command` is used instead.

\n *\n *

The Observer for the new Command is only created if this the\n * first time a Command has been registered for this Notification name.

\n *\n * @param notificationName the name of the `Notification`\n * @param {function():SimpleCommand} factory\n */\n registerCommand(notificationName, factory) {\n if (this.commandMap.get(notificationName) == null) {\n this.view.registerObserver(notificationName, new Observer(this.executeCommand, this));\n }\n this.commandMap.set(notificationName, factory);\n }\n\n /**\n * Check if a Command is registered for a given Notification\n *\n * @param {string} notificationName\n * @return {boolean} whether a Command is currently registered for the given `notificationName`.\n */\n hasCommand(notificationName) {\n return this.commandMap.has(notificationName);\n }\n\n /**\n * Remove a previously registered `Command` to `Notification` mapping.\n *\n * @param {string} notificationName the name of the `Notification` to remove the `Command` mapping for\n */\n removeCommand(notificationName) {\n // if the Command is registered...\n if(this.hasCommand(notificationName)) {\n // remove the observer\n this.view.removeObserver(notificationName, this);\n\n // remove the command\n this.commandMap.delete(notificationName)\n }\n }\n\n /**\n * Remove a Controller instance\n *\n * @static\n * @param {string} key of Controller instance to remove\n */\n static removeController(key) {\n Controller.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"Controller instance for this Multiton key already constructed!\" };\n}\nexport { Controller }\n","/*\n * Model.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n * A Multiton `Model` implementation.\n *\n *

In PureMVC, the `Model` class provides\n * access to model objects (Proxies) by named lookup.\n *\n *

The `Model` assumes these responsibilities:

\n *\n *
    \n *
  • Maintain a cache of `Proxy` instances.
  • \n *
  • Provide methods for registering, retrieving, and removing\n * `Proxy` instances.
  • \n *
\n *\n *

Your application must register `Proxy` instances\n * with the `Model`. Typically, you use an\n * `Command` to create and register `Proxy`\n * instances once the `Facade` has initialized the Core\n * actors.

\n *\n * @see Proxy Proxy\n *\n * @class Model\n */\n\nclass Model {\n\n /**\n * Constructor.\n *\n *

This `Model` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Multiton\n * Factory method `Model.getInstance( multitonKey )`\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key instance has already been constructed\n */\n constructor(key) {\n if (Model.instanceMap.get(key) != null) throw new Error(Model.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n Model.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.proxyMap = new Map();\n this.initializeModel();\n }\n\n /**\n * Initialize the `Model` instance.\n *\n *

Called automatically by the constructor, this\n * is your opportunity to initialize the Multiton\n * instance in your subclass without overriding the\n * constructor.

\n *\n */\n initializeModel() {\n\n }\n\n /**\n * `Model` Multiton Factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):Model} factory\n * @returns {Model} the instance for this Multiton key\n */\n static getInstance(key, factory) {\n if (Model.instanceMap == null)\n /** @static\n @type {Map} */\n Model.instanceMap = new Map();\n if (Model.instanceMap.get(key) == null) Model.instanceMap.set(key, factory(key));\n return Model.instanceMap.get(key);\n }\n\n /**\n * Register a `Proxy` with the `Model`.\n *\n * @param {Proxy} proxy a `Proxy` to be held by the `Model`.\n */\n registerProxy(proxy) {\n proxy.initializeNotifier(this.multitonKey);\n this.proxyMap.set(proxy.proxyName, proxy);\n proxy.onRegister();\n }\n\n /**\n * Retrieve a `Proxy` from the `Model`.\n *\n * @param {string} proxyName\n * @returns {Proxy} the `Proxy` instance previously registered with the given `proxyName`.\n */\n retrieveProxy(proxyName) {\n return this.proxyMap.get(proxyName) || null;\n }\n\n /**\n * Check if a Proxy is registered\n *\n * @param {string} proxyName\n * @returns {boolean} whether a Proxy is currently registered with the given `proxyName`.\n */\n hasProxy(proxyName) {\n return this.proxyMap.has(proxyName);\n }\n\n /**\n * Remove a `Proxy` from the `Model`.\n *\n * @param {string} proxyName name of the `Proxy` instance to be removed.\n * @returns {Proxy} the `Proxy` that was removed from the `Model`\n */\n removeProxy(proxyName) {\n let proxy = this.proxyMap.get(proxyName);\n if (proxy != null) {\n this.proxyMap.delete(proxyName);\n proxy.onRemove();\n }\n return proxy;\n }\n\n /**\n * Remove a Model instance\n *\n * @static\n * @param key\n */\n static removeModel(key) {\n Model.instanceMap.delete(key);\n }\n\n /**\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"Model instance for this Multiton key already constructed!\" };\n}\nexport { Model }","/*\n * Notification.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n *\n * A base `Notification` implementation.\n *\n *

PureMVC does not rely upon underlying event models such\n * as the one provided with Flash, and ActionScript 3 does\n * not have an inherent event model.

\n *\n *

The Observer Pattern as implemented within PureMVC exists\n * to support event-driven communication between the\n * application and the actors of the MVC triad.

\n *\n *

Notifications are not meant to be a replacement for Events\n * in Flex/Flash/Apollo. Generally, `Mediator` implementors\n * place event listeners on their view components, which they\n * then handle in the usual way. This may lead to the broadcast of `Notification`s to\n * trigger `Command`s or to communicate with other `Mediators`. `Proxy` and `Command`\n * instances communicate with each other and `Mediator`s\n * by broadcasting `Notification`s.

\n *\n *

A key difference between Flash `Event`s and PureMVC\n * `Notification`s is that `Event`s follow the\n * 'Chain of Responsibility' pattern, 'bubbling' up the display hierarchy\n * until some parent component handles the `Event`, while\n * PureMVC `Notification`s follow a 'Publish/Subscribe'\n * pattern. PureMVC classes need not be related to each other in a\n * parent/child relationship in order to communicate with one another\n * using `Notification`s.

\n *\n * @class Notification\n */\nclass Notification {\n\n /**\n * Constructor.\n *\n * @constructor\n * @param {string} name - The name of the notification.\n * @param {Object|null} [body=null] - The body of the notification, defaults to `null`.\n * @param {string} [type=\"\"] - The type of the notification, defaults to an empty string.\n */\n constructor(name, body = null, type = \"\") {\n this._name = name;\n this._body = body;\n this._type = type;\n }\n\n /**\n * Get the name of the `Notification` instance.\n *\n * @returns {string}\n */\n get name() {\n return this._name;\n }\n\n /**\n * Get the body of the `Notification` instance.\n *\n * @returns {Object}\n */\n get body() {\n return this._body;\n }\n\n /**\n * Set the body of the `Notification` instance.\n *\n * @param {Object|null} body\n */\n set body(body) {\n this._body = body;\n }\n\n /**\n * Get the type of the `Notification` instance.\n *\n * @returns {string}\n */\n get type() {\n return this._type;\n }\n\n /**\n * Set the type of the `Notification` instance.\n *\n * @param {string} type\n */\n set type(type) {\n this._type = type;\n }\n\n /**\n * Get the string representation of the `Notification` instance.\n *\n * @returns {string}\n */\n toString() {\n let str= \"Notification Name: \" + this.name;\n str+= \"\\nBody:\" + ((this.body == null ) ? \"null\" : this.body.toString());\n str+= \"\\nType:\" + ((this.type == null ) ? \"null\" : this.type);\n return str;\n }\n\n}\nexport { Notification }\n","/*\n * Facade.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Controller} from \"../../core/Controller.js\";\nimport {Model} from \"../../core/Model.js\";\nimport {View} from \"../../core/View.js\";\nimport {Notification} from \"../observer/Notification.js\";\n\n/**\n * A base Multiton `Facade` implementation.\n *\n * @see Model Model\n * @see View View\n * @see Controller Controller\n *\n * @class Facade\n */\nclass Facade {\n\n /**\n * Constructor.\n *\n *

This `Facade` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Factory method,\n * passing the unique key for this instance\n * `Facade.getInstance( multitonKey )`

\n *\n * @constructor\n * @param {string} key\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n */\n constructor(key) {\n if (Facade.instanceMap[key] != null) throw new Error(Facade.MULTITON_MSG);\n this.initializeNotifier(key);\n Facade.instanceMap.set(this.multitonKey, this);\n this.initializeFacade();\n }\n\n /**\n * Initialize the Multiton `Facade` instance.\n *\n *

Called automatically by the constructor. Override in your\n * subclass to do any subclass specific initializations. Be\n * sure to call `super.initializeFacade()`, though.

\n */\n initializeFacade() {\n this.initializeModel();\n this.initializeController();\n this.initializeView();\n }\n\n /**\n * Facade Multiton Factory method\n *\n * @static\n * @param {string} key\n * @param {function(string):Facade} factory\n * @returns {Facade} the Multiton instance of the Facade\n */\n static getInstance(key, factory) {\n if (Facade.instanceMap == null)\n /** @static\n * @type {Map} */\n Facade.instanceMap = new Map();\n if (Facade.instanceMap.get(key) == null) Facade.instanceMap.set(key, factory(key));\n return Facade.instanceMap.get(key);\n }\n\n /**\n * Initialize the `Model`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `Model`.
  • \n *
  • You have `Proxy`s to register with the Model that do not\n * retrieve a reference to the Facade at construction time.`
  • \n *
\n *\n * If you don't want to initialize a different `Model`,\n * call `super.initializeModel()` at the beginning of your\n * method, then register `Proxy`s.\n *\n *

Note: This method is rarely overridden; in practice you are more\n * likely to use a `Command` to create and register `Proxy`s\n * with the `Model`, since `Proxy`s with mutable data will likely\n * need to send `Notification`s and thus will likely want to fetch a reference to\n * the `Facade` during their construction.

\n */\n initializeModel() {\n if (this.model != null) return;\n this.model = Model.getInstance(this.multitonKey, key => new Model(key));\n }\n\n /**\n * Initialize the `Controller`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `Controller`.
  • \n *
  • You have `Commands` to register with the `Controller` at startup.`.
  • \n *
\n *\n *

If you don't want to initialize a different `Controller`,\n * call `super.initializeController()` at the beginning of your\n * method, then register `Command`s.

\n */\n initializeController() {\n if (this.controller != null) return;\n this.controller = Controller.getInstance(this.multitonKey, key => new Controller(key));\n }\n\n /**\n * Initialize the `View`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `View`.
  • \n *
  • You have `Observers` to register with the `View`
  • \n *
\n *\n *

If you don't want to initialize a different `View`,\n * call `super.initializeView()` at the beginning of your\n * method, then register `Mediator` instances.

\n *\n *

Note: This method is rarely overridden; in practice you are more\n * likely to use a `Command` to create and register `Mediator`s\n * with the `View`, since `Mediator` instances will need to send\n * `Notification`s and thus will likely want to fetch a reference\n * to the `Facade` during their construction.

\n */\n initializeView() {\n if (this.view != null) return;\n this.view = View.getInstance(this.multitonKey, key => new View(key));\n }\n\n /**\n * Register a `Command` with the `Controller` by Notification name.\n *\n * @param {string} notificationName the name of the `Notification` to associate the `Command` with\n * @param {function():SimpleCommand} factory a reference to the factory of the `Command`\n */\n registerCommand(notificationName, factory) {\n this.controller.registerCommand(notificationName, factory);\n }\n\n /**\n * Check if a Command is registered for a given Notification\n *\n * @param {string} notificationName\n * @returns {boolean} whether a Command is currently registered for the given `notificationName`.\n */\n hasCommand(notificationName) {\n return this.controller.hasCommand(notificationName);\n }\n\n /**\n * Remove a previously registered `Command` to `Notification` mapping from the Controller.\n *\n * @param {string} notificationName the name of the `Notification` to remove the `Command` mapping for\n */\n removeCommand(notificationName) {\n this.controller.removeCommand(notificationName);\n }\n\n /**\n * Register a `Proxy` with the `Model` by name.\n *\n * @param {Proxy} proxy the `Proxy` instance to be registered with the `Model`.\n */\n registerProxy(proxy) {\n this.model.registerProxy(proxy);\n }\n\n /**\n * Remove a `Proxy` from the `Model` by name.\n *\n * @param {string} proxyName the `Proxy` to remove from the `Model`.\n * @returns {Proxy} the `Proxy` that was removed from the `Model`\n */\n removeProxy(proxyName) {\n return this.model.removeProxy(proxyName);\n }\n\n /**\n * Check if a Proxy is registered\n *\n * @param {string} proxyName\n * @returns {boolean} whether a Proxy is currently registered with the given `proxyName`.\n */\n hasProxy(proxyName) {\n return this.model.hasProxy(proxyName);\n }\n\n /**\n * Retrieve a `Proxy` from the `Model` by name.\n *\n * @param {string} proxyName the name of the proxy to be retrieved.\n * @returns {Proxy} the `Proxy` instance previously registered with the given `proxyName`.\n */\n retrieveProxy(proxyName) {\n return this.model.retrieveProxy(proxyName);\n }\n\n /**\n * Register a `Mediator` with the `View`.\n *\n * @param {Mediator} mediator a reference to the `Mediator`\n */\n registerMediator(mediator) {\n this.view.registerMediator(mediator);\n }\n\n /**\n * Remove a `Mediator` from the `View`.\n *\n * @param {string} mediatorName name of the `Mediator` to be removed.\n * @returns {Mediator} the `Mediator` that was removed from the `View`\n */\n removeMediator(mediatorName) {\n return this.view.removeMediator(mediatorName);\n }\n\n /**\n * Check if a Mediator is registered or not\n *\n * @param {string} mediatorName\n * @returns {boolean} whether a Mediator is registered with the given `mediatorName`.\n */\n hasMediator(mediatorName) {\n return this.view.hasMediator(mediatorName);\n }\n\n /**\n * Retrieve a `Mediator` from the `View`.\n *\n * @param {string} mediatorName\n * @returns {Mediator} the `Mediator` previously registered with the given `mediatorName`.\n */\n retrieveMediator(mediatorName) {\n return this.view.retrieveMediator(mediatorName);\n }\n\n /**\n * Create and send an `Notification`.\n *\n *

Keeps us from having to construct new notification\n * instances in our implementation code.

\n *\n * @param {string} notificationName the name of the notification to send\n * @param {Object} [body] body the body of the notification (optional)\n * @param {string} [type] type the type of the notification (optional)\n */\n sendNotification(notificationName, body = null, type = \"\") {\n this.notifyObservers(new Notification(notificationName, body, type));\n }\n\n /**\n * Notify `Observer`s.\n *\n *

This method is left public mostly for backward\n * compatibility, and to allow you to send custom\n * notification classes using the facade.

\n *\n *

Usually you should just call sendNotification\n * and pass the parameters, never having to\n * construct the notification yourself.

\n *\n * @param {Notification} notification the `Notification` to have the `View` notify `Observers` of.\n */\n notifyObservers(notification) {\n this.view.notifyObservers(notification);\n }\n\n /**\n * Set the Multiton key for this facade instance.\n *\n *

Not called directly, but instead from the\n * constructor when getInstance is invoked.\n * It is necessary to be public in order to\n * implement Notifier.

\n */\n initializeNotifier(key) {\n this.multitonKey = key;\n }\n\n /**\n * Check if a Core is registered or not\n *\n * @static\n * @param {string} key the multiton key for the Core in question\n * @returns {boolean} whether a Core is registered with the given `key`.\n */\n static hasCore(key) {\n return this.instanceMap.has(key);\n }\n\n /**\n * Remove a Core.\n *\n *

Remove the Model, View, Controller and Facade\n * instances for the given key.

\n *\n * @static\n * @param {string} key multitonKey of the Core to remove\n */\n static removeCore(key) {\n if (Facade.instanceMap.get(key) == null) return;\n Model.removeModel(key);\n View.removeView(key);\n Controller.removeController(key);\n this.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @returns {string}\n */\n static get MULTITON_MSG() {return \"Facade instance for this Multiton key already constructed!\"};\n}\nexport { Facade }\n","/*\n * Notifier.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Facade} from \"../facade/Facade.js\";\n\n/**\n * A Base `Notifier` implementation.\n *\n *

`MacroCommand, Command, Mediator` and `Proxy`\n * all have a need to send `Notifications`.

\n *\n *

The `Notifier` interface provides a common method called\n * `sendNotification` that relieves implementation code of\n * the necessity to actually construct `Notifications`.

\n *\n *

The `Notifier` class, which all the above-mentioned classes\n * extend, provides an initialized reference to the `Facade`\n * Multiton, which is required for the convenience method\n * for sending `Notifications`, but also eases implementation as these\n * classes have frequent `Facade` interactions and usually require\n * access to the facade anyway.

\n *\n *

NOTE: In the MultiCore version of the framework, there is one caveat to\n * notifiers, they cannot send notifications or reach the facade until they\n * have a valid multitonKey.

\n *\n * The multitonKey is set:\n * * on a Command when it is executed by the Controller\n * * on a Mediator is registered with the View\n * * on a Proxy is registered with the Model.\n *\n * @see Proxy Proxy\n * @see Facade Facade\n * @see Mediator Mediator\n * @see MacroCommand MacroCommand\n * @see SimpleCommand SimpleCommand\n *\n * @class Notifier\n */\nclass Notifier {\n\n constructor() {}\n\n /**\n * Create and send an `Notification`.\n *\n *

Keeps us from having to construct new Notification\n * instances in our implementation code.

\n *\n * @param {string} notificationName\n * @param {Object} [body] body\n * @param {string} [type] type\n */\n sendNotification (notificationName, body = null, type = \"\") {\n if (this.facade != null) {\n this.facade.sendNotification(notificationName, body, type);\n }\n }\n\n /**\n * Initialize this Notifier instance.\n *\n *

This is how a Notifier gets its multitonKey.\n * Calls to sendNotification or to access the\n * facade will fail until after this method\n * has been called.

\n *\n *

Mediators, Commands or Proxies may override\n * this method in order to send notifications\n * or access the Multiton Facade instance as\n * soon as possible. They CANNOT access the facade\n * in their constructors, since this method will not\n * yet have been called.

\n *\n * @param {string} key the multitonKey for this Notifier to use\n */\n initializeNotifier(key) {\n this.multitonKey = key;\n }\n\n /**\n * Return the Multiton Facade instance\n *\n * @typedef {Facade} Facade\n *\n * @throws {Error}\n */\n get facade() {\n if (this.multitonKey == null) throw new Error(Notifier.MULTITON_MSG);\n return Facade.getInstance(this.multitonKey, key => new Facade(key));\n }\n\n /**\n * Message Constants\n *\n * @static\n * @returns {string}\n */\n static get MULTITON_MSG() { return \"multitonKey for this Notifier not yet initialized!\" }\n}\nexport { Notifier }\n","/*\n * SimpleCommand.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Command` implementation.\n *\n *

Your subclass should override the `execute`\n * method where your business logic will handle the `Notification`.

\n *\n * @see Controller Controller\n * @see Notification Notification\n * @see MacroCommand MacroCommand\n *\n * @class SimpleCommand\n */\nclass SimpleCommand extends Notifier {\n\n constructor() {\n super();\n }\n\n /**\n * Fulfill the use-case initiated by the given `Notification`.\n *\n *

In the Command Pattern, an application use-case typically\n * begins with some user action, which results in a `Notification` being broadcast, which\n * is handled by business logic in the `execute` method of an\n * `Command`.

\n *\n * @param {Notification} notification\n */\n execute(notification) {\n\n }\n\n}\nexport { SimpleCommand }\n","/*\n * Mediator.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Mediator` implementation.\n *\n * @see View View\n *\n * @class Mediator\n */\nclass Mediator extends Notifier {\n\n /**\n * Constructor.\n *\n * @constructor\n * @param {string} mediatorName\n * @param {Object} [viewComponent] viewComponent\n */\n constructor(mediatorName, viewComponent = null) {\n super();\n this._mediatorName = mediatorName || Mediator.NAME;\n this._viewComponent = viewComponent;\n }\n\n /**\n * Called by the View when the Mediator is registered\n */\n onRegister() {\n\n }\n\n /**\n * Called by the View when the Mediator is removed\n */\n onRemove() {\n\n }\n\n /**\n * List the `Notification` names this\n * `Mediator` is interested in being notified of.\n *\n * @returns {string[]}\n */\n listNotificationInterests() {\n return [];\n }\n\n /**\n * Handle `Notification`s.\n *\n *

\n * Typically this will be handled in a switch statement,\n * with one 'case' entry per `Notification`\n * the `Mediator` is interested in.\n *\n * @param {Notification} notification\n */\n handleNotification(notification) {\n\n }\n\n /**\n * the mediator name\n *\n * @returns {string}\n */\n get mediatorName() {\n return this._mediatorName;\n }\n\n /**\n * Get the `Mediator`'s view component.\n *\n *

\n * Additionally, an implicit getter will usually\n * be defined in the subclass that casts the view\n * object to a type, like this:

\n *\n * @returns {Object}\n */\n get viewComponent() {\n return this._viewComponent;\n }\n\n /**\n * Set the `Mediator`'s view component.\n *\n * @param {Object} viewComponent\n */\n set viewComponent(viewComponent) {\n this._viewComponent = viewComponent;\n }\n\n /**\n * The name of the `Mediator`.\n *\n *

Typically, a `Mediator` will be written to serve\n * one specific control or group controls and so,\n * will not have a need to be dynamically named.

\n *\n * @static\n * @returns {string}\n */\n static get NAME() { return \"Mediator\" }\n}\nexport { Mediator }\n","/*\n * Proxy.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Proxy` implementation.\n *\n *

In PureMVC, `Proxy` classes are used to manage parts of the\n * application's data model.

\n *\n *

A `Proxy` might simply manage a reference to a local data object,\n * in which case interacting with it might involve setting and\n * getting of its data in synchronous fashion.

\n *\n *

`Proxy` classes are also used to encapsulate the application's\n * interaction with remote services to save or retrieve data, in which case,\n * we adopt an asynchronous idiom; setting data (or calling a method) on the\n * `Proxy` and listening for a `Notification` to be sent\n * when the `Proxy` has retrieved the data from the service.

\n *\n * @see Model Model\n *\n * @class Proxy\n */\nclass Proxy extends Notifier {\n /**\n * Constructor\n *\n * @constructor\n * @param {string} proxyName\n * @param {Object} [data]\n */\n constructor(proxyName, data = null) {\n super();\n /** @protected\n * @type {string} */\n this._proxyName = proxyName || Proxy.NAME;\n /** @protected\n * @type {Object} */\n this._data = data;\n }\n\n /**\n * Called by the Model when the Proxy is registered\n */\n onRegister() {}\n\n /**\n * Called by the Model when the Proxy is removed\n */\n onRemove() {}\n\n /**\n * Get the proxy name\n *\n * @returns {string}\n */\n get proxyName() {\n return this._proxyName;\n }\n\n /**\n * Get the data object\n *\n * @returns {Object}\n */\n get data () {\n return this._data;\n }\n\n /**\n * Set the data object\n *\n * @param {Object} data\n */\n set data(data) {\n this._data = data;\n }\n\n /**\n *\n * @static\n * @returns {string}\n */\n static get NAME() { return \"Proxy\" }\n}\nexport { Proxy }\n","/*\n * MacroCommand.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {SimpleCommand} from \"./SimpleCommand.js\";\n\n/**\n * A base `Command` implementation that executes other `Command`s.\n *\n *

A `MacroCommand` maintains a list of\n * `Command` Class references called SubCommands.

\n *\n *

When `execute` is called, the `MacroCommand`\n * instantiates and calls `execute` on each of its SubCommands turn.\n * Each SubCommand will be passed a reference to the original\n * `Notification` that was passed to the `MacroCommand`'s\n * `execute` method.

\n *\n *

Unlike `SimpleCommand`, your subclass\n * should not override `execute`, but instead, should\n * override the `initializeMacroCommand` method,\n * calling `addSubCommand` once for each SubCommand\n * to be executed.

\n *\n * @see Controller Controller\n * @see Notification Notification\n * @see SimpleCommand SimpleCommand\n *\n * @class MacroCommand\n */\nclass MacroCommand extends SimpleCommand {\n\n /**\n * Constructor.\n *\n *

You should not need to define a constructor,\n * instead, override the `initializeMacroCommand`\n * method.

\n *\n *

If your subclass does define a constructor, be\n * sure to call `super()`.

\n *\n * @constructor\n */\n constructor() {\n super();\n /** @protected\n * @type {Array.} */\n this.subCommands = [];\n this.initializeMacroCommand();\n }\n\n /**\n * Initialize the `MacroCommand`.\n *\n *

In your subclass, override this method to\n * initialize the `MacroCommand`'s SubCommand\n * list with `Command` class references like\n * this:

\n *\n *
`\n     *\t\t// Initialize MyMacroCommand\n     *\t\tinitializeMacroCommand() {\n     *\t\t\tthis.addSubCommand(() => new app.FirstCommand());\n     *\t\t\tthis.addSubCommand(() => new app.SecondCommand());\n     *\t\t\tthis.addSubCommand(() => new app.ThirdCommand());\n     *\t\t}\n     * `
\n *\n *

Note that SubCommands may be any `Command` implementor,\n * `MacroCommand`s or `SimpleCommands` are both acceptable.\n */\n initializeMacroCommand() {\n\n }\n\n /**\n * Add a SubCommand.\n *\n *

The SubCommands will be called in First In/First Out (FIFO)\n * order.

\n *\n * @param {function():SimpleCommand} factory\n */\n addSubCommand(factory) {\n this.subCommands.push(factory);\n }\n\n /**\n * Execute this `MacroCommand`'s SubCommands.\n *\n *

The SubCommands will be called in First In/First Out (FIFO)\n * order.

\n *\n * @param {Notification} notification\n */\n execute(notification) {\n while(this.subCommands.length > 0) {\n let factory = this.subCommands.shift();\n let commandInstance = factory();\n commandInstance.initializeNotifier(this.multitonKey);\n commandInstance.execute(notification);\n }\n }\n\n}\nexport { MacroCommand }\n"],"names":["Observer","constructor","notifyMethod","notifyContext","this","_notifyMethod","_notifyContext","notifyObserver","notification","call","compareNotifyContext","View","key","instanceMap","get","Error","MULTITON_MSG","multitonKey","set","mediatorMap","Map","observerMap","initializeView","getInstance","factory","registerObserver","notificationName","observer","push","Array","notifyObservers","has","name","observers","slice","i","length","removeObserver","splice","delete","registerMediator","mediator","mediatorName","initializeNotifier","interests","listNotificationInterests","handleNotification","bind","onRegister","retrieveMediator","removeMediator","onRemove","hasMediator","removeView","Controller","commandMap","initializeController","view","executeCommand","commandInstance","execute","registerCommand","hasCommand","removeCommand","removeController","Model","proxyMap","initializeModel","registerProxy","proxy","proxyName","retrieveProxy","hasProxy","removeProxy","removeModel","Notification","body","type","_name","_body","_type","toString","str","Facade","initializeFacade","model","controller","sendNotification","hasCore","removeCore","Notifier","facade","SimpleCommand","super","Mediator","viewComponent","_mediatorName","NAME","_viewComponent","Proxy","data","_proxyName","_data","subCommands","initializeMacroCommand","addSubCommand","shift"],"mappings":"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"} \ No newline at end of file diff --git a/bin/esm/puremvc.js b/bin/esm/index.js similarity index 98% rename from bin/esm/puremvc.js rename to bin/esm/index.js index 9d4f99e..6e1013c 100644 --- a/bin/esm/puremvc.js +++ b/bin/esm/index.js @@ -32,12 +32,12 @@ class Observer { *

The notification method on the interested object should take * one parameter of type `Notification`

* - * @param {function(Notification):void} notifyMethod - * @param {Object} notifyContext + * @param {function(Notification):void | null} [notify = null] + * @param {Object | null} [context = null] */ - constructor(notifyMethod, notifyContext) { - this._notifyMethod = notifyMethod; - this._notifyContext = notifyContext; + constructor(notify = null, context = null) { + this._notifyMethod = notify; + this._notifyContext = context; } /** @@ -418,10 +418,10 @@ class Controller { * passing the unique key for this instance * `Controller.getInstance( multitonKey )`

* - * @throws {Error} Error if instance for this Multiton key has already been constructed - * * @constructor * @param {string} key + * + * @throws {Error} Error if instance for this Multiton key has already been constructed */ constructor(key) { if (Controller.instanceMap[key] != null) throw new Error(Controller.MULTITON_MSG); @@ -590,7 +590,6 @@ class Controller { * * @class Model */ - class Model { /** @@ -720,7 +719,6 @@ class Model { */ /** - * * A base `Notification` implementation. * *

PureMVC does not rely upon underlying event models such @@ -778,7 +776,7 @@ class Notification { /** * Get the body of the `Notification` instance. * - * @returns {Object} + * @returns {Object | null} */ get body() { return this._body; @@ -856,6 +854,7 @@ class Facade { * * @constructor * @param {string} key + * * @throws {Error} Error if instance for this Multiton key has already been constructed */ constructor(key) { @@ -1020,7 +1019,7 @@ class Facade { } /** - * Check if a Proxy is registered + * Check if a `Proxy` is registered * * @param {string} proxyName * @returns {boolean} whether a Proxy is currently registered with the given `proxyName`. @@ -1059,7 +1058,7 @@ class Facade { } /** - * Check if a Mediator is registered or not + * Check if a `Mediator` is registered or not * * @param {string} mediatorName * @returns {boolean} whether a Mediator is registered with the given `mediatorName`. @@ -1099,7 +1098,7 @@ class Facade { * compatibility, and to allow you to send custom * notification classes using the facade.

* - *

Usually you should just call sendNotification + *

Usually you should just call `sendNotification` * and pass the parameters, never having to * construct the notification yourself.

* @@ -1438,10 +1437,10 @@ class Mediator extends Notifier { * Constructor. * * @constructor - * @param {string} mediatorName - * @param {Object} [viewComponent] viewComponent + * @param {string | null} [mediatorName=null] + * @param {Object | null} [viewComponent=null] */ - constructor(mediatorName, viewComponent = null) { + constructor(mediatorName = null, viewComponent = null) { super(); this._mediatorName = mediatorName || Mediator.NAME; this._viewComponent = viewComponent; @@ -1502,7 +1501,7 @@ class Mediator extends Notifier { * be defined in the subclass that casts the view * object to a type, like this:

* - * @returns {Object} + * @returns {Object | null} */ get viewComponent() { return this._viewComponent; @@ -1564,16 +1563,16 @@ class Proxy extends Notifier { * Constructor * * @constructor - * @param {string} proxyName - * @param {Object} [data] + * @param {string | null} [proxyName=null] + * @param {Object | null} [data=null] */ - constructor(proxyName, data = null) { + constructor(proxyName = null, data = null) { super(); /** @protected * @type {string} */ this._proxyName = proxyName || Proxy.NAME; /** @protected - * @type {Object} */ + * @type {Object | null} */ this._data = data; } @@ -1599,7 +1598,7 @@ class Proxy extends Notifier { /** * Get the data object * - * @returns {Object} + * @returns {Object | null} */ get data () { return this._data; diff --git a/bin/esm/index.min.js b/bin/esm/index.min.js new file mode 100644 index 0000000..02b3b0d --- /dev/null +++ b/bin/esm/index.min.js @@ -0,0 +1,2 @@ +class t{constructor(t=null,e=null){this._notifyMethod=t,this._notifyContext=e}notifyObserver(t){this._notifyMethod.call(this._notifyContext,t)}compareNotifyContext(t){return this._notifyContext===t}get notifyMethod(){return this._notifyMethod}set notifyMethod(t){this._notifyMethod=t}get notifyContext(){return this._notifyContext}set notifyContext(t){this._notifyContext=t}}class e{constructor(t){if(null!=e.instanceMap.get(t))throw new Error(e.MULTITON_MSG);this.multitonKey=t,e.instanceMap.set(this.multitonKey,this),this.mediatorMap=new Map,this.observerMap=new Map,this.initializeView()}initializeView(){}static getInstance(t,i){return null==e.instanceMap&&(e.instanceMap=new Map),null==e.instanceMap.get(t)&&e.instanceMap.set(t,i(t)),e.instanceMap.get(t)}registerObserver(t,e){if(null!=this.observerMap.get(t)){this.observerMap.get(t).push(e)}else this.observerMap.set(t,new Array(e))}notifyObservers(t){if(this.observerMap.has(t.name)){let e=this.observerMap.get(t.name).slice();for(let i=0;i0){let n=new t(e.handleNotification.bind(e),e);for(let t=0;tnew e(t)))}static getInstance(t,e){return null==i.instanceMap&&(i.instanceMap=new Map),null==i.instanceMap.get(t)&&i.instanceMap.set(t,e(t)),i.instanceMap.get(t)}executeCommand(t){let e=this.commandMap.get(t.name);if(null==e)return;let i=e();i.initializeNotifier(this.multitonKey),i.execute(t)}registerCommand(e,i){null==this.commandMap.get(e)&&this.view.registerObserver(e,new t(this.executeCommand,this)),this.commandMap.set(e,i)}hasCommand(t){return this.commandMap.has(t)}removeCommand(t){this.hasCommand(t)&&(this.view.removeObserver(t,this),this.commandMap.delete(t))}static removeController(t){i.instanceMap.delete(t)}static get MULTITON_MSG(){return"Controller instance for this Multiton key already constructed!"}}class n{constructor(t){if(null!=n.instanceMap.get(t))throw new Error(n.MULTITON_MSG);this.multitonKey=t,n.instanceMap.set(this.multitonKey,this),this.proxyMap=new Map,this.initializeModel()}initializeModel(){}static getInstance(t,e){return null==n.instanceMap&&(n.instanceMap=new Map),null==n.instanceMap.get(t)&&n.instanceMap.set(t,e(t)),n.instanceMap.get(t)}registerProxy(t){t.initializeNotifier(this.multitonKey),this.proxyMap.set(t.proxyName,t),t.onRegister()}retrieveProxy(t){return this.proxyMap.get(t)||null}hasProxy(t){return this.proxyMap.has(t)}removeProxy(t){let e=this.proxyMap.get(t);return null!=e&&(this.proxyMap.delete(t),e.onRemove()),e}static removeModel(t){n.instanceMap.delete(t)}static get MULTITON_MSG(){return"Model instance for this Multiton key already constructed!"}}class s{constructor(t,e=null,i=""){this._name=t,this._body=e,this._type=i}get name(){return this._name}get body(){return this._body}set body(t){this._body=t}get type(){return this._type}set type(t){this._type=t}toString(){let t="Notification Name: "+this.name;return t+="\nBody:"+(null==this.body?"null":this.body.toString()),t+="\nType:"+(null==this.type?"null":this.type),t}}class r{constructor(t){if(null!=r.instanceMap[t])throw new Error(r.MULTITON_MSG);this.initializeNotifier(t),r.instanceMap.set(this.multitonKey,this),this.initializeFacade()}initializeFacade(){this.initializeModel(),this.initializeController(),this.initializeView()}static getInstance(t,e){return null==r.instanceMap&&(r.instanceMap=new Map),null==r.instanceMap.get(t)&&r.instanceMap.set(t,e(t)),r.instanceMap.get(t)}initializeModel(){null==this.model&&(this.model=n.getInstance(this.multitonKey,(t=>new n(t))))}initializeController(){null==this.controller&&(this.controller=i.getInstance(this.multitonKey,(t=>new i(t))))}initializeView(){null==this.view&&(this.view=e.getInstance(this.multitonKey,(t=>new e(t))))}registerCommand(t,e){this.controller.registerCommand(t,e)}hasCommand(t){return this.controller.hasCommand(t)}removeCommand(t){this.controller.removeCommand(t)}registerProxy(t){this.model.registerProxy(t)}removeProxy(t){return this.model.removeProxy(t)}hasProxy(t){return this.model.hasProxy(t)}retrieveProxy(t){return this.model.retrieveProxy(t)}registerMediator(t){this.view.registerMediator(t)}removeMediator(t){return this.view.removeMediator(t)}hasMediator(t){return this.view.hasMediator(t)}retrieveMediator(t){return this.view.retrieveMediator(t)}sendNotification(t,e=null,i=""){this.notifyObservers(new s(t,e,i))}notifyObservers(t){this.view.notifyObservers(t)}initializeNotifier(t){this.multitonKey=t}static hasCore(t){return this.instanceMap.has(t)}static removeCore(t){null!=r.instanceMap.get(t)&&(n.removeModel(t),e.removeView(t),i.removeController(t),this.instanceMap.delete(t))}static get MULTITON_MSG(){return"Facade instance for this Multiton key already constructed!"}}class o{constructor(){}sendNotification(t,e=null,i=""){null!=this.facade&&this.facade.sendNotification(t,e,i)}initializeNotifier(t){this.multitonKey=t}get facade(){if(null==this.multitonKey)throw new Error(o.MULTITON_MSG);return r.getInstance(this.multitonKey,(t=>new r(t)))}static get MULTITON_MSG(){return"multitonKey for this Notifier not yet initialized!"}}class a extends o{constructor(){super()}execute(t){}}class l extends a{constructor(){super(),this.subCommands=[],this.initializeMacroCommand()}initializeMacroCommand(){}addSubCommand(t){this.subCommands.push(t)}execute(t){for(;this.subCommands.length>0;){let e=this.subCommands.shift()();e.initializeNotifier(this.multitonKey),e.execute(t)}}}class h extends o{constructor(t=null,e=null){super(),this._mediatorName=t||h.NAME,this._viewComponent=e}onRegister(){}onRemove(){}listNotificationInterests(){return[]}handleNotification(t){}get mediatorName(){return this._mediatorName}get viewComponent(){return this._viewComponent}set viewComponent(t){this._viewComponent=t}static get NAME(){return"Mediator"}}class c extends o{constructor(t=null,e=null){super(),this._proxyName=t||c.NAME,this._data=e}onRegister(){}onRemove(){}get proxyName(){return this._proxyName}get data(){return this._data}set data(t){this._data=t}static get NAME(){return"Proxy"}}export{i as Controller,r as Facade,l as MacroCommand,h as Mediator,n as Model,s as Notification,o as Notifier,t as Observer,c as Proxy,a as SimpleCommand,e as View}; +//# sourceMappingURL=index.min.js.map diff --git a/bin/esm/index.min.js.map b/bin/esm/index.min.js.map new file mode 100644 index 0000000..cf6946e --- /dev/null +++ b/bin/esm/index.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.min.js","sources":["../../src/patterns/observer/Observer.js","../../src/core/View.js","../../src/core/Controller.js","../../src/core/Model.js","../../src/patterns/observer/Notification.js","../../src/patterns/facade/Facade.js","../../src/patterns/observer/Notifier.js","../../src/patterns/command/SimpleCommand.js","../../src/patterns/command/MacroCommand.js","../../src/patterns/mediator/Mediator.js","../../src/patterns/proxy/Proxy.js"],"sourcesContent":["/*\n * Observer.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n * A base `Observer` implementation.\n *\n *

An `Observer` is an object that encapsulates information\n * about an interested object with a method that should\n * be called when a particular `Notification` is broadcast.

\n *\n *

In PureMVC, the `Observer` class assumes these responsibilities:

\n *\n *
    \n *
  • Encapsulate the notification (callback) method of the interested object.
  • \n *
  • Encapsulate the notification context (this) of the interested object.
  • \n *
  • Provide methods for setting the notification method and context.
  • \n *
  • Provide a method for notifying the interested object.
  • \n *
\n *\n * @class Observer\n */\nclass Observer {\n\n /**\n * Constructor.\n *\n *

The notification method on the interested object should take\n * one parameter of type `Notification`

\n *\n * @param {function(Notification):void | null} [notify = null]\n * @param {Object | null} [context = null]\n */\n constructor(notify = null, context = null) {\n this._notifyMethod = notify;\n this._notifyContext = context;\n }\n\n /**\n * Notify the interested object.\n *\n * @param {Notification} notification\n */\n notifyObserver(notification) {\n this._notifyMethod.call(this._notifyContext, notification);\n }\n\n /**\n * Compare an object to the notification context.\n *\n * @param {Object} notifyContext\n * @returns {boolean}\n */\n compareNotifyContext(notifyContext) {\n return this._notifyContext === notifyContext;\n }\n\n /**\n * Get the notification method.\n *\n * @returns {function(Notification):void}\n */\n get notifyMethod() {\n return this._notifyMethod\n }\n\n /**\n * Set the notification method.\n *\n *

The notification method should take one parameter of type `Notification`.

\n *\n * @param {function(Notification): void} notifyMethod - The function to be called when a notification is received.\n */\n set notifyMethod(notifyMethod) {\n this._notifyMethod = notifyMethod;\n }\n\n /**\n * Get the notifyContext\n *\n * @returns {Object}\n */\n get notifyContext() {\n return this._notifyContext;\n }\n\n /**\n * Set the notification context.\n *\n * @param {Object} notifyContext\n */\n set notifyContext(notifyContext) {\n this._notifyContext = notifyContext;\n }\n\n}\nexport { Observer }\n","/*\n * View.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Observer} from \"../patterns/observer/Observer.js\";\n\n/**\n * A Multiton `View` implementation.\n *\n *

In PureMVC, the `View` class assumes these responsibilities:

\n *\n *
    \n *
  • Maintain a cache of `Mediator` instances.
  • \n *
  • Provide methods for registering, retrieving, and removing `Mediators`.
  • \n *
  • Notifying `Mediators` when they are registered or removed.
  • \n *
  • Managing the observer lists for each `Notification` in the application.
  • \n *
  • Providing a method for attaching `Observers` to a `Notification`'s observer list.
  • \n *
  • Providing a method for broadcasting a `Notification`.
  • \n *
  • Notifying the `Observers` of a given `Notification` when it broadcast.
  • \n *
\n *\n * @see Mediator Mediator\n * @see Observer Observer\n * @see Notification Notification\n *\n * @class View\n */\nclass View {\n\n /**\n * Constructor.\n *\n *

This `View` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Multiton\n * Factory method `View.getInstance( multitonKey )`\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n */\n constructor(key) {\n if (View.instanceMap.get(key) != null) throw new Error(View.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n View.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.mediatorMap = new Map();\n /** @protected\n * @type {Map.>} */\n this.observerMap = new Map();\n this.initializeView();\n }\n\n /**\n *

Initialize the Multiton View instance.

\n *\n *

Called automatically by the constructor, this\n * is your opportunity to initialize the Multiton\n * instance in your subclass without overriding the\n * constructor.

\n */\n initializeView() {\n\n }\n\n /**\n * View Multiton factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):View} factory\n * @returns {View} the Multiton instance of `View`\n */\n static getInstance(key, factory) {\n if (View.instanceMap == null)\n /** @static\n * @type {Map} */\n View.instanceMap = new Map();\n if (View.instanceMap.get(key) == null) View.instanceMap.set(key, factory(key));\n return View.instanceMap.get(key);\n }\n\n /**\n *

Register an `Observer` to be notified\n * of `Notifications` with a given name.

\n *\n * @param {string} notificationName the name of the `Notifications` to notify this `Observer` of\n * @param {Observer} observer the `Observer` to register\n */\n registerObserver(notificationName, observer) {\n if (this.observerMap.get(notificationName) != null) {\n let observers = this.observerMap.get(notificationName);\n observers.push(observer);\n } else {\n this.observerMap.set(notificationName, new Array(observer));\n }\n }\n\n /**\n *

Notify the `Observers` for a particular `Notification`.

\n *\n *

All previously attached `Observers` for this `Notification`'s\n * list are notified and are passed a reference to the `Notification` in\n * the order in which they were registered.

\n *\n * @param {Notification} notification the `Notification` to notify `Observers` of.\n */\n notifyObservers(notification) {\n if (this.observerMap.has(notification.name)) {\n // Copy observers from reference array to working array,\n // since the reference array may change during the notification loop\n let observers = this.observerMap.get(notification.name).slice();\n\n // Notify Observers from the working array\n for(let i = 0; i < observers.length; i++) {\n observers[i].notifyObserver(notification);\n }\n }\n }\n\n /**\n *

Remove the observer for a given notifyContext from an observer list for a given Notification name.

\n *\n * @param {string} notificationName which observer list to remove from\n * @param {Object} notifyContext remove the observer with this object as its notifyContext\n */\n removeObserver(notificationName, notifyContext) {\n // the observer list for the notification under inspection\n let observers = this.observerMap.get(notificationName);\n\n // find the observer for the notifyContext\n for (let i = 0; i < observers.length; i++) {\n if (observers[i].compareNotifyContext(notifyContext) === true) {\n // there can only be one Observer for a given notifyContext\n // in any given Observer list, so remove it and break\n observers.splice(i, 1);\n break;\n }\n }\n\n // Also, when a Notification's Observer list length falls to\n // zero, delete the notification key from the observer map\n if (observers.length === 0) {\n this.observerMap.delete(notificationName);\n }\n }\n\n /**\n * Register a `Mediator` instance with the `View`.\n *\n *

Registers the `Mediator` so that it can be retrieved by name,\n * and further interrogates the `Mediator` for its\n * `Notification` interests.

\n *\n *

If the `Mediator` returns any `Notification`\n * names to be notified about, an `Observer` is created encapsulating\n * the `Mediator` instance's `handleNotification` method\n * and registering it as an `Observer` for all `Notifications` the\n * `Mediator` is interested in.

\n *\n * @param {Mediator} mediator a reference to the `Mediator` instance\n */\n registerMediator(mediator) {\n // do not allow re-registration (you must to removeMediator fist)\n if (this.mediatorMap.has(mediator.mediatorName) !== false) return;\n\n mediator.initializeNotifier(this.multitonKey);\n\n // Register the Mediator for retrieval by name\n this.mediatorMap.set(mediator.mediatorName, mediator);\n\n // Get Notification interests, if any.\n let interests = mediator.listNotificationInterests();\n\n // Register Mediator as an observer for each notification of interests\n if (interests.length > 0) {\n // Create Observer referencing this mediator's handleNotification method\n let observer = new Observer(mediator.handleNotification.bind(mediator), mediator); // check bind\n\n // Register Mediator as Observer for its list of Notification interests\n for (let i = 0; i < interests.length; i++) {\n this.registerObserver(interests[i], observer);\n }\n }\n\n // alert the mediator that it has been registered\n mediator.onRegister();\n }\n\n /**\n * Retrieve a `Mediator` from the `View`.\n *\n * @param {string} mediatorName the name of the `Mediator` instance to retrieve.\n * @returns {Mediator} the `Mediator` instance previously registered with the given `mediatorName`.\n */\n retrieveMediator(mediatorName) {\n return this.mediatorMap.get(mediatorName) || null;\n }\n\n /**\n * Remove a `Mediator` from the `View`.\n *\n * @param {string} mediatorName name of the `Mediator` instance to be removed.\n * @returns {Mediator} the `Mediator` that was removed from the `View`\n */\n removeMediator(mediatorName) {\n // Retrieve the named mediator\n let mediator = this.mediatorMap.get(mediatorName);\n\n if (mediator) {\n // for every notification this mediator is interested in...\n let interests = mediator.listNotificationInterests();\n for (let i = 0; i < interests.length; i++) {\n // remove the observer linking the mediator\n // to the notification interest\n this.removeObserver(interests[i], mediator);\n }\n\n // remove the mediator from the map\n this.mediatorMap.delete(mediatorName);\n\n // alert the mediator that it has been removed\n mediator.onRemove();\n }\n\n return mediator;\n }\n\n /**\n * Check if a Mediator is registered or not\n *\n * @param {string} mediatorName\n * @returns {boolean} whether a Mediator is registered with the given `mediatorName`.\n */\n hasMediator(mediatorName) {\n return this.mediatorMap.has(mediatorName);\n }\n\n /**\n * Remove a View instance\n *\n * @static\n * @param key multitonKey of View instance to remove\n */\n static removeView(key) {\n this.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"View instance for this Multiton key already constructed!\" };\n\n}\nexport { View }\n","/*\n * Controller.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {View} from \"./View.js\"\nimport {Observer} from \"../patterns/observer/Observer.js\";\n\n/**\n * A Multiton `Controller` implementation.\n *\n *

In PureMVC, the `Controller` class follows the\n * 'Command and Controller' strategy, and assumes these\n * responsibilities:

\n *\n *
    \n *
  • Remembering which `Command`s\n * are intended to handle which `Notifications`.
  • \n *
  • Registering itself as an `Observer` with\n * the `View` for each `Notification`\n * that it has a `Command` mapping for.
  • \n *
  • Creating a new instance of the proper `Command`\n * to handle a given `Notification` when notified by the `View`.
  • \n *
  • Calling the `Command`'s `execute`\n * method, passing in the `Notification`.
  • \n *
\n *\n *

Your application must register `Commands` with the\n * Controller.

\n *\n *

The simplest way is to subclass `Facade`,\n * and use its `initializeController` method to add your\n * registrations.

\n *\n * @see View View\n * @see Observer Observer\n * @see Notification Notification\n * @see SimpleCommand SimpleCommand\n * @see MacroCommand MacroCommand\n *\n * @class Controller\n */\nclass Controller {\n\n /**\n * Constructor.\n *\n *

This `Controller` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Factory method,\n * passing the unique key for this instance\n * `Controller.getInstance( multitonKey )`

\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n */\n constructor(key) {\n if (Controller.instanceMap[key] != null) throw new Error(Controller.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n Controller.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.commandMap = new Map();\n this.initializeController();\n }\n\n /**\n * Initialize the Multiton `Controller` instance.\n *\n *

Called automatically by the constructor.

\n *\n *

Note that if you are using a subclass of `View`\n * in your application, you should also subclass `Controller`\n * and override the `initializeController` method in the\n * following way:

\n *\n *
`\n     *\t\t// ensure that the Controller is talking to my View implementation\n     *\t\tinitializeController( )\n     *\t\t{\n     *\t\t\tthis.view = MyView.getInstance(this.multitonKey, (key) => new MyView(key));\n     *\t\t}\n     * `
\n *\n */\n initializeController() {\n /** @protected\n * @type {View} **/\n this.view = View.getInstance(this.multitonKey, (key) => new View(key));\n }\n\n /**\n * `Controller` Multiton Factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):Controller} factory\n * @returns {Controller} the Multiton instance of `Controller`\n */\n static getInstance(key, factory) {\n if (Controller.instanceMap == null)\n /** @static\n @type {Map} */\n Controller.instanceMap = new Map();\n if (Controller.instanceMap.get(key) == null) Controller.instanceMap.set(key, factory(key));\n return Controller.instanceMap.get(key);\n }\n\n /**\n *

If a `Command` has previously been registered\n * to handle the given `Notification`, then it is executed.

\n *\n * @param {Notification} notification a `Notification`\n */\n executeCommand(notification) {\n let factory = this.commandMap.get(notification.name);\n if (factory == null) return;\n\n let commandInstance = factory();\n commandInstance.initializeNotifier(this.multitonKey);\n commandInstance.execute(notification);\n }\n\n /**\n *

Register a particular `Command` class as the handler\n * for a particular `Notification`.

\n *\n *

If an `Command` has already been registered to\n * handle `Notification`s with this name, it is no longer\n * used, the new `Command` is used instead.

\n *\n *

The Observer for the new Command is only created if this the\n * first time a Command has been registered for this Notification name.

\n *\n * @param notificationName the name of the `Notification`\n * @param {function():SimpleCommand} factory\n */\n registerCommand(notificationName, factory) {\n if (this.commandMap.get(notificationName) == null) {\n this.view.registerObserver(notificationName, new Observer(this.executeCommand, this));\n }\n this.commandMap.set(notificationName, factory);\n }\n\n /**\n * Check if a Command is registered for a given Notification\n *\n * @param {string} notificationName\n * @return {boolean} whether a Command is currently registered for the given `notificationName`.\n */\n hasCommand(notificationName) {\n return this.commandMap.has(notificationName);\n }\n\n /**\n * Remove a previously registered `Command` to `Notification` mapping.\n *\n * @param {string} notificationName the name of the `Notification` to remove the `Command` mapping for\n */\n removeCommand(notificationName) {\n // if the Command is registered...\n if(this.hasCommand(notificationName)) {\n // remove the observer\n this.view.removeObserver(notificationName, this);\n\n // remove the command\n this.commandMap.delete(notificationName)\n }\n }\n\n /**\n * Remove a Controller instance\n *\n * @static\n * @param {string} key of Controller instance to remove\n */\n static removeController(key) {\n Controller.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"Controller instance for this Multiton key already constructed!\" };\n}\nexport { Controller }\n","/*\n * Model.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n * A Multiton `Model` implementation.\n *\n *

In PureMVC, the `Model` class provides\n * access to model objects (Proxies) by named lookup.\n *\n *

The `Model` assumes these responsibilities:

\n *\n *
    \n *
  • Maintain a cache of `Proxy` instances.
  • \n *
  • Provide methods for registering, retrieving, and removing\n * `Proxy` instances.
  • \n *
\n *\n *

Your application must register `Proxy` instances\n * with the `Model`. Typically, you use an\n * `Command` to create and register `Proxy`\n * instances once the `Facade` has initialized the Core\n * actors.

\n *\n * @see Proxy Proxy\n *\n * @class Model\n */\nclass Model {\n\n /**\n * Constructor.\n *\n *

This `Model` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Multiton\n * Factory method `Model.getInstance( multitonKey )`\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key instance has already been constructed\n */\n constructor(key) {\n if (Model.instanceMap.get(key) != null) throw new Error(Model.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n Model.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.proxyMap = new Map();\n this.initializeModel();\n }\n\n /**\n * Initialize the `Model` instance.\n *\n *

Called automatically by the constructor, this\n * is your opportunity to initialize the Multiton\n * instance in your subclass without overriding the\n * constructor.

\n *\n */\n initializeModel() {\n\n }\n\n /**\n * `Model` Multiton Factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):Model} factory\n * @returns {Model} the instance for this Multiton key\n */\n static getInstance(key, factory) {\n if (Model.instanceMap == null)\n /** @static\n @type {Map} */\n Model.instanceMap = new Map();\n if (Model.instanceMap.get(key) == null) Model.instanceMap.set(key, factory(key));\n return Model.instanceMap.get(key);\n }\n\n /**\n * Register a `Proxy` with the `Model`.\n *\n * @param {Proxy} proxy a `Proxy` to be held by the `Model`.\n */\n registerProxy(proxy) {\n proxy.initializeNotifier(this.multitonKey);\n this.proxyMap.set(proxy.proxyName, proxy);\n proxy.onRegister();\n }\n\n /**\n * Retrieve a `Proxy` from the `Model`.\n *\n * @param {string} proxyName\n * @returns {Proxy} the `Proxy` instance previously registered with the given `proxyName`.\n */\n retrieveProxy(proxyName) {\n return this.proxyMap.get(proxyName) || null;\n }\n\n /**\n * Check if a Proxy is registered\n *\n * @param {string} proxyName\n * @returns {boolean} whether a Proxy is currently registered with the given `proxyName`.\n */\n hasProxy(proxyName) {\n return this.proxyMap.has(proxyName);\n }\n\n /**\n * Remove a `Proxy` from the `Model`.\n *\n * @param {string} proxyName name of the `Proxy` instance to be removed.\n * @returns {Proxy} the `Proxy` that was removed from the `Model`\n */\n removeProxy(proxyName) {\n let proxy = this.proxyMap.get(proxyName);\n if (proxy != null) {\n this.proxyMap.delete(proxyName);\n proxy.onRemove();\n }\n return proxy;\n }\n\n /**\n * Remove a Model instance\n *\n * @static\n * @param key\n */\n static removeModel(key) {\n Model.instanceMap.delete(key);\n }\n\n /**\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"Model instance for this Multiton key already constructed!\" };\n}\nexport { Model }\n","/*\n * Notification.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n * A base `Notification` implementation.\n *\n *

PureMVC does not rely upon underlying event models such\n * as the one provided with Flash, and ActionScript 3 does\n * not have an inherent event model.

\n *\n *

The Observer Pattern as implemented within PureMVC exists\n * to support event-driven communication between the\n * application and the actors of the MVC triad.

\n *\n *

Notifications are not meant to be a replacement for Events\n * in Flex/Flash/Apollo. Generally, `Mediator` implementors\n * place event listeners on their view components, which they\n * then handle in the usual way. This may lead to the broadcast of `Notification`s to\n * trigger `Command`s or to communicate with other `Mediators`. `Proxy` and `Command`\n * instances communicate with each other and `Mediator`s\n * by broadcasting `Notification`s.

\n *\n *

A key difference between Flash `Event`s and PureMVC\n * `Notification`s is that `Event`s follow the\n * 'Chain of Responsibility' pattern, 'bubbling' up the display hierarchy\n * until some parent component handles the `Event`, while\n * PureMVC `Notification`s follow a 'Publish/Subscribe'\n * pattern. PureMVC classes need not be related to each other in a\n * parent/child relationship in order to communicate with one another\n * using `Notification`s.

\n *\n * @class Notification\n */\nclass Notification {\n\n /**\n * Constructor.\n *\n * @constructor\n * @param {string} name - The name of the notification.\n * @param {Object|null} [body=null] - The body of the notification, defaults to `null`.\n * @param {string} [type=\"\"] - The type of the notification, defaults to an empty string.\n */\n constructor(name, body = null, type = \"\") {\n this._name = name;\n this._body = body;\n this._type = type;\n }\n\n /**\n * Get the name of the `Notification` instance.\n *\n * @returns {string}\n */\n get name() {\n return this._name;\n }\n\n /**\n * Get the body of the `Notification` instance.\n *\n * @returns {Object | null}\n */\n get body() {\n return this._body;\n }\n\n /**\n * Set the body of the `Notification` instance.\n *\n * @param {Object|null} body\n */\n set body(body) {\n this._body = body;\n }\n\n /**\n * Get the type of the `Notification` instance.\n *\n * @returns {string}\n */\n get type() {\n return this._type;\n }\n\n /**\n * Set the type of the `Notification` instance.\n *\n * @param {string} type\n */\n set type(type) {\n this._type = type;\n }\n\n /**\n * Get the string representation of the `Notification` instance.\n *\n * @returns {string}\n */\n toString() {\n let str= \"Notification Name: \" + this.name;\n str+= \"\\nBody:\" + ((this.body == null ) ? \"null\" : this.body.toString());\n str+= \"\\nType:\" + ((this.type == null ) ? \"null\" : this.type);\n return str;\n }\n\n}\nexport { Notification }\n","/*\n * Facade.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Controller} from \"../../core/Controller.js\";\nimport {Model} from \"../../core/Model.js\";\nimport {View} from \"../../core/View.js\";\nimport {Notification} from \"../observer/Notification.js\";\n\n/**\n * A base Multiton `Facade` implementation.\n *\n * @see Model Model\n * @see View View\n * @see Controller Controller\n *\n * @class Facade\n */\nclass Facade {\n\n /**\n * Constructor.\n *\n *

This `Facade` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Factory method,\n * passing the unique key for this instance\n * `Facade.getInstance( multitonKey )`

\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n */\n constructor(key) {\n if (Facade.instanceMap[key] != null) throw new Error(Facade.MULTITON_MSG);\n this.initializeNotifier(key);\n Facade.instanceMap.set(this.multitonKey, this);\n this.initializeFacade();\n }\n\n /**\n * Initialize the Multiton `Facade` instance.\n *\n *

Called automatically by the constructor. Override in your\n * subclass to do any subclass specific initializations. Be\n * sure to call `super.initializeFacade()`, though.

\n */\n initializeFacade() {\n this.initializeModel();\n this.initializeController();\n this.initializeView();\n }\n\n /**\n * Facade Multiton Factory method\n *\n * @static\n * @param {string} key\n * @param {function(string):Facade} factory\n * @returns {Facade} the Multiton instance of the Facade\n */\n static getInstance(key, factory) {\n if (Facade.instanceMap == null)\n /** @static\n * @type {Map} */\n Facade.instanceMap = new Map();\n if (Facade.instanceMap.get(key) == null) Facade.instanceMap.set(key, factory(key));\n return Facade.instanceMap.get(key);\n }\n\n /**\n * Initialize the `Model`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `Model`.
  • \n *
  • You have `Proxy`s to register with the Model that do not\n * retrieve a reference to the Facade at construction time.`
  • \n *
\n *\n * If you don't want to initialize a different `Model`,\n * call `super.initializeModel()` at the beginning of your\n * method, then register `Proxy`s.\n *\n *

Note: This method is rarely overridden; in practice you are more\n * likely to use a `Command` to create and register `Proxy`s\n * with the `Model`, since `Proxy`s with mutable data will likely\n * need to send `Notification`s and thus will likely want to fetch a reference to\n * the `Facade` during their construction.

\n */\n initializeModel() {\n if (this.model != null) return;\n this.model = Model.getInstance(this.multitonKey, key => new Model(key));\n }\n\n /**\n * Initialize the `Controller`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `Controller`.
  • \n *
  • You have `Commands` to register with the `Controller` at startup.`.
  • \n *
\n *\n *

If you don't want to initialize a different `Controller`,\n * call `super.initializeController()` at the beginning of your\n * method, then register `Command`s.

\n */\n initializeController() {\n if (this.controller != null) return;\n this.controller = Controller.getInstance(this.multitonKey, key => new Controller(key));\n }\n\n /**\n * Initialize the `View`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `View`.
  • \n *
  • You have `Observers` to register with the `View`
  • \n *
\n *\n *

If you don't want to initialize a different `View`,\n * call `super.initializeView()` at the beginning of your\n * method, then register `Mediator` instances.

\n *\n *

Note: This method is rarely overridden; in practice you are more\n * likely to use a `Command` to create and register `Mediator`s\n * with the `View`, since `Mediator` instances will need to send\n * `Notification`s and thus will likely want to fetch a reference\n * to the `Facade` during their construction.

\n */\n initializeView() {\n if (this.view != null) return;\n this.view = View.getInstance(this.multitonKey, key => new View(key));\n }\n\n /**\n * Register a `Command` with the `Controller` by Notification name.\n *\n * @param {string} notificationName the name of the `Notification` to associate the `Command` with\n * @param {function():SimpleCommand} factory a reference to the factory of the `Command`\n */\n registerCommand(notificationName, factory) {\n this.controller.registerCommand(notificationName, factory);\n }\n\n /**\n * Check if a Command is registered for a given Notification\n *\n * @param {string} notificationName\n * @returns {boolean} whether a Command is currently registered for the given `notificationName`.\n */\n hasCommand(notificationName) {\n return this.controller.hasCommand(notificationName);\n }\n\n /**\n * Remove a previously registered `Command` to `Notification` mapping from the Controller.\n *\n * @param {string} notificationName the name of the `Notification` to remove the `Command` mapping for\n */\n removeCommand(notificationName) {\n this.controller.removeCommand(notificationName);\n }\n\n /**\n * Register a `Proxy` with the `Model` by name.\n *\n * @param {Proxy} proxy the `Proxy` instance to be registered with the `Model`.\n */\n registerProxy(proxy) {\n this.model.registerProxy(proxy);\n }\n\n /**\n * Remove a `Proxy` from the `Model` by name.\n *\n * @param {string} proxyName the `Proxy` to remove from the `Model`.\n * @returns {Proxy} the `Proxy` that was removed from the `Model`\n */\n removeProxy(proxyName) {\n return this.model.removeProxy(proxyName);\n }\n\n /**\n * Check if a `Proxy` is registered\n *\n * @param {string} proxyName\n * @returns {boolean} whether a Proxy is currently registered with the given `proxyName`.\n */\n hasProxy(proxyName) {\n return this.model.hasProxy(proxyName);\n }\n\n /**\n * Retrieve a `Proxy` from the `Model` by name.\n *\n * @param {string} proxyName the name of the proxy to be retrieved.\n * @returns {Proxy} the `Proxy` instance previously registered with the given `proxyName`.\n */\n retrieveProxy(proxyName) {\n return this.model.retrieveProxy(proxyName);\n }\n\n /**\n * Register a `Mediator` with the `View`.\n *\n * @param {Mediator} mediator a reference to the `Mediator`\n */\n registerMediator(mediator) {\n this.view.registerMediator(mediator);\n }\n\n /**\n * Remove a `Mediator` from the `View`.\n *\n * @param {string} mediatorName name of the `Mediator` to be removed.\n * @returns {Mediator} the `Mediator` that was removed from the `View`\n */\n removeMediator(mediatorName) {\n return this.view.removeMediator(mediatorName);\n }\n\n /**\n * Check if a `Mediator` is registered or not\n *\n * @param {string} mediatorName\n * @returns {boolean} whether a Mediator is registered with the given `mediatorName`.\n */\n hasMediator(mediatorName) {\n return this.view.hasMediator(mediatorName);\n }\n\n /**\n * Retrieve a `Mediator` from the `View`.\n *\n * @param {string} mediatorName\n * @returns {Mediator} the `Mediator` previously registered with the given `mediatorName`.\n */\n retrieveMediator(mediatorName) {\n return this.view.retrieveMediator(mediatorName);\n }\n\n /**\n * Create and send an `Notification`.\n *\n *

Keeps us from having to construct new notification\n * instances in our implementation code.

\n *\n * @param {string} notificationName the name of the notification to send\n * @param {Object} [body] body the body of the notification (optional)\n * @param {string} [type] type the type of the notification (optional)\n */\n sendNotification(notificationName, body = null, type = \"\") {\n this.notifyObservers(new Notification(notificationName, body, type));\n }\n\n /**\n * Notify `Observer`s.\n *\n *

This method is left public mostly for backward\n * compatibility, and to allow you to send custom\n * notification classes using the facade.

\n *\n *

Usually you should just call `sendNotification`\n * and pass the parameters, never having to\n * construct the notification yourself.

\n *\n * @param {Notification} notification the `Notification` to have the `View` notify `Observers` of.\n */\n notifyObservers(notification) {\n this.view.notifyObservers(notification);\n }\n\n /**\n * Set the Multiton key for this facade instance.\n *\n *

Not called directly, but instead from the\n * constructor when getInstance is invoked.\n * It is necessary to be public in order to\n * implement Notifier.

\n */\n initializeNotifier(key) {\n this.multitonKey = key;\n }\n\n /**\n * Check if a Core is registered or not\n *\n * @static\n * @param {string} key the multiton key for the Core in question\n * @returns {boolean} whether a Core is registered with the given `key`.\n */\n static hasCore(key) {\n return this.instanceMap.has(key);\n }\n\n /**\n * Remove a Core.\n *\n *

Remove the Model, View, Controller and Facade\n * instances for the given key.

\n *\n * @static\n * @param {string} key multitonKey of the Core to remove\n */\n static removeCore(key) {\n if (Facade.instanceMap.get(key) == null) return;\n Model.removeModel(key);\n View.removeView(key);\n Controller.removeController(key);\n this.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @returns {string}\n */\n static get MULTITON_MSG() {return \"Facade instance for this Multiton key already constructed!\"};\n}\nexport { Facade }\n","/*\n * Notifier.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Facade} from \"../facade/Facade.js\";\n\n/**\n * A Base `Notifier` implementation.\n *\n *

`MacroCommand, Command, Mediator` and `Proxy`\n * all have a need to send `Notifications`.

\n *\n *

The `Notifier` interface provides a common method called\n * `sendNotification` that relieves implementation code of\n * the necessity to actually construct `Notifications`.

\n *\n *

The `Notifier` class, which all the above-mentioned classes\n * extend, provides an initialized reference to the `Facade`\n * Multiton, which is required for the convenience method\n * for sending `Notifications`, but also eases implementation as these\n * classes have frequent `Facade` interactions and usually require\n * access to the facade anyway.

\n *\n *

NOTE: In the MultiCore version of the framework, there is one caveat to\n * notifiers, they cannot send notifications or reach the facade until they\n * have a valid multitonKey.

\n *\n * The multitonKey is set:\n * * on a Command when it is executed by the Controller\n * * on a Mediator is registered with the View\n * * on a Proxy is registered with the Model.\n *\n * @see Proxy Proxy\n * @see Facade Facade\n * @see Mediator Mediator\n * @see MacroCommand MacroCommand\n * @see SimpleCommand SimpleCommand\n *\n * @class Notifier\n */\nclass Notifier {\n\n constructor() {}\n\n /**\n * Create and send an `Notification`.\n *\n *

Keeps us from having to construct new Notification\n * instances in our implementation code.

\n *\n * @param {string} notificationName\n * @param {Object} [body] body\n * @param {string} [type] type\n */\n sendNotification (notificationName, body = null, type = \"\") {\n if (this.facade != null) {\n this.facade.sendNotification(notificationName, body, type);\n }\n }\n\n /**\n * Initialize this Notifier instance.\n *\n *

This is how a Notifier gets its multitonKey.\n * Calls to sendNotification or to access the\n * facade will fail until after this method\n * has been called.

\n *\n *

Mediators, Commands or Proxies may override\n * this method in order to send notifications\n * or access the Multiton Facade instance as\n * soon as possible. They CANNOT access the facade\n * in their constructors, since this method will not\n * yet have been called.

\n *\n * @param {string} key the multitonKey for this Notifier to use\n */\n initializeNotifier(key) {\n this.multitonKey = key;\n }\n\n /**\n * Return the Multiton Facade instance\n *\n * @typedef {Facade} Facade\n *\n * @throws {Error}\n */\n get facade() {\n if (this.multitonKey == null) throw new Error(Notifier.MULTITON_MSG);\n return Facade.getInstance(this.multitonKey, key => new Facade(key));\n }\n\n /**\n * Message Constants\n *\n * @static\n * @returns {string}\n */\n static get MULTITON_MSG() { return \"multitonKey for this Notifier not yet initialized!\" }\n}\nexport { Notifier }\n","/*\n * SimpleCommand.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Command` implementation.\n *\n *

Your subclass should override the `execute`\n * method where your business logic will handle the `Notification`.

\n *\n * @see Controller Controller\n * @see Notification Notification\n * @see MacroCommand MacroCommand\n *\n * @class SimpleCommand\n */\nclass SimpleCommand extends Notifier {\n\n constructor() {\n super();\n }\n\n /**\n * Fulfill the use-case initiated by the given `Notification`.\n *\n *

In the Command Pattern, an application use-case typically\n * begins with some user action, which results in a `Notification` being broadcast, which\n * is handled by business logic in the `execute` method of an\n * `Command`.

\n *\n * @param {Notification} notification\n */\n execute(notification) {\n\n }\n\n}\nexport { SimpleCommand }\n","/*\n * MacroCommand.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {SimpleCommand} from \"./SimpleCommand.js\";\n\n/**\n * A base `Command` implementation that executes other `Command`s.\n *\n *

A `MacroCommand` maintains a list of\n * `Command` Class references called SubCommands.

\n *\n *

When `execute` is called, the `MacroCommand`\n * instantiates and calls `execute` on each of its SubCommands turn.\n * Each SubCommand will be passed a reference to the original\n * `Notification` that was passed to the `MacroCommand`'s\n * `execute` method.

\n *\n *

Unlike `SimpleCommand`, your subclass\n * should not override `execute`, but instead, should\n * override the `initializeMacroCommand` method,\n * calling `addSubCommand` once for each SubCommand\n * to be executed.

\n *\n * @see Controller Controller\n * @see Notification Notification\n * @see SimpleCommand SimpleCommand\n *\n * @class MacroCommand\n */\nclass MacroCommand extends SimpleCommand {\n\n /**\n * Constructor.\n *\n *

You should not need to define a constructor,\n * instead, override the `initializeMacroCommand`\n * method.

\n *\n *

If your subclass does define a constructor, be\n * sure to call `super()`.

\n *\n * @constructor\n */\n constructor() {\n super();\n /** @protected\n * @type {Array.} */\n this.subCommands = [];\n this.initializeMacroCommand();\n }\n\n /**\n * Initialize the `MacroCommand`.\n *\n *

In your subclass, override this method to\n * initialize the `MacroCommand`'s SubCommand\n * list with `Command` class references like\n * this:

\n *\n *
`\n     *\t\t// Initialize MyMacroCommand\n     *\t\tinitializeMacroCommand() {\n     *\t\t\tthis.addSubCommand(() => new app.FirstCommand());\n     *\t\t\tthis.addSubCommand(() => new app.SecondCommand());\n     *\t\t\tthis.addSubCommand(() => new app.ThirdCommand());\n     *\t\t}\n     * `
\n *\n *

Note that SubCommands may be any `Command` implementor,\n * `MacroCommand`s or `SimpleCommands` are both acceptable.\n */\n initializeMacroCommand() {\n\n }\n\n /**\n * Add a SubCommand.\n *\n *

The SubCommands will be called in First In/First Out (FIFO)\n * order.

\n *\n * @param {function():SimpleCommand} factory\n */\n addSubCommand(factory) {\n this.subCommands.push(factory);\n }\n\n /**\n * Execute this `MacroCommand`'s SubCommands.\n *\n *

The SubCommands will be called in First In/First Out (FIFO)\n * order.

\n *\n * @param {Notification} notification\n */\n execute(notification) {\n while(this.subCommands.length > 0) {\n let factory = this.subCommands.shift();\n let commandInstance = factory();\n commandInstance.initializeNotifier(this.multitonKey);\n commandInstance.execute(notification);\n }\n }\n\n}\nexport { MacroCommand }\n","/*\n * Mediator.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Mediator` implementation.\n *\n * @see View View\n *\n * @class Mediator\n */\nclass Mediator extends Notifier {\n\n /**\n * Constructor.\n *\n * @constructor\n * @param {string | null} [mediatorName=null]\n * @param {Object | null} [viewComponent=null]\n */\n constructor(mediatorName = null, viewComponent = null) {\n super();\n this._mediatorName = mediatorName || Mediator.NAME;\n this._viewComponent = viewComponent;\n }\n\n /**\n * Called by the View when the Mediator is registered\n */\n onRegister() {\n\n }\n\n /**\n * Called by the View when the Mediator is removed\n */\n onRemove() {\n\n }\n\n /**\n * List the `Notification` names this\n * `Mediator` is interested in being notified of.\n *\n * @returns {string[]}\n */\n listNotificationInterests() {\n return [];\n }\n\n /**\n * Handle `Notification`s.\n *\n *

\n * Typically this will be handled in a switch statement,\n * with one 'case' entry per `Notification`\n * the `Mediator` is interested in.\n *\n * @param {Notification} notification\n */\n handleNotification(notification) {\n\n }\n\n /**\n * the mediator name\n *\n * @returns {string}\n */\n get mediatorName() {\n return this._mediatorName;\n }\n\n /**\n * Get the `Mediator`'s view component.\n *\n *

\n * Additionally, an implicit getter will usually\n * be defined in the subclass that casts the view\n * object to a type, like this:

\n *\n * @returns {Object | null}\n */\n get viewComponent() {\n return this._viewComponent;\n }\n\n /**\n * Set the `Mediator`'s view component.\n *\n * @param {Object} viewComponent\n */\n set viewComponent(viewComponent) {\n this._viewComponent = viewComponent;\n }\n\n /**\n * The name of the `Mediator`.\n *\n *

Typically, a `Mediator` will be written to serve\n * one specific control or group controls and so,\n * will not have a need to be dynamically named.

\n *\n * @static\n * @returns {string}\n */\n static get NAME() { return \"Mediator\" }\n}\nexport { Mediator }\n","/*\n * Proxy.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Proxy` implementation.\n *\n *

In PureMVC, `Proxy` classes are used to manage parts of the\n * application's data model.

\n *\n *

A `Proxy` might simply manage a reference to a local data object,\n * in which case interacting with it might involve setting and\n * getting of its data in synchronous fashion.

\n *\n *

`Proxy` classes are also used to encapsulate the application's\n * interaction with remote services to save or retrieve data, in which case,\n * we adopt an asynchronous idiom; setting data (or calling a method) on the\n * `Proxy` and listening for a `Notification` to be sent\n * when the `Proxy` has retrieved the data from the service.

\n *\n * @see Model Model\n *\n * @class Proxy\n */\nclass Proxy extends Notifier {\n /**\n * Constructor\n *\n * @constructor\n * @param {string | null} [proxyName=null]\n * @param {Object | null} [data=null]\n */\n constructor(proxyName = null, data = null) {\n super();\n /** @protected\n * @type {string} */\n this._proxyName = proxyName || Proxy.NAME;\n /** @protected\n * @type {Object | null} */\n this._data = data;\n }\n\n /**\n * Called by the Model when the Proxy is registered\n */\n onRegister() {}\n\n /**\n * Called by the Model when the Proxy is removed\n */\n onRemove() {}\n\n /**\n * Get the proxy name\n *\n * @returns {string}\n */\n get proxyName() {\n return this._proxyName;\n }\n\n /**\n * Get the data object\n *\n * @returns {Object | null}\n */\n get data () {\n return this._data;\n }\n\n /**\n * Set the data object\n *\n * @param {Object} data\n */\n set data(data) {\n this._data = data;\n }\n\n /**\n *\n * @static\n * @returns {string}\n */\n static get NAME() { return \"Proxy\" }\n}\nexport { Proxy }\n"],"names":["Observer","constructor","notify","context","this","_notifyMethod","_notifyContext","notifyObserver","notification","call","compareNotifyContext","notifyContext","notifyMethod","View","key","instanceMap","get","Error","MULTITON_MSG","multitonKey","set","mediatorMap","Map","observerMap","initializeView","getInstance","factory","registerObserver","notificationName","observer","push","Array","notifyObservers","has","name","observers","slice","i","length","removeObserver","splice","delete","registerMediator","mediator","mediatorName","initializeNotifier","interests","listNotificationInterests","handleNotification","bind","onRegister","retrieveMediator","removeMediator","onRemove","hasMediator","removeView","Controller","commandMap","initializeController","view","executeCommand","commandInstance","execute","registerCommand","hasCommand","removeCommand","removeController","Model","proxyMap","initializeModel","registerProxy","proxy","proxyName","retrieveProxy","hasProxy","removeProxy","removeModel","Notification","body","type","_name","_body","_type","toString","str","Facade","initializeFacade","model","controller","sendNotification","hasCore","removeCore","Notifier","facade","SimpleCommand","super","MacroCommand","subCommands","initializeMacroCommand","addSubCommand","shift","Mediator","viewComponent","_mediatorName","NAME","_viewComponent","Proxy","data","_proxyName","_data"],"mappings":"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"} \ No newline at end of file diff --git a/bin/esm/puremvc.min.js b/bin/esm/puremvc.min.js deleted file mode 100644 index e7cd717..0000000 --- a/bin/esm/puremvc.min.js +++ /dev/null @@ -1,2 +0,0 @@ -class t{constructor(t,e){this._notifyMethod=t,this._notifyContext=e}notifyObserver(t){this._notifyMethod.call(this._notifyContext,t)}compareNotifyContext(t){return this._notifyContext===t}get notifyMethod(){return this._notifyMethod}set notifyMethod(t){this._notifyMethod=t}get notifyContext(){return this._notifyContext}set notifyContext(t){this._notifyContext=t}}class e{constructor(t){if(null!=e.instanceMap.get(t))throw new Error(e.MULTITON_MSG);this.multitonKey=t,e.instanceMap.set(this.multitonKey,this),this.mediatorMap=new Map,this.observerMap=new Map,this.initializeView()}initializeView(){}static getInstance(t,i){return null==e.instanceMap&&(e.instanceMap=new Map),null==e.instanceMap.get(t)&&e.instanceMap.set(t,i(t)),e.instanceMap.get(t)}registerObserver(t,e){if(null!=this.observerMap.get(t)){this.observerMap.get(t).push(e)}else this.observerMap.set(t,new Array(e))}notifyObservers(t){if(this.observerMap.has(t.name)){let e=this.observerMap.get(t.name).slice();for(let i=0;i0){let n=new t(e.handleNotification.bind(e),e);for(let t=0;tnew e(t)))}static getInstance(t,e){return null==i.instanceMap&&(i.instanceMap=new Map),null==i.instanceMap.get(t)&&i.instanceMap.set(t,e(t)),i.instanceMap.get(t)}executeCommand(t){let e=this.commandMap.get(t.name);if(null==e)return;let i=e();i.initializeNotifier(this.multitonKey),i.execute(t)}registerCommand(e,i){null==this.commandMap.get(e)&&this.view.registerObserver(e,new t(this.executeCommand,this)),this.commandMap.set(e,i)}hasCommand(t){return this.commandMap.has(t)}removeCommand(t){this.hasCommand(t)&&(this.view.removeObserver(t,this),this.commandMap.delete(t))}static removeController(t){i.instanceMap.delete(t)}static get MULTITON_MSG(){return"Controller instance for this Multiton key already constructed!"}}class n{constructor(t){if(null!=n.instanceMap.get(t))throw new Error(n.MULTITON_MSG);this.multitonKey=t,n.instanceMap.set(this.multitonKey,this),this.proxyMap=new Map,this.initializeModel()}initializeModel(){}static getInstance(t,e){return null==n.instanceMap&&(n.instanceMap=new Map),null==n.instanceMap.get(t)&&n.instanceMap.set(t,e(t)),n.instanceMap.get(t)}registerProxy(t){t.initializeNotifier(this.multitonKey),this.proxyMap.set(t.proxyName,t),t.onRegister()}retrieveProxy(t){return this.proxyMap.get(t)||null}hasProxy(t){return this.proxyMap.has(t)}removeProxy(t){let e=this.proxyMap.get(t);return null!=e&&(this.proxyMap.delete(t),e.onRemove()),e}static removeModel(t){n.instanceMap.delete(t)}static get MULTITON_MSG(){return"Model instance for this Multiton key already constructed!"}}class s{constructor(t,e=null,i=""){this._name=t,this._body=e,this._type=i}get name(){return this._name}get body(){return this._body}set body(t){this._body=t}get type(){return this._type}set type(t){this._type=t}toString(){let t="Notification Name: "+this.name;return t+="\nBody:"+(null==this.body?"null":this.body.toString()),t+="\nType:"+(null==this.type?"null":this.type),t}}class r{constructor(t){if(null!=r.instanceMap[t])throw new Error(r.MULTITON_MSG);this.initializeNotifier(t),r.instanceMap.set(this.multitonKey,this),this.initializeFacade()}initializeFacade(){this.initializeModel(),this.initializeController(),this.initializeView()}static getInstance(t,e){return null==r.instanceMap&&(r.instanceMap=new Map),null==r.instanceMap.get(t)&&r.instanceMap.set(t,e(t)),r.instanceMap.get(t)}initializeModel(){null==this.model&&(this.model=n.getInstance(this.multitonKey,(t=>new n(t))))}initializeController(){null==this.controller&&(this.controller=i.getInstance(this.multitonKey,(t=>new i(t))))}initializeView(){null==this.view&&(this.view=e.getInstance(this.multitonKey,(t=>new e(t))))}registerCommand(t,e){this.controller.registerCommand(t,e)}hasCommand(t){return this.controller.hasCommand(t)}removeCommand(t){this.controller.removeCommand(t)}registerProxy(t){this.model.registerProxy(t)}removeProxy(t){return this.model.removeProxy(t)}hasProxy(t){return this.model.hasProxy(t)}retrieveProxy(t){return this.model.retrieveProxy(t)}registerMediator(t){this.view.registerMediator(t)}removeMediator(t){return this.view.removeMediator(t)}hasMediator(t){return this.view.hasMediator(t)}retrieveMediator(t){return this.view.retrieveMediator(t)}sendNotification(t,e=null,i=""){this.notifyObservers(new s(t,e,i))}notifyObservers(t){this.view.notifyObservers(t)}initializeNotifier(t){this.multitonKey=t}static hasCore(t){return this.instanceMap.has(t)}static removeCore(t){null!=r.instanceMap.get(t)&&(n.removeModel(t),e.removeView(t),i.removeController(t),this.instanceMap.delete(t))}static get MULTITON_MSG(){return"Facade instance for this Multiton key already constructed!"}}class o{constructor(){}sendNotification(t,e=null,i=""){null!=this.facade&&this.facade.sendNotification(t,e,i)}initializeNotifier(t){this.multitonKey=t}get facade(){if(null==this.multitonKey)throw new Error(o.MULTITON_MSG);return r.getInstance(this.multitonKey,(t=>new r(t)))}static get MULTITON_MSG(){return"multitonKey for this Notifier not yet initialized!"}}class a extends o{constructor(){super()}execute(t){}}class l extends a{constructor(){super(),this.subCommands=[],this.initializeMacroCommand()}initializeMacroCommand(){}addSubCommand(t){this.subCommands.push(t)}execute(t){for(;this.subCommands.length>0;){let e=this.subCommands.shift()();e.initializeNotifier(this.multitonKey),e.execute(t)}}}class h extends o{constructor(t,e=null){super(),this._mediatorName=t||h.NAME,this._viewComponent=e}onRegister(){}onRemove(){}listNotificationInterests(){return[]}handleNotification(t){}get mediatorName(){return this._mediatorName}get viewComponent(){return this._viewComponent}set viewComponent(t){this._viewComponent=t}static get NAME(){return"Mediator"}}class c extends o{constructor(t,e=null){super(),this._proxyName=t||c.NAME,this._data=e}onRegister(){}onRemove(){}get proxyName(){return this._proxyName}get data(){return this._data}set data(t){this._data=t}static get NAME(){return"Proxy"}}export{i as Controller,r as Facade,l as MacroCommand,h as Mediator,n as Model,s as Notification,o as Notifier,t as Observer,c as Proxy,a as SimpleCommand,e as View}; -//# sourceMappingURL=puremvc.min.js.map diff --git a/bin/esm/puremvc.min.js.map b/bin/esm/puremvc.min.js.map deleted file mode 100644 index 4a92559..0000000 --- a/bin/esm/puremvc.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"puremvc.min.js","sources":["../../src/patterns/observer/Observer.js","../../src/core/View.js","../../src/core/Controller.js","../../src/core/Model.js","../../src/patterns/observer/Notification.js","../../src/patterns/facade/Facade.js","../../src/patterns/observer/Notifier.js","../../src/patterns/command/SimpleCommand.js","../../src/patterns/command/MacroCommand.js","../../src/patterns/mediator/Mediator.js","../../src/patterns/proxy/Proxy.js"],"sourcesContent":["/*\n * Observer.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n * A base `Observer` implementation.\n *\n *

An `Observer` is an object that encapsulates information\n * about an interested object with a method that should\n * be called when a particular `Notification` is broadcast.

\n *\n *

In PureMVC, the `Observer` class assumes these responsibilities:

\n *\n *
    \n *
  • Encapsulate the notification (callback) method of the interested object.
  • \n *
  • Encapsulate the notification context (this) of the interested object.
  • \n *
  • Provide methods for setting the notification method and context.
  • \n *
  • Provide a method for notifying the interested object.
  • \n *
\n *\n * @class Observer\n */\nclass Observer {\n\n /**\n * Constructor.\n *\n *

The notification method on the interested object should take\n * one parameter of type `Notification`

\n *\n * @param {function(Notification):void} notifyMethod\n * @param {Object} notifyContext\n */\n constructor(notifyMethod, notifyContext) {\n this._notifyMethod = notifyMethod;\n this._notifyContext = notifyContext;\n }\n\n /**\n * Notify the interested object.\n *\n * @param {Notification} notification\n */\n notifyObserver(notification) {\n this._notifyMethod.call(this._notifyContext, notification);\n }\n\n /**\n * Compare an object to the notification context.\n *\n * @param {Object} notifyContext\n * @returns {boolean}\n */\n compareNotifyContext(notifyContext) {\n return this._notifyContext === notifyContext;\n }\n\n /**\n * Get the notification method.\n *\n * @returns {function(Notification):void}\n */\n get notifyMethod() {\n return this._notifyMethod\n }\n\n /**\n * Set the notification method.\n *\n *

The notification method should take one parameter of type `Notification`.

\n *\n * @param {function(Notification): void} notifyMethod - The function to be called when a notification is received.\n */\n set notifyMethod(notifyMethod) {\n this._notifyMethod = notifyMethod;\n }\n\n /**\n * Get the notifyContext\n *\n * @returns {Object}\n */\n get notifyContext() {\n return this._notifyContext;\n }\n\n /**\n * Set the notification context.\n *\n * @param {Object} notifyContext\n */\n set notifyContext(notifyContext) {\n this._notifyContext = notifyContext;\n }\n\n}\nexport { Observer }\n","/*\n * View.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Observer} from \"../patterns/observer/Observer.js\";\n\n/**\n * A Multiton `View` implementation.\n *\n *

In PureMVC, the `View` class assumes these responsibilities:

\n *\n *
    \n *
  • Maintain a cache of `Mediator` instances.
  • \n *
  • Provide methods for registering, retrieving, and removing `Mediators`.
  • \n *
  • Notifying `Mediators` when they are registered or removed.
  • \n *
  • Managing the observer lists for each `Notification` in the application.
  • \n *
  • Providing a method for attaching `Observers` to a `Notification`'s observer list.
  • \n *
  • Providing a method for broadcasting a `Notification`.
  • \n *
  • Notifying the `Observers` of a given `Notification` when it broadcast.
  • \n *
\n *\n * @see Mediator Mediator\n * @see Observer Observer\n * @see Notification Notification\n *\n * @class View\n */\nclass View {\n\n /**\n * Constructor.\n *\n *

This `View` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Multiton\n * Factory method `View.getInstance( multitonKey )`\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n */\n constructor(key) {\n if (View.instanceMap.get(key) != null) throw new Error(View.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n View.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.mediatorMap = new Map();\n /** @protected\n * @type {Map.>} */\n this.observerMap = new Map();\n this.initializeView();\n }\n\n /**\n *

Initialize the Multiton View instance.

\n *\n *

Called automatically by the constructor, this\n * is your opportunity to initialize the Multiton\n * instance in your subclass without overriding the\n * constructor.

\n */\n initializeView() {\n\n }\n\n /**\n * View Multiton factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):View} factory\n * @returns {View} the Multiton instance of `View`\n */\n static getInstance(key, factory) {\n if (View.instanceMap == null)\n /** @static\n * @type {Map} */\n View.instanceMap = new Map();\n if (View.instanceMap.get(key) == null) View.instanceMap.set(key, factory(key));\n return View.instanceMap.get(key);\n }\n\n /**\n *

Register an `Observer` to be notified\n * of `Notifications` with a given name.

\n *\n * @param {string} notificationName the name of the `Notifications` to notify this `Observer` of\n * @param {Observer} observer the `Observer` to register\n */\n registerObserver(notificationName, observer) {\n if (this.observerMap.get(notificationName) != null) {\n let observers = this.observerMap.get(notificationName);\n observers.push(observer);\n } else {\n this.observerMap.set(notificationName, new Array(observer));\n }\n }\n\n /**\n *

Notify the `Observers` for a particular `Notification`.

\n *\n *

All previously attached `Observers` for this `Notification`'s\n * list are notified and are passed a reference to the `Notification` in\n * the order in which they were registered.

\n *\n * @param {Notification} notification the `Notification` to notify `Observers` of.\n */\n notifyObservers(notification) {\n if (this.observerMap.has(notification.name)) {\n // Copy observers from reference array to working array,\n // since the reference array may change during the notification loop\n let observers = this.observerMap.get(notification.name).slice();\n\n // Notify Observers from the working array\n for(let i = 0; i < observers.length; i++) {\n observers[i].notifyObserver(notification);\n }\n }\n }\n\n /**\n *

Remove the observer for a given notifyContext from an observer list for a given Notification name.

\n *\n * @param {string} notificationName which observer list to remove from\n * @param {Object} notifyContext remove the observer with this object as its notifyContext\n */\n removeObserver(notificationName, notifyContext) {\n // the observer list for the notification under inspection\n let observers = this.observerMap.get(notificationName);\n\n // find the observer for the notifyContext\n for (let i = 0; i < observers.length; i++) {\n if (observers[i].compareNotifyContext(notifyContext) === true) {\n // there can only be one Observer for a given notifyContext\n // in any given Observer list, so remove it and break\n observers.splice(i, 1);\n break;\n }\n }\n\n // Also, when a Notification's Observer list length falls to\n // zero, delete the notification key from the observer map\n if (observers.length === 0) {\n this.observerMap.delete(notificationName);\n }\n }\n\n /**\n * Register a `Mediator` instance with the `View`.\n *\n *

Registers the `Mediator` so that it can be retrieved by name,\n * and further interrogates the `Mediator` for its\n * `Notification` interests.

\n *\n *

If the `Mediator` returns any `Notification`\n * names to be notified about, an `Observer` is created encapsulating\n * the `Mediator` instance's `handleNotification` method\n * and registering it as an `Observer` for all `Notifications` the\n * `Mediator` is interested in.

\n *\n * @param {Mediator} mediator a reference to the `Mediator` instance\n */\n registerMediator(mediator) {\n // do not allow re-registration (you must to removeMediator fist)\n if (this.mediatorMap.has(mediator.mediatorName) !== false) return;\n\n mediator.initializeNotifier(this.multitonKey);\n\n // Register the Mediator for retrieval by name\n this.mediatorMap.set(mediator.mediatorName, mediator);\n\n // Get Notification interests, if any.\n let interests = mediator.listNotificationInterests();\n\n // Register Mediator as an observer for each notification of interests\n if (interests.length > 0) {\n // Create Observer referencing this mediator's handleNotification method\n let observer = new Observer(mediator.handleNotification.bind(mediator), mediator); // check bind\n\n // Register Mediator as Observer for its list of Notification interests\n for (let i = 0; i < interests.length; i++) {\n this.registerObserver(interests[i], observer);\n }\n }\n\n // alert the mediator that it has been registered\n mediator.onRegister();\n }\n\n /**\n * Retrieve a `Mediator` from the `View`.\n *\n * @param {string} mediatorName the name of the `Mediator` instance to retrieve.\n * @returns {Mediator} the `Mediator` instance previously registered with the given `mediatorName`.\n */\n retrieveMediator(mediatorName) {\n return this.mediatorMap.get(mediatorName) || null;\n }\n\n /**\n * Remove a `Mediator` from the `View`.\n *\n * @param {string} mediatorName name of the `Mediator` instance to be removed.\n * @returns {Mediator} the `Mediator` that was removed from the `View`\n */\n removeMediator(mediatorName) {\n // Retrieve the named mediator\n let mediator = this.mediatorMap.get(mediatorName);\n\n if (mediator) {\n // for every notification this mediator is interested in...\n let interests = mediator.listNotificationInterests();\n for (let i = 0; i < interests.length; i++) {\n // remove the observer linking the mediator\n // to the notification interest\n this.removeObserver(interests[i], mediator);\n }\n\n // remove the mediator from the map\n this.mediatorMap.delete(mediatorName);\n\n // alert the mediator that it has been removed\n mediator.onRemove();\n }\n\n return mediator;\n }\n\n /**\n * Check if a Mediator is registered or not\n *\n * @param {string} mediatorName\n * @returns {boolean} whether a Mediator is registered with the given `mediatorName`.\n */\n hasMediator(mediatorName) {\n return this.mediatorMap.has(mediatorName);\n }\n\n /**\n * Remove a View instance\n *\n * @static\n * @param key multitonKey of View instance to remove\n */\n static removeView(key) {\n this.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"View instance for this Multiton key already constructed!\" };\n\n}\nexport { View }\n","/*\n * Controller.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {View} from \"./View.js\"\nimport {Observer} from \"../patterns/observer/Observer.js\";\n\n/**\n * A Multiton `Controller` implementation.\n *\n *

In PureMVC, the `Controller` class follows the\n * 'Command and Controller' strategy, and assumes these\n * responsibilities:

\n *\n *
    \n *
  • Remembering which `Command`s\n * are intended to handle which `Notifications`.
  • \n *
  • Registering itself as an `Observer` with\n * the `View` for each `Notification`\n * that it has a `Command` mapping for.
  • \n *
  • Creating a new instance of the proper `Command`\n * to handle a given `Notification` when notified by the `View`.
  • \n *
  • Calling the `Command`'s `execute`\n * method, passing in the `Notification`.
  • \n *
\n *\n *

Your application must register `Commands` with the\n * Controller.

\n *\n *

The simplest way is to subclass `Facade`,\n * and use its `initializeController` method to add your\n * registrations.

\n *\n * @see View View\n * @see Observer Observer\n * @see Notification Notification\n * @see SimpleCommand SimpleCommand\n * @see MacroCommand MacroCommand\n *\n * @class Controller\n */\nclass Controller {\n\n /**\n * Constructor.\n *\n *

This `Controller` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Factory method,\n * passing the unique key for this instance\n * `Controller.getInstance( multitonKey )`

\n *\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n *\n * @constructor\n * @param {string} key\n */\n constructor(key) {\n if (Controller.instanceMap[key] != null) throw new Error(Controller.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n Controller.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.commandMap = new Map();\n this.initializeController();\n }\n\n /**\n * Initialize the Multiton `Controller` instance.\n *\n *

Called automatically by the constructor.

\n *\n *

Note that if you are using a subclass of `View`\n * in your application, you should also subclass `Controller`\n * and override the `initializeController` method in the\n * following way:

\n *\n *
`\n     *\t\t// ensure that the Controller is talking to my View implementation\n     *\t\tinitializeController( )\n     *\t\t{\n     *\t\t\tthis.view = MyView.getInstance(this.multitonKey, (key) => new MyView(key));\n     *\t\t}\n     * `
\n *\n */\n initializeController() {\n /** @protected\n * @type {View} **/\n this.view = View.getInstance(this.multitonKey, (key) => new View(key));\n }\n\n /**\n * `Controller` Multiton Factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):Controller} factory\n * @returns {Controller} the Multiton instance of `Controller`\n */\n static getInstance(key, factory) {\n if (Controller.instanceMap == null)\n /** @static\n @type {Map} */\n Controller.instanceMap = new Map();\n if (Controller.instanceMap.get(key) == null) Controller.instanceMap.set(key, factory(key));\n return Controller.instanceMap.get(key);\n }\n\n /**\n *

If a `Command` has previously been registered\n * to handle the given `Notification`, then it is executed.

\n *\n * @param {Notification} notification a `Notification`\n */\n executeCommand(notification) {\n let factory = this.commandMap.get(notification.name);\n if (factory == null) return;\n\n let commandInstance = factory();\n commandInstance.initializeNotifier(this.multitonKey);\n commandInstance.execute(notification);\n }\n\n /**\n *

Register a particular `Command` class as the handler\n * for a particular `Notification`.

\n *\n *

If an `Command` has already been registered to\n * handle `Notification`s with this name, it is no longer\n * used, the new `Command` is used instead.

\n *\n *

The Observer for the new Command is only created if this the\n * first time a Command has been registered for this Notification name.

\n *\n * @param notificationName the name of the `Notification`\n * @param {function():SimpleCommand} factory\n */\n registerCommand(notificationName, factory) {\n if (this.commandMap.get(notificationName) == null) {\n this.view.registerObserver(notificationName, new Observer(this.executeCommand, this));\n }\n this.commandMap.set(notificationName, factory);\n }\n\n /**\n * Check if a Command is registered for a given Notification\n *\n * @param {string} notificationName\n * @return {boolean} whether a Command is currently registered for the given `notificationName`.\n */\n hasCommand(notificationName) {\n return this.commandMap.has(notificationName);\n }\n\n /**\n * Remove a previously registered `Command` to `Notification` mapping.\n *\n * @param {string} notificationName the name of the `Notification` to remove the `Command` mapping for\n */\n removeCommand(notificationName) {\n // if the Command is registered...\n if(this.hasCommand(notificationName)) {\n // remove the observer\n this.view.removeObserver(notificationName, this);\n\n // remove the command\n this.commandMap.delete(notificationName)\n }\n }\n\n /**\n * Remove a Controller instance\n *\n * @static\n * @param {string} key of Controller instance to remove\n */\n static removeController(key) {\n Controller.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"Controller instance for this Multiton key already constructed!\" };\n}\nexport { Controller }\n","/*\n * Model.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n * A Multiton `Model` implementation.\n *\n *

In PureMVC, the `Model` class provides\n * access to model objects (Proxies) by named lookup.\n *\n *

The `Model` assumes these responsibilities:

\n *\n *
    \n *
  • Maintain a cache of `Proxy` instances.
  • \n *
  • Provide methods for registering, retrieving, and removing\n * `Proxy` instances.
  • \n *
\n *\n *

Your application must register `Proxy` instances\n * with the `Model`. Typically, you use an\n * `Command` to create and register `Proxy`\n * instances once the `Facade` has initialized the Core\n * actors.

\n *\n * @see Proxy Proxy\n *\n * @class Model\n */\n\nclass Model {\n\n /**\n * Constructor.\n *\n *

This `Model` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Multiton\n * Factory method `Model.getInstance( multitonKey )`\n *\n * @constructor\n * @param {string} key\n *\n * @throws {Error} Error if instance for this Multiton key instance has already been constructed\n */\n constructor(key) {\n if (Model.instanceMap.get(key) != null) throw new Error(Model.MULTITON_MSG);\n /** @protected\n * @type {string} */\n this.multitonKey = key;\n Model.instanceMap.set(this.multitonKey, this);\n /** @protected\n * @type {Map} */\n this.proxyMap = new Map();\n this.initializeModel();\n }\n\n /**\n * Initialize the `Model` instance.\n *\n *

Called automatically by the constructor, this\n * is your opportunity to initialize the Multiton\n * instance in your subclass without overriding the\n * constructor.

\n *\n */\n initializeModel() {\n\n }\n\n /**\n * `Model` Multiton Factory method.\n *\n * @static\n * @param {string} key\n * @param {function(string):Model} factory\n * @returns {Model} the instance for this Multiton key\n */\n static getInstance(key, factory) {\n if (Model.instanceMap == null)\n /** @static\n @type {Map} */\n Model.instanceMap = new Map();\n if (Model.instanceMap.get(key) == null) Model.instanceMap.set(key, factory(key));\n return Model.instanceMap.get(key);\n }\n\n /**\n * Register a `Proxy` with the `Model`.\n *\n * @param {Proxy} proxy a `Proxy` to be held by the `Model`.\n */\n registerProxy(proxy) {\n proxy.initializeNotifier(this.multitonKey);\n this.proxyMap.set(proxy.proxyName, proxy);\n proxy.onRegister();\n }\n\n /**\n * Retrieve a `Proxy` from the `Model`.\n *\n * @param {string} proxyName\n * @returns {Proxy} the `Proxy` instance previously registered with the given `proxyName`.\n */\n retrieveProxy(proxyName) {\n return this.proxyMap.get(proxyName) || null;\n }\n\n /**\n * Check if a Proxy is registered\n *\n * @param {string} proxyName\n * @returns {boolean} whether a Proxy is currently registered with the given `proxyName`.\n */\n hasProxy(proxyName) {\n return this.proxyMap.has(proxyName);\n }\n\n /**\n * Remove a `Proxy` from the `Model`.\n *\n * @param {string} proxyName name of the `Proxy` instance to be removed.\n * @returns {Proxy} the `Proxy` that was removed from the `Model`\n */\n removeProxy(proxyName) {\n let proxy = this.proxyMap.get(proxyName);\n if (proxy != null) {\n this.proxyMap.delete(proxyName);\n proxy.onRemove();\n }\n return proxy;\n }\n\n /**\n * Remove a Model instance\n *\n * @static\n * @param key\n */\n static removeModel(key) {\n Model.instanceMap.delete(key);\n }\n\n /**\n * @static\n * @type {string}\n */\n static get MULTITON_MSG() { return \"Model instance for this Multiton key already constructed!\" };\n}\nexport { Model }","/*\n * Notification.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\n/**\n *\n * A base `Notification` implementation.\n *\n *

PureMVC does not rely upon underlying event models such\n * as the one provided with Flash, and ActionScript 3 does\n * not have an inherent event model.

\n *\n *

The Observer Pattern as implemented within PureMVC exists\n * to support event-driven communication between the\n * application and the actors of the MVC triad.

\n *\n *

Notifications are not meant to be a replacement for Events\n * in Flex/Flash/Apollo. Generally, `Mediator` implementors\n * place event listeners on their view components, which they\n * then handle in the usual way. This may lead to the broadcast of `Notification`s to\n * trigger `Command`s or to communicate with other `Mediators`. `Proxy` and `Command`\n * instances communicate with each other and `Mediator`s\n * by broadcasting `Notification`s.

\n *\n *

A key difference between Flash `Event`s and PureMVC\n * `Notification`s is that `Event`s follow the\n * 'Chain of Responsibility' pattern, 'bubbling' up the display hierarchy\n * until some parent component handles the `Event`, while\n * PureMVC `Notification`s follow a 'Publish/Subscribe'\n * pattern. PureMVC classes need not be related to each other in a\n * parent/child relationship in order to communicate with one another\n * using `Notification`s.

\n *\n * @class Notification\n */\nclass Notification {\n\n /**\n * Constructor.\n *\n * @constructor\n * @param {string} name - The name of the notification.\n * @param {Object|null} [body=null] - The body of the notification, defaults to `null`.\n * @param {string} [type=\"\"] - The type of the notification, defaults to an empty string.\n */\n constructor(name, body = null, type = \"\") {\n this._name = name;\n this._body = body;\n this._type = type;\n }\n\n /**\n * Get the name of the `Notification` instance.\n *\n * @returns {string}\n */\n get name() {\n return this._name;\n }\n\n /**\n * Get the body of the `Notification` instance.\n *\n * @returns {Object}\n */\n get body() {\n return this._body;\n }\n\n /**\n * Set the body of the `Notification` instance.\n *\n * @param {Object|null} body\n */\n set body(body) {\n this._body = body;\n }\n\n /**\n * Get the type of the `Notification` instance.\n *\n * @returns {string}\n */\n get type() {\n return this._type;\n }\n\n /**\n * Set the type of the `Notification` instance.\n *\n * @param {string} type\n */\n set type(type) {\n this._type = type;\n }\n\n /**\n * Get the string representation of the `Notification` instance.\n *\n * @returns {string}\n */\n toString() {\n let str= \"Notification Name: \" + this.name;\n str+= \"\\nBody:\" + ((this.body == null ) ? \"null\" : this.body.toString());\n str+= \"\\nType:\" + ((this.type == null ) ? \"null\" : this.type);\n return str;\n }\n\n}\nexport { Notification }\n","/*\n * Facade.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Controller} from \"../../core/Controller.js\";\nimport {Model} from \"../../core/Model.js\";\nimport {View} from \"../../core/View.js\";\nimport {Notification} from \"../observer/Notification.js\";\n\n/**\n * A base Multiton `Facade` implementation.\n *\n * @see Model Model\n * @see View View\n * @see Controller Controller\n *\n * @class Facade\n */\nclass Facade {\n\n /**\n * Constructor.\n *\n *

This `Facade` implementation is a Multiton,\n * so you should not call the constructor\n * directly, but instead call the static Factory method,\n * passing the unique key for this instance\n * `Facade.getInstance( multitonKey )`

\n *\n * @constructor\n * @param {string} key\n * @throws {Error} Error if instance for this Multiton key has already been constructed\n */\n constructor(key) {\n if (Facade.instanceMap[key] != null) throw new Error(Facade.MULTITON_MSG);\n this.initializeNotifier(key);\n Facade.instanceMap.set(this.multitonKey, this);\n this.initializeFacade();\n }\n\n /**\n * Initialize the Multiton `Facade` instance.\n *\n *

Called automatically by the constructor. Override in your\n * subclass to do any subclass specific initializations. Be\n * sure to call `super.initializeFacade()`, though.

\n */\n initializeFacade() {\n this.initializeModel();\n this.initializeController();\n this.initializeView();\n }\n\n /**\n * Facade Multiton Factory method\n *\n * @static\n * @param {string} key\n * @param {function(string):Facade} factory\n * @returns {Facade} the Multiton instance of the Facade\n */\n static getInstance(key, factory) {\n if (Facade.instanceMap == null)\n /** @static\n * @type {Map} */\n Facade.instanceMap = new Map();\n if (Facade.instanceMap.get(key) == null) Facade.instanceMap.set(key, factory(key));\n return Facade.instanceMap.get(key);\n }\n\n /**\n * Initialize the `Model`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `Model`.
  • \n *
  • You have `Proxy`s to register with the Model that do not\n * retrieve a reference to the Facade at construction time.`
  • \n *
\n *\n * If you don't want to initialize a different `Model`,\n * call `super.initializeModel()` at the beginning of your\n * method, then register `Proxy`s.\n *\n *

Note: This method is rarely overridden; in practice you are more\n * likely to use a `Command` to create and register `Proxy`s\n * with the `Model`, since `Proxy`s with mutable data will likely\n * need to send `Notification`s and thus will likely want to fetch a reference to\n * the `Facade` during their construction.

\n */\n initializeModel() {\n if (this.model != null) return;\n this.model = Model.getInstance(this.multitonKey, key => new Model(key));\n }\n\n /**\n * Initialize the `Controller`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `Controller`.
  • \n *
  • You have `Commands` to register with the `Controller` at startup.`.
  • \n *
\n *\n *

If you don't want to initialize a different `Controller`,\n * call `super.initializeController()` at the beginning of your\n * method, then register `Command`s.

\n */\n initializeController() {\n if (this.controller != null) return;\n this.controller = Controller.getInstance(this.multitonKey, key => new Controller(key));\n }\n\n /**\n * Initialize the `View`.\n *\n *

Called by the `initializeFacade` method.\n * Override this method in your subclass of `Facade`\n * if one or both of the following are true:

\n *\n *
    \n *
  • You wish to initialize a different `View`.
  • \n *
  • You have `Observers` to register with the `View`
  • \n *
\n *\n *

If you don't want to initialize a different `View`,\n * call `super.initializeView()` at the beginning of your\n * method, then register `Mediator` instances.

\n *\n *

Note: This method is rarely overridden; in practice you are more\n * likely to use a `Command` to create and register `Mediator`s\n * with the `View`, since `Mediator` instances will need to send\n * `Notification`s and thus will likely want to fetch a reference\n * to the `Facade` during their construction.

\n */\n initializeView() {\n if (this.view != null) return;\n this.view = View.getInstance(this.multitonKey, key => new View(key));\n }\n\n /**\n * Register a `Command` with the `Controller` by Notification name.\n *\n * @param {string} notificationName the name of the `Notification` to associate the `Command` with\n * @param {function():SimpleCommand} factory a reference to the factory of the `Command`\n */\n registerCommand(notificationName, factory) {\n this.controller.registerCommand(notificationName, factory);\n }\n\n /**\n * Check if a Command is registered for a given Notification\n *\n * @param {string} notificationName\n * @returns {boolean} whether a Command is currently registered for the given `notificationName`.\n */\n hasCommand(notificationName) {\n return this.controller.hasCommand(notificationName);\n }\n\n /**\n * Remove a previously registered `Command` to `Notification` mapping from the Controller.\n *\n * @param {string} notificationName the name of the `Notification` to remove the `Command` mapping for\n */\n removeCommand(notificationName) {\n this.controller.removeCommand(notificationName);\n }\n\n /**\n * Register a `Proxy` with the `Model` by name.\n *\n * @param {Proxy} proxy the `Proxy` instance to be registered with the `Model`.\n */\n registerProxy(proxy) {\n this.model.registerProxy(proxy);\n }\n\n /**\n * Remove a `Proxy` from the `Model` by name.\n *\n * @param {string} proxyName the `Proxy` to remove from the `Model`.\n * @returns {Proxy} the `Proxy` that was removed from the `Model`\n */\n removeProxy(proxyName) {\n return this.model.removeProxy(proxyName);\n }\n\n /**\n * Check if a Proxy is registered\n *\n * @param {string} proxyName\n * @returns {boolean} whether a Proxy is currently registered with the given `proxyName`.\n */\n hasProxy(proxyName) {\n return this.model.hasProxy(proxyName);\n }\n\n /**\n * Retrieve a `Proxy` from the `Model` by name.\n *\n * @param {string} proxyName the name of the proxy to be retrieved.\n * @returns {Proxy} the `Proxy` instance previously registered with the given `proxyName`.\n */\n retrieveProxy(proxyName) {\n return this.model.retrieveProxy(proxyName);\n }\n\n /**\n * Register a `Mediator` with the `View`.\n *\n * @param {Mediator} mediator a reference to the `Mediator`\n */\n registerMediator(mediator) {\n this.view.registerMediator(mediator);\n }\n\n /**\n * Remove a `Mediator` from the `View`.\n *\n * @param {string} mediatorName name of the `Mediator` to be removed.\n * @returns {Mediator} the `Mediator` that was removed from the `View`\n */\n removeMediator(mediatorName) {\n return this.view.removeMediator(mediatorName);\n }\n\n /**\n * Check if a Mediator is registered or not\n *\n * @param {string} mediatorName\n * @returns {boolean} whether a Mediator is registered with the given `mediatorName`.\n */\n hasMediator(mediatorName) {\n return this.view.hasMediator(mediatorName);\n }\n\n /**\n * Retrieve a `Mediator` from the `View`.\n *\n * @param {string} mediatorName\n * @returns {Mediator} the `Mediator` previously registered with the given `mediatorName`.\n */\n retrieveMediator(mediatorName) {\n return this.view.retrieveMediator(mediatorName);\n }\n\n /**\n * Create and send an `Notification`.\n *\n *

Keeps us from having to construct new notification\n * instances in our implementation code.

\n *\n * @param {string} notificationName the name of the notification to send\n * @param {Object} [body] body the body of the notification (optional)\n * @param {string} [type] type the type of the notification (optional)\n */\n sendNotification(notificationName, body = null, type = \"\") {\n this.notifyObservers(new Notification(notificationName, body, type));\n }\n\n /**\n * Notify `Observer`s.\n *\n *

This method is left public mostly for backward\n * compatibility, and to allow you to send custom\n * notification classes using the facade.

\n *\n *

Usually you should just call sendNotification\n * and pass the parameters, never having to\n * construct the notification yourself.

\n *\n * @param {Notification} notification the `Notification` to have the `View` notify `Observers` of.\n */\n notifyObservers(notification) {\n this.view.notifyObservers(notification);\n }\n\n /**\n * Set the Multiton key for this facade instance.\n *\n *

Not called directly, but instead from the\n * constructor when getInstance is invoked.\n * It is necessary to be public in order to\n * implement Notifier.

\n */\n initializeNotifier(key) {\n this.multitonKey = key;\n }\n\n /**\n * Check if a Core is registered or not\n *\n * @static\n * @param {string} key the multiton key for the Core in question\n * @returns {boolean} whether a Core is registered with the given `key`.\n */\n static hasCore(key) {\n return this.instanceMap.has(key);\n }\n\n /**\n * Remove a Core.\n *\n *

Remove the Model, View, Controller and Facade\n * instances for the given key.

\n *\n * @static\n * @param {string} key multitonKey of the Core to remove\n */\n static removeCore(key) {\n if (Facade.instanceMap.get(key) == null) return;\n Model.removeModel(key);\n View.removeView(key);\n Controller.removeController(key);\n this.instanceMap.delete(key);\n }\n\n /**\n * Message Constants\n *\n * @static\n * @returns {string}\n */\n static get MULTITON_MSG() {return \"Facade instance for this Multiton key already constructed!\"};\n}\nexport { Facade }\n","/*\n * Notifier.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Facade} from \"../facade/Facade.js\";\n\n/**\n * A Base `Notifier` implementation.\n *\n *

`MacroCommand, Command, Mediator` and `Proxy`\n * all have a need to send `Notifications`.

\n *\n *

The `Notifier` interface provides a common method called\n * `sendNotification` that relieves implementation code of\n * the necessity to actually construct `Notifications`.

\n *\n *

The `Notifier` class, which all the above-mentioned classes\n * extend, provides an initialized reference to the `Facade`\n * Multiton, which is required for the convenience method\n * for sending `Notifications`, but also eases implementation as these\n * classes have frequent `Facade` interactions and usually require\n * access to the facade anyway.

\n *\n *

NOTE: In the MultiCore version of the framework, there is one caveat to\n * notifiers, they cannot send notifications or reach the facade until they\n * have a valid multitonKey.

\n *\n * The multitonKey is set:\n * * on a Command when it is executed by the Controller\n * * on a Mediator is registered with the View\n * * on a Proxy is registered with the Model.\n *\n * @see Proxy Proxy\n * @see Facade Facade\n * @see Mediator Mediator\n * @see MacroCommand MacroCommand\n * @see SimpleCommand SimpleCommand\n *\n * @class Notifier\n */\nclass Notifier {\n\n constructor() {}\n\n /**\n * Create and send an `Notification`.\n *\n *

Keeps us from having to construct new Notification\n * instances in our implementation code.

\n *\n * @param {string} notificationName\n * @param {Object} [body] body\n * @param {string} [type] type\n */\n sendNotification (notificationName, body = null, type = \"\") {\n if (this.facade != null) {\n this.facade.sendNotification(notificationName, body, type);\n }\n }\n\n /**\n * Initialize this Notifier instance.\n *\n *

This is how a Notifier gets its multitonKey.\n * Calls to sendNotification or to access the\n * facade will fail until after this method\n * has been called.

\n *\n *

Mediators, Commands or Proxies may override\n * this method in order to send notifications\n * or access the Multiton Facade instance as\n * soon as possible. They CANNOT access the facade\n * in their constructors, since this method will not\n * yet have been called.

\n *\n * @param {string} key the multitonKey for this Notifier to use\n */\n initializeNotifier(key) {\n this.multitonKey = key;\n }\n\n /**\n * Return the Multiton Facade instance\n *\n * @typedef {Facade} Facade\n *\n * @throws {Error}\n */\n get facade() {\n if (this.multitonKey == null) throw new Error(Notifier.MULTITON_MSG);\n return Facade.getInstance(this.multitonKey, key => new Facade(key));\n }\n\n /**\n * Message Constants\n *\n * @static\n * @returns {string}\n */\n static get MULTITON_MSG() { return \"multitonKey for this Notifier not yet initialized!\" }\n}\nexport { Notifier }\n","/*\n * SimpleCommand.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Command` implementation.\n *\n *

Your subclass should override the `execute`\n * method where your business logic will handle the `Notification`.

\n *\n * @see Controller Controller\n * @see Notification Notification\n * @see MacroCommand MacroCommand\n *\n * @class SimpleCommand\n */\nclass SimpleCommand extends Notifier {\n\n constructor() {\n super();\n }\n\n /**\n * Fulfill the use-case initiated by the given `Notification`.\n *\n *

In the Command Pattern, an application use-case typically\n * begins with some user action, which results in a `Notification` being broadcast, which\n * is handled by business logic in the `execute` method of an\n * `Command`.

\n *\n * @param {Notification} notification\n */\n execute(notification) {\n\n }\n\n}\nexport { SimpleCommand }\n","/*\n * MacroCommand.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {SimpleCommand} from \"./SimpleCommand.js\";\n\n/**\n * A base `Command` implementation that executes other `Command`s.\n *\n *

A `MacroCommand` maintains a list of\n * `Command` Class references called SubCommands.

\n *\n *

When `execute` is called, the `MacroCommand`\n * instantiates and calls `execute` on each of its SubCommands turn.\n * Each SubCommand will be passed a reference to the original\n * `Notification` that was passed to the `MacroCommand`'s\n * `execute` method.

\n *\n *

Unlike `SimpleCommand`, your subclass\n * should not override `execute`, but instead, should\n * override the `initializeMacroCommand` method,\n * calling `addSubCommand` once for each SubCommand\n * to be executed.

\n *\n * @see Controller Controller\n * @see Notification Notification\n * @see SimpleCommand SimpleCommand\n *\n * @class MacroCommand\n */\nclass MacroCommand extends SimpleCommand {\n\n /**\n * Constructor.\n *\n *

You should not need to define a constructor,\n * instead, override the `initializeMacroCommand`\n * method.

\n *\n *

If your subclass does define a constructor, be\n * sure to call `super()`.

\n *\n * @constructor\n */\n constructor() {\n super();\n /** @protected\n * @type {Array.} */\n this.subCommands = [];\n this.initializeMacroCommand();\n }\n\n /**\n * Initialize the `MacroCommand`.\n *\n *

In your subclass, override this method to\n * initialize the `MacroCommand`'s SubCommand\n * list with `Command` class references like\n * this:

\n *\n *
`\n     *\t\t// Initialize MyMacroCommand\n     *\t\tinitializeMacroCommand() {\n     *\t\t\tthis.addSubCommand(() => new app.FirstCommand());\n     *\t\t\tthis.addSubCommand(() => new app.SecondCommand());\n     *\t\t\tthis.addSubCommand(() => new app.ThirdCommand());\n     *\t\t}\n     * `
\n *\n *

Note that SubCommands may be any `Command` implementor,\n * `MacroCommand`s or `SimpleCommands` are both acceptable.\n */\n initializeMacroCommand() {\n\n }\n\n /**\n * Add a SubCommand.\n *\n *

The SubCommands will be called in First In/First Out (FIFO)\n * order.

\n *\n * @param {function():SimpleCommand} factory\n */\n addSubCommand(factory) {\n this.subCommands.push(factory);\n }\n\n /**\n * Execute this `MacroCommand`'s SubCommands.\n *\n *

The SubCommands will be called in First In/First Out (FIFO)\n * order.

\n *\n * @param {Notification} notification\n */\n execute(notification) {\n while(this.subCommands.length > 0) {\n let factory = this.subCommands.shift();\n let commandInstance = factory();\n commandInstance.initializeNotifier(this.multitonKey);\n commandInstance.execute(notification);\n }\n }\n\n}\nexport { MacroCommand }\n","/*\n * Mediator.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Mediator` implementation.\n *\n * @see View View\n *\n * @class Mediator\n */\nclass Mediator extends Notifier {\n\n /**\n * Constructor.\n *\n * @constructor\n * @param {string} mediatorName\n * @param {Object} [viewComponent] viewComponent\n */\n constructor(mediatorName, viewComponent = null) {\n super();\n this._mediatorName = mediatorName || Mediator.NAME;\n this._viewComponent = viewComponent;\n }\n\n /**\n * Called by the View when the Mediator is registered\n */\n onRegister() {\n\n }\n\n /**\n * Called by the View when the Mediator is removed\n */\n onRemove() {\n\n }\n\n /**\n * List the `Notification` names this\n * `Mediator` is interested in being notified of.\n *\n * @returns {string[]}\n */\n listNotificationInterests() {\n return [];\n }\n\n /**\n * Handle `Notification`s.\n *\n *

\n * Typically this will be handled in a switch statement,\n * with one 'case' entry per `Notification`\n * the `Mediator` is interested in.\n *\n * @param {Notification} notification\n */\n handleNotification(notification) {\n\n }\n\n /**\n * the mediator name\n *\n * @returns {string}\n */\n get mediatorName() {\n return this._mediatorName;\n }\n\n /**\n * Get the `Mediator`'s view component.\n *\n *

\n * Additionally, an implicit getter will usually\n * be defined in the subclass that casts the view\n * object to a type, like this:

\n *\n * @returns {Object}\n */\n get viewComponent() {\n return this._viewComponent;\n }\n\n /**\n * Set the `Mediator`'s view component.\n *\n * @param {Object} viewComponent\n */\n set viewComponent(viewComponent) {\n this._viewComponent = viewComponent;\n }\n\n /**\n * The name of the `Mediator`.\n *\n *

Typically, a `Mediator` will be written to serve\n * one specific control or group controls and so,\n * will not have a need to be dynamically named.

\n *\n * @static\n * @returns {string}\n */\n static get NAME() { return \"Mediator\" }\n}\nexport { Mediator }\n","/*\n * Proxy.js\n * PureMVC JavaScript Multicore\n *\n * Copyright(c) 2023 Saad Shams \n * Your reuse is governed by the BSD License\n*/\n\nimport {Notifier} from \"../observer/Notifier.js\";\n\n/**\n * A base `Proxy` implementation.\n *\n *

In PureMVC, `Proxy` classes are used to manage parts of the\n * application's data model.

\n *\n *

A `Proxy` might simply manage a reference to a local data object,\n * in which case interacting with it might involve setting and\n * getting of its data in synchronous fashion.

\n *\n *

`Proxy` classes are also used to encapsulate the application's\n * interaction with remote services to save or retrieve data, in which case,\n * we adopt an asynchronous idiom; setting data (or calling a method) on the\n * `Proxy` and listening for a `Notification` to be sent\n * when the `Proxy` has retrieved the data from the service.

\n *\n * @see Model Model\n *\n * @class Proxy\n */\nclass Proxy extends Notifier {\n /**\n * Constructor\n *\n * @constructor\n * @param {string} proxyName\n * @param {Object} [data]\n */\n constructor(proxyName, data = null) {\n super();\n /** @protected\n * @type {string} */\n this._proxyName = proxyName || Proxy.NAME;\n /** @protected\n * @type {Object} */\n this._data = data;\n }\n\n /**\n * Called by the Model when the Proxy is registered\n */\n onRegister() {}\n\n /**\n * Called by the Model when the Proxy is removed\n */\n onRemove() {}\n\n /**\n * Get the proxy name\n *\n * @returns {string}\n */\n get proxyName() {\n return this._proxyName;\n }\n\n /**\n * Get the data object\n *\n * @returns {Object}\n */\n get data () {\n return this._data;\n }\n\n /**\n * Set the data object\n *\n * @param {Object} data\n */\n set data(data) {\n this._data = data;\n }\n\n /**\n *\n * @static\n * @returns {string}\n */\n static get NAME() { return \"Proxy\" }\n}\nexport { Proxy }\n"],"names":["Observer","constructor","notifyMethod","notifyContext","this","_notifyMethod","_notifyContext","notifyObserver","notification","call","compareNotifyContext","View","key","instanceMap","get","Error","MULTITON_MSG","multitonKey","set","mediatorMap","Map","observerMap","initializeView","getInstance","factory","registerObserver","notificationName","observer","push","Array","notifyObservers","has","name","observers","slice","i","length","removeObserver","splice","delete","registerMediator","mediator","mediatorName","initializeNotifier","interests","listNotificationInterests","handleNotification","bind","onRegister","retrieveMediator","removeMediator","onRemove","hasMediator","removeView","Controller","commandMap","initializeController","view","executeCommand","commandInstance","execute","registerCommand","hasCommand","removeCommand","removeController","Model","proxyMap","initializeModel","registerProxy","proxy","proxyName","retrieveProxy","hasProxy","removeProxy","removeModel","Notification","body","type","_name","_body","_type","toString","str","Facade","initializeFacade","model","controller","sendNotification","hasCore","removeCore","Notifier","facade","SimpleCommand","super","MacroCommand","subCommands","initializeMacroCommand","addSubCommand","shift","Mediator","viewComponent","_mediatorName","NAME","_viewComponent","Proxy","data","_proxyName","_data"],"mappings":"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"} \ No newline at end of file diff --git a/build/rollup.conf.mjs b/build/rollup.conf.mjs index 653bf5b..eb8d7dd 100644 --- a/build/rollup.conf.mjs +++ b/build/rollup.conf.mjs @@ -5,23 +5,23 @@ export default [ input: "src/index.js", output: [ { - file: "bin/esm/puremvc.js", + file: "bin/esm/index.js", format: "esm", sourcemap: false }, { - file: "bin/esm/puremvc.min.js", + file: "bin/esm/index.min.js", format: "esm", plugins: [terser()], sourcemap: true }, { - file: "bin/cjs/puremvc.cjs", + file: "bin/cjs/index.cjs", format: "cjs", sourcemap: false }, { - file: "bin/cjs/puremvc.min.cjs", + file: "bin/cjs/index.min.cjs", format: "cjs", plugins: [terser()], sourcemap: true diff --git a/package-lock.json b/package-lock.json index dad0d8f..6f1cfcc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,672 +1,36 @@ { "name": "@puremvc/puremvc-js-multicore-framework", - "version": "2.0.3", + "version": "2.0.7", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@puremvc/puremvc-js-multicore-framework", - "version": "2.0.3", + "version": "2.0.7", "license": "BSD-3-Clause", "bin": { - "puremvc-js-multicore-framework": "bin/puremvc.js" + "puremvc-js-multicore-framework": "bin/esm/puremvc.js" }, "devDependencies": { "@rollup/plugin-terser": "^0.4.4", - "abab": "^2.0.6", - "acorn": "^8.11.2", - "acorn-babel": "^0.11.1-38", - "acorn-globals": "^7.0.1", - "acorn-walk": "^8.3.1", - "agent-base": "^7.1.0", - "ajv": "^6.12.6", - "ajv-errors": "^1.0.1", - "ajv-keywords": "^3.5.2", - "amdefine": "^1.0.1", - "ansi-align": "^3.0.1", - "ansi-colors": "^4.1.1", - "ansi-regex": "^2.1.1", - "ansi-styles": "^2.2.1", - "ansi-to-html": "^0.7.2", - "anymatch": "^3.1.3", - "aproba": "^1.2.0", - "archiver": "^5.3.2", - "archiver-utils": "^2.1.0", - "argparse": "^1.0.10", - "aria-query": "^5.1.3", - "arr-diff": "^4.0.0", - "arr-flatten": "^1.1.0", - "arr-union": "^3.1.0", - "array-buffer-byte-length": "^1.0.0", - "array-unique": "^0.3.2", - "asn1.js": "^5.4.1", - "assert": "^1.5.1", - "assertion-error": "^1.1.0", - "assign-symbols": "^1.0.0", - "ast-types": "^0.7.8", - "async": "^3.2.5", - "async-each": "^1.0.6", - "asynckit": "^0.4.0", - "atob": "^2.1.2", - "available-typed-arrays": "^1.0.5", - "axe-core": "^4.8.2", - "axios": "^1.6.2", - "b4a": "^1.6.4", - "babel-code-frame": "^6.26.0", "babel-core": "^4.7.16", - "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", - "babel-helper-call-delegate": "^6.24.1", - "babel-helper-define-map": "^6.26.0", - "babel-helper-explode-assignable-expression": "^6.24.1", - "babel-helper-function-name": "^6.24.1", - "babel-helper-get-function-arity": "^6.24.1", - "babel-helper-hoist-variables": "^6.24.1", - "babel-helper-optimise-call-expression": "^6.24.1", - "babel-helper-regex": "^6.26.0", - "babel-helper-remap-async-to-generator": "^6.24.1", - "babel-helper-replace-supers": "^6.24.1", - "babel-messages": "^6.23.0", "babel-plugin-add-module-exports": "^1.0.4", - "babel-plugin-check-es2015-constants": "^6.22.0", - "babel-plugin-syntax-async-functions": "^6.13.0", - "babel-plugin-syntax-exponentiation-operator": "^6.13.0", - "babel-plugin-syntax-trailing-function-commas": "^6.22.0", - "babel-plugin-transform-async-to-generator": "^6.24.1", - "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", - "babel-plugin-transform-es2015-block-scoping": "^6.26.0", - "babel-plugin-transform-es2015-classes": "^6.24.1", - "babel-plugin-transform-es2015-computed-properties": "^6.24.1", - "babel-plugin-transform-es2015-destructuring": "^6.23.0", - "babel-plugin-transform-es2015-duplicate-keys": "^6.24.1", - "babel-plugin-transform-es2015-for-of": "^6.23.0", - "babel-plugin-transform-es2015-function-name": "^6.24.1", - "babel-plugin-transform-es2015-literals": "^6.22.0", - "babel-plugin-transform-es2015-modules-amd": "^6.24.1", - "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", - "babel-plugin-transform-es2015-modules-systemjs": "^6.24.1", - "babel-plugin-transform-es2015-modules-umd": "^6.24.1", - "babel-plugin-transform-es2015-object-super": "^6.24.1", - "babel-plugin-transform-es2015-parameters": "^6.24.1", - "babel-plugin-transform-es2015-shorthand-properties": "^6.24.1", - "babel-plugin-transform-es2015-spread": "^6.22.0", - "babel-plugin-transform-es2015-sticky-regex": "^6.24.1", - "babel-plugin-transform-es2015-template-literals": "^6.22.0", - "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", - "babel-plugin-transform-es2015-unicode-regex": "^6.24.1", - "babel-plugin-transform-exponentiation-operator": "^6.24.1", - "babel-plugin-transform-regenerator": "^6.26.0", - "babel-plugin-transform-strict-mode": "^6.24.1", "babel-preset-env": "^1.7.0", - "babel-runtime": "^6.26.0", - "babel-template": "^6.26.0", - "babel-traverse": "^6.26.0", - "babel-types": "^6.26.0", - "babylon": "^6.18.0", - "balanced-match": "^1.0.2", - "base": "^0.11.2", - "base64-js": "^1.5.1", - "big-integer": "^1.6.52", - "big.js": "^5.2.2", - "binary": "^0.3.0", - "binary-extensions": "^2.2.0", - "bindings": "^1.5.0", - "bl": "^4.1.0", - "bluebird": "^3.7.2", - "bn.js": "^5.2.1", - "boxen": "^5.1.2", - "brace-expansion": "^2.0.1", - "braces": "^3.0.2", - "brorand": "^1.1.0", - "browser-stdout": "^1.3.1", - "browserify-aes": "^1.2.0", - "browserify-cipher": "^1.0.1", - "browserify-des": "^1.0.2", - "browserify-rsa": "^4.1.0", - "browserify-sign": "^4.2.2", - "browserify-zlib": "^0.2.0", - "browserslist": "^3.2.8", - "buffer": "^5.7.1", - "buffer-crc32": "^0.2.13", - "buffer-from": "^1.1.2", - "buffer-indexof-polyfill": "^1.0.2", - "buffer-xor": "^1.0.3", - "buffers": "^0.1.1", - "builtin-status-codes": "^3.0.0", - "cacache": "^12.0.4", - "cache-base": "^1.0.1", - "call-bind": "^1.0.5", - "camelcase": "^6.3.0", - "caniuse-lite": "^1.0.30001570", - "catharsis": "^0.8.11", "chai": "^4.2.0", - "chai-nightwatch": "^0.5.3", - "chainsaw": "^0.1.0", - "chalk": "^1.1.3", - "check-error": "^1.0.3", - "chokidar": "^3.5.3", - "chownr": "^1.1.4", - "chrome-trace-event": "^1.0.3", - "chromedriver": "^127.0.2", - "ci-info": "^3.3.0", - "cipher-base": "^1.0.4", - "class-utils": "^0.3.6", - "cli-boxes": "^2.2.1", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.9.2", - "cli-table3": "^0.6.3", - "cliui": "^7.0.4", - "clone": "^1.0.4", - "clone-deep": "^4.0.1", - "collection-visit": "^1.0.0", - "color-convert": "^2.0.1", - "color-name": "^1.1.4", - "colorette": "^2.0.20", - "combined-stream": "^1.0.8", - "commander": "^2.20.3", - "commondir": "^1.0.1", - "commoner": "^0.10.8", - "compare-versions": "^6.1.0", - "component-emitter": "^1.3.1", - "compress-commons": "^4.1.2", - "concat-map": "^0.0.1", - "concat-stream": "^1.6.2", - "console-browserify": "^1.2.0", - "constants-browserify": "^1.0.0", - "convert-source-map": "^0.5.1", - "copy-concurrently": "^1.0.5", - "copy-descriptor": "^0.1.1", - "core-js": "^0.6.1", - "core-util-is": "^1.0.3", - "crc-32": "^1.2.2", - "crc32-stream": "^4.0.3", - "create-ecdh": "^4.0.4", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "cross-spawn": "^7.0.3", - "crypto-browserify": "^3.12.0", - "cssstyle": "^3.0.0", - "cyclist": "^1.0.2", - "data-uri-to-buffer": "^4.0.1", - "data-urls": "^4.0.0", - "debug": "^2.6.9", - "decamelize": "^6.0.0", - "decimal.js": "^10.4.3", - "decode-uri-component": "^0.2.2", - "deep-eql": "^4.1.3", - "deep-equal": "^2.2.3", - "deep-is": "^0.1.4", - "defaults": "^1.0.4", - "define-data-property": "^1.1.1", - "define-lazy-prop": "^2.0.0", - "define-properties": "^1.2.1", - "define-property": "^2.0.2", - "defined": "^1.0.1", - "delayed-stream": "^1.0.0", - "des.js": "^1.1.0", - "detect-indent": "^3.0.1", - "detective": "^4.7.1", - "devtools-protocol": "^0.0.1140464", - "didyoumean": "^1.2.2", - "diff": "^5.0.0", - "diffie-hellman": "^5.0.3", - "domain-browser": "^1.2.0", - "domexception": "^4.0.0", + "chromedriver": "^127.0.0", "dotenv": "^16.0.3", - "duplexer2": "^0.1.4", - "duplexify": "^3.7.1", - "edge-paths": "^3.0.5", - "edgedriver": "^5.6.1", - "ejs": "^3.1.8", - "electron-to-chromium": "^1.4.613", - "elliptic": "^6.5.4", - "emoji-regex": "^8.0.0", - "emojis-list": "^3.0.0", - "end-of-stream": "^1.4.4", - "enhanced-resolve": "^4.5.0", - "entities": "^2.0.3", - "envinfo": "^7.11.0", - "errno": "^0.1.8", - "es-get-iterator": "^1.1.3", - "escalade": "^3.1.1", - "escape-string-regexp": "^1.0.5", - "escodegen": "^2.1.0", - "eslint-scope": "^4.0.3", - "esprima": "^4.0.1", - "esprima-fb": "^15001.1001.0-dev-harmony-fb", - "esrecurse": "^4.3.0", - "estraverse": "^1.9.3", - "esutils": "^1.1.6", - "eventemitter-asyncresource": "^1.0.0", - "events": "^3.3.0", - "evp_bytestokey": "^1.0.3", - "expand-brackets": "^2.1.4", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "extract-zip": "^2.0.1", - "fast-deep-equal": "^3.1.3", - "fast-fifo": "^1.3.2", - "fast-json-stable-stringify": "^2.1.0", - "fastest-levenshtein": "^1.0.16", - "fd-slicer": "^1.1.0", - "fetch-blob": "^3.2.0", - "figgy-pudding": "^3.5.2", - "file-uri-to-path": "^1.0.0", - "filelist": "^1.0.4", - "fill-range": "^7.0.1", - "find-cache-dir": "^2.1.0", - "find-up": "^5.0.0", - "flat": "^5.0.2", - "flush-write-stream": "^1.1.1", - "follow-redirects": "^1.15.3", - "for-each": "^0.3.3", - "for-in": "^1.0.2", - "form-data": "^4.0.0", - "formdata-polyfill": "^4.0.10", - "fragment-cache": "^0.2.1", - "from2": "^2.3.0", - "fs-constants": "^1.0.0", - "fs-readdir-recursive": "^0.1.2", - "fs-write-stream-atomic": "^1.0.10", - "fs.realpath": "^1.0.0", - "fsevents": "^2.3.3", - "fstream": "^1.0.12", - "function-bind": "^1.1.2", - "functions-have-names": "^1.2.3", - "geckodriver": "^4.4.2", - "get-caller-file": "^2.0.5", - "get-func-name": "^2.0.2", - "get-intrinsic": "^1.2.2", - "get-stdin": "^4.0.1", - "get-stream": "^5.2.0", - "get-value": "^2.0.6", - "glob": "^7.2.0", - "glob-parent": "^5.1.2", - "globals": "^6.4.1", - "gopd": "^1.0.1", - "graceful-fs": "^4.2.11", - "has-ansi": "^2.0.0", - "has-bigints": "^1.0.2", - "has-flag": "^4.0.0", - "has-property-descriptors": "^1.0.1", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "has-tostringtag": "^1.0.0", - "has-value": "^1.0.0", - "has-values": "^1.0.0", - "hash-base": "^3.1.0", - "hash.js": "^1.1.7", - "hasown": "^2.0.0", - "hdr-histogram-js": "^2.0.3", - "hdr-histogram-percentiles-obj": "^3.0.0", - "he": "^1.2.0", - "hmac-drbg": "^1.0.1", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^7.0.0", - "https-browserify": "^1.0.0", - "https-proxy-agent": "^5.0.1", - "iconv-lite": "^0.4.24", - "ieee754": "^1.2.1", - "iferr": "^0.1.5", - "immediate": "^3.0.6", - "import-local": "^3.1.0", - "imurmurhash": "^0.1.4", - "infer-owner": "^1.0.4", - "inflight": "^1.0.6", - "inherits": "^2.0.4", - "internal-slot": "^1.0.6", - "interpret": "^2.2.0", - "invariant": "^2.2.4", - "ip-regex": "^4.3.0", - "is-accessor-descriptor": "^1.0.1", - "is-arguments": "^1.1.1", - "is-array-buffer": "^3.0.2", - "is-bigint": "^1.0.4", - "is-binary-path": "^2.1.0", - "is-boolean-object": "^1.1.2", - "is-buffer": "^1.1.6", - "is-callable": "^1.2.7", - "is-core-module": "^2.13.1", - "is-data-descriptor": "^1.0.1", - "is-date-object": "^1.0.5", - "is-descriptor": "^1.0.3", - "is-docker": "^2.2.1", - "is-extendable": "^1.0.1", - "is-extglob": "^2.1.1", - "is-finite": "^1.1.0", - "is-fullwidth-code-point": "^3.0.0", - "is-glob": "^4.0.3", - "is-integer": "^1.0.7", - "is-interactive": "^1.0.0", - "is-map": "^2.0.2", - "is-number": "^7.0.0", - "is-number-object": "^1.0.7", - "is-plain-obj": "^2.1.0", - "is-plain-object": "^2.0.4", - "is-potential-custom-element-name": "^1.0.1", - "is-regex": "^1.1.4", - "is-set": "^2.0.2", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-symbol": "^1.0.4", - "is-typed-array": "^1.1.12", - "is-unicode-supported": "^0.1.0", - "is-url": "^1.2.4", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.2", - "is-windows": "^1.0.2", - "is-wsl": "^2.2.0", - "is2": "^2.0.9", - "isarray": "^2.0.5", - "isexe": "^3.1.1", - "isobject": "^3.0.1", - "jake": "^10.8.7", - "js-tokens": "^1.0.0", - "js-yaml": "^4.1.0", - "js2xmlparser": "^4.0.2", + "edgedriver": "^5.3.8", + "geckodriver": "^4.2.1", "jsdoc": "3.6.5", - "jsdom": "^21.1.2", - "jsesc": "^0.5.0", - "json-parse-better-errors": "^1.0.2", - "json-schema-traverse": "^0.4.1", - "json5": "^1.0.2", - "jszip": "^3.10.1", - "kind-of": "^6.0.3", - "klaw": "^3.0.0", - "lazystream": "^1.0.1", - "left-pad": "^0.0.3", - "leven": "^1.0.2", - "lie": "^3.3.0", - "line-numbers": "^0.2.0", - "linkify-it": "^2.2.0", - "listenercount": "^1.0.1", - "loader-runner": "^2.4.0", - "loader-utils": "^1.4.2", - "locate-path": "^6.0.0", - "lodash": "^3.10.1", - "lodash._arraycopy": "^3.0.0", - "lodash._arrayeach": "^3.0.0", - "lodash._baseassign": "^3.2.0", - "lodash._baseclone": "^3.3.0", - "lodash._basecopy": "^3.0.1", - "lodash._basefor": "^3.0.3", - "lodash._bindcallback": "^3.0.1", - "lodash._getnative": "^3.9.1", - "lodash._isiterateecall": "^3.0.9", - "lodash.clone": "^3.0.3", - "lodash.defaults": "^4.2.0", - "lodash.defaultsdeep": "^4.6.1", - "lodash.difference": "^4.5.0", - "lodash.escape": "^4.0.1", - "lodash.flatten": "^4.4.0", - "lodash.isarguments": "^3.1.0", - "lodash.isarray": "^3.0.4", - "lodash.isplainobject": "^4.0.6", - "lodash.keys": "^3.1.2", - "lodash.merge": "^4.6.2", - "lodash.pick": "^4.4.0", - "lodash.union": "^4.6.0", - "log-symbols": "^4.1.0", - "loglevel": "^1.8.1", - "loglevel-plugin-prefix": "^0.8.4", - "loose-envify": "^1.4.0", - "loupe": "^2.3.7", - "lru-cache": "^6.0.0", - "make-dir": "^2.1.0", - "map-cache": "^0.2.2", - "map-visit": "^1.0.0", - "markdown-it": "^10.0.0", - "markdown-it-anchor": "^5.3.0", - "marked": "^0.8.2", - "md5.js": "^1.3.5", - "mdurl": "^1.0.1", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "miller-rabin": "^4.0.1", - "mime-db": "^1.52.0", - "mime-types": "^2.1.35", - "mimic-fn": "^2.1.0", "minami": "^1.2.3", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1", - "minimatch": "^5.0.1", - "minimist": "^1.2.8", - "mississippi": "^3.0.0", - "mixin-deep": "^1.3.2", - "mkdirp": "^1.0.4", - "mkdirp-classic": "^0.5.3", "mocha": "10.1.0", - "move-concurrently": "^1.0.1", - "ms": "^2.0.0", - "nan": "^2.18.0", - "nanoid": "^3.3.3", - "nanomatch": "^1.2.13", - "neo-async": "^2.6.2", - "nice-napi": "^1.0.2", "nightwatch": "^3.3.2", - "nightwatch-axe-verbose": "^2.2.2", - "node-addon-api": "^3.2.1", - "node-domexception": "^1.0.0", - "node-fetch": "^3.3.2", - "node-gyp-build": "^4.7.1", - "node-libs-browser": "^2.2.1", - "normalize-path": "^3.0.0", - "nwsapi": "^2.2.7", - "object-assign": "^4.1.1", - "object-copy": "^0.1.0", - "object-inspect": "^1.13.1", - "object-is": "^1.1.5", - "object-keys": "^1.1.1", - "object-visit": "^1.0.1", - "object.assign": "^4.1.5", - "object.pick": "^1.3.0", - "once": "^1.4.0", - "onetime": "^5.1.2", - "open": "^8.4.2", - "ora": "^5.4.1", - "os-browserify": "^0.3.0", - "output-file-sync": "^1.1.2", - "p-limit": "^3.1.0", - "p-locate": "^5.0.0", - "p-try": "^2.2.0", - "pako": "^1.0.11", - "parallel-transform": "^1.2.0", - "parse-asn1": "^5.1.6", - "parse5": "^7.1.2", - "pascalcase": "^0.1.1", - "path-browserify": "^0.0.1", - "path-dirname": "^1.0.2", - "path-exists": "^4.0.0", - "path-is-absolute": "^1.0.1", - "path-key": "^3.1.1", - "path-parse": "^1.0.7", - "pathval": "^1.1.1", - "pbkdf2": "^3.1.2", - "pend": "^1.2.0", - "picomatch": "^2.3.1", - "pify": "^4.0.1", - "piscina": "^3.2.0", - "pkg-dir": "^3.0.0", - "posix-character-classes": "^0.1.1", - "private": "^0.1.8", - "process": "^0.11.10", - "process-nextick-args": "^2.0.1", - "promise-inflight": "^1.0.1", - "proxy-from-env": "^1.1.0", - "prr": "^1.0.1", - "psl": "^1.9.0", - "public-encrypt": "^4.0.3", - "pump": "^3.0.0", - "pumpify": "^1.5.1", - "punycode": "^2.3.1", - "q": "^1.5.1", - "qs": "^6.11.2", - "querystring-es3": "^0.2.1", - "querystringify": "^2.2.0", - "queue-tick": "^1.0.1", - "randombytes": "^2.1.0", - "randomfill": "^1.0.4", - "readable-stream": "^3.6.2", - "readdir-glob": "^1.1.3", - "readdirp": "^3.6.0", - "recast": "^0.11.23", - "rechoir": "^0.7.1", - "regenerate": "^1.4.2", - "regenerator-babel": "^0.8.13-2", - "regenerator-runtime": "^0.11.1", - "regenerator-transform": "^0.10.1", - "regex-not": "^1.0.2", - "regexp.prototype.flags": "^1.5.1", - "regexpu": "^1.3.0", - "regexpu-core": "^2.0.0", - "regjsgen": "^0.2.0", - "regjsparser": "^0.1.5", - "remove-trailing-separator": "^1.1.0", - "repeat-element": "^1.1.4", - "repeat-string": "^1.6.1", - "repeating": "^1.1.3", - "require-directory": "^2.1.1", - "requires-port": "^1.0.0", - "requizzle": "^0.2.4", - "resolve": "^1.22.8", - "resolve-cwd": "^3.0.0", - "resolve-from": "^5.0.0", - "resolve-url": "^0.2.1", - "restore-cursor": "^3.1.0", - "ret": "^0.1.15", - "rimraf": "^3.0.2", - "ripemd160": "^2.0.2", - "rollup": "^4.6.1", - "rrweb-cssom": "^0.6.0", - "run-queue": "^1.0.3", - "safe-buffer": "^5.2.1", - "safe-regex": "^1.1.0", - "safer-buffer": "^2.1.2", - "saxes": "^6.0.0", - "schema-utils": "^1.0.0", - "selenium-webdriver": "^4.14.0", - "semver": "^5.7.2", - "serialize-javascript": "^6.0.1", - "set-function-length": "^1.1.1", - "set-function-name": "^2.0.1", - "set-value": "^2.0.1", - "setimmediate": "^1.0.5", - "sha.js": "^2.4.11", - "shallow-clone": "^3.0.1", - "shebang-command": "^2.0.0", - "shebang-regex": "^1.0.0", - "side-channel": "^1.0.4", - "signal-exit": "^3.0.7", - "slash": "^1.0.0", - "smob": "^1.4.1", - "snapdragon": "^0.8.2", - "snapdragon-node": "^2.1.1", - "snapdragon-util": "^3.0.1", - "source-list-map": "^2.0.1", - "source-map": "^0.4.4", - "source-map-resolve": "^0.5.3", - "source-map-support": "^0.2.10", - "source-map-url": "^0.4.1", - "split-string": "^3.1.0", - "sprintf-js": "^1.0.3", - "ssri": "^6.0.2", - "stacktrace-parser": "^0.1.10", - "static-extend": "^0.1.2", - "stop-iteration-iterator": "^1.0.0", - "stream-browserify": "^2.0.2", - "stream-each": "^1.2.3", - "stream-http": "^2.8.3", - "stream-shift": "^1.0.3", - "streamx": "^2.15.6", - "string_decoder": "^1.3.0", - "string-width": "^4.2.3", - "strip-ansi": "^3.0.1", - "strip-json-comments": "^3.1.1", - "supports-color": "^2.0.0", - "supports-preserve-symlinks-flag": "^1.0.0", - "symbol-tree": "^3.2.4", - "taffydb": "^2.6.2", - "tapable": "^1.1.3", - "tar-fs": "^3.0.4", - "tar-stream": "^2.2.0", - "tcp-port-used": "^1.0.2", - "terser": "^5.26.0", - "terser-webpack-plugin": "^1.4.5", - "through": "^2.3.8", - "through2": "^2.0.5", - "timers-browserify": "^2.0.12", - "tmp": "^0.2.1", - "to-arraybuffer": "^1.0.1", - "to-fast-properties": "^1.0.3", - "to-object-path": "^0.3.0", - "to-regex": "^3.0.2", - "to-regex-range": "^5.0.1", - "tough-cookie": "^4.1.3", - "tr46": "^4.1.1", - "traverse": "^0.3.9", - "trim-right": "^1.0.1", - "tty-browserify": "^0.0.0", - "type-detect": "^4.0.8", - "type-fest": "^0.20.2", - "typedarray": "^0.0.6", - "uc.micro": "^1.0.6", - "underscore": "^1.10.2", - "undici-types": "^5.26.5", - "union-value": "^1.0.1", - "unique-filename": "^1.1.1", - "unique-slug": "^2.0.2", - "universalify": "^0.2.0", - "unset-value": "^1.0.0", - "untildify": "^4.0.0", - "unzipper": "^0.10.14", - "upath": "^1.2.0", - "uri-js": "^4.4.1", - "urix": "^0.1.0", - "url": "^0.11.3", - "url-parse": "^1.5.10", - "use": "^3.1.1", - "util": "^0.11.1", - "util-deprecate": "^1.0.2", - "uuid": "^8.3.2", - "vm-browserify": "^1.1.2", - "w3c-xmlserializer": "^4.0.0", - "watchpack": "^1.7.5", - "watchpack-chokidar2": "^2.0.1", - "wcwidth": "^1.0.1", - "web-streams-polyfill": "^3.2.1", - "webidl-conversions": "^7.0.0", - "webpack": "^4.47.0", - "webpack-cli": "^4.10.0", - "webpack-merge": "^5.10.0", - "webpack-sources": "^1.4.3", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^12.0.1", - "which": "^4.0.0", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.13", - "widest-line": "^3.1.0", - "wildcard": "^2.0.1", - "worker-farm": "^1.7.0", - "workerpool": "^6.2.1", - "wrap-ansi": "^7.0.0", - "wrappy": "^1.0.2", - "ws": "^8.15.1", - "xml-name-validator": "^4.0.0", - "xmlchars": "^2.2.0", - "xmlcreate": "^2.0.4", - "xtend": "^4.0.2", - "y18n": "^5.0.8", - "yallist": "^4.0.0", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.4", - "yargs-unparser": "^2.0.0", - "yauzl": "^2.10.0", - "yocto-queue": "^0.1.0", - "zip-stream": "^4.1.1" + "rollup": "^4.6.1" } }, + "../src": { + "extraneous": true + }, "node_modules/@assemblyscript/loader": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", @@ -695,15 +59,6 @@ "node": ">=0.1.90" } }, - "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/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -1141,357 +496,100 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "node_modules/@zip.js/zip.js": { + "version": "2.7.48", + "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.48.tgz", + "integrity": "sha512-J7cliimZ2snAbr0IhLx2U8BwfA1pKucahKzTpFtYq4hEgKxwvFJcIjCIVNPwQpfVab7iVP+AKmoH1gidBlyhiQ==", "dev": true, - "dependencies": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "engines": { + "bun": ">=0.7.0", + "deno": ">=1.0.0", + "node": ">=16.5.0" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "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/@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, - "dependencies": { - "@webassemblyjs/wast-printer": "1.9.0" + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "node_modules/acorn-babel": { + "version": "0.11.1-38", + "resolved": "https://registry.npmjs.org/acorn-babel/-/acorn-babel-0.11.1-38.tgz", + "integrity": "sha512-lsXiveYSiYLMo9flCOZRtfW/txWHGLvrqvpQ/aVIHmwxSFXagy94crhyAmSJ1qttKmSuPU9SmmIFJqdbr3nS0Q==", "dev": true }, - "node_modules/@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "node_modules/acorn-globals": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", + "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.9.0" + "acorn": "^8.1.0", + "acorn-walk": "^8.0.2" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", - "dev": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "node_modules/acorn-walk": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", + "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "dependencies": { - "@xtuc/ieee754": "^1.2.0" + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "node_modules/agent-base/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": { - "@xtuc/long": "4.2.2" + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "node_modules/agent-base/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/@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" - } - }, - "node_modules/@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webpack-cli/configtest": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", - "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", - "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", - "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, - "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/@zip.js/zip.js": { - "version": "2.7.48", - "resolved": "https://registry.npmjs.org/@zip.js/zip.js/-/zip.js-2.7.48.tgz", - "integrity": "sha512-J7cliimZ2snAbr0IhLx2U8BwfA1pKucahKzTpFtYq4hEgKxwvFJcIjCIVNPwQpfVab7iVP+AKmoH1gidBlyhiQ==", - "dev": true, - "engines": { - "bun": ">=0.7.0", - "deno": ">=1.0.0", - "node": ">=16.5.0" - } - }, - "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/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-babel": { - "version": "0.11.1-38", - "resolved": "https://registry.npmjs.org/acorn-babel/-/acorn-babel-0.11.1-38.tgz", - "integrity": "sha512-lsXiveYSiYLMo9flCOZRtfW/txWHGLvrqvpQ/aVIHmwxSFXagy94crhyAmSJ1qttKmSuPU9SmmIFJqdbr3nS0Q==", - "dev": true - }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "dev": true, - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/agent-base/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/agent-base/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/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/ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true, - "peerDependencies": { - "ajv": ">=5.0.0" - } - }, - "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/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true, "engines": { "node": ">=0.4.2" @@ -1570,12 +668,6 @@ "node": ">= 8" } }, - "node_modules/aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, "node_modules/archiver": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", @@ -1669,33 +761,6 @@ "deep-equal": "^2.0.5" } }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-buffer-byte-length": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", @@ -1709,58 +774,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/asn1.js/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/assert": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.1.tgz", - "integrity": "sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==", - "dev": true, - "dependencies": { - "object.assign": "^4.1.4", - "util": "^0.10.4" - } - }, - "node_modules/assert/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/assert/node_modules/util": { - "version": "0.10.4", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", - "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -1770,15 +783,6 @@ "node": "*" } }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ast-types": { "version": "0.7.8", "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.7.8.tgz", @@ -1794,36 +798,12 @@ "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", "dev": true }, - "node_modules/async-each": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.6.tgz", - "integrity": "sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, "node_modules/available-typed-arrays": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", @@ -1846,9 +826,9 @@ } }, "node_modules/axios": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.3.tgz", - "integrity": "sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==", + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.5.tgz", + "integrity": "sha512-fZu86yCo+svH3uqJ/yTdQ0QHpQu5oL+/QE+QPSv6BZSkDAoky9vytxp7u5qk83OJFS3kEBcesWni9WTZAv3tSw==", "dev": true, "dependencies": { "follow-redirects": "^1.15.6", @@ -2582,36 +1562,6 @@ "streamx": "^2.18.0" } }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -2641,59 +1591,19 @@ "node": ">=10.0.0" } }, - "node_modules/big-integer": { - "version": "1.6.52", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.52.tgz", - "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true, "engines": { - "node": ">=0.6" + "node": ">=8" } }, - "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": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "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", @@ -2707,12 +1617,6 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", "dev": true }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -2799,94 +1703,12 @@ "node": ">=8" } }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "dependencies": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "node_modules/browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "dependencies": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "node_modules/browserify-sign": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", - "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "browserify-rsa": "^4.1.0", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.4", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.6", - "readable-stream": "^3.6.2", - "safe-buffer": "^5.2.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", - "dev": true, - "dependencies": { - "pako": "~1.0.5" - } - }, "node_modules/browserslist": { "version": "3.2.8", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", @@ -2939,124 +1761,6 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, - "node_modules/builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", - "dev": true - }, - "node_modules/cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "dependencies": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - } - }, - "node_modules/cacache/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/cacache/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/cacache/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/cacache/node_modules/y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "node_modules/cacache/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/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/call-bind": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", @@ -3151,18 +1855,6 @@ "node": ">= 12.0.0" } }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, "node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -3218,30 +1910,15 @@ "fsevents": "~2.3.2" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, - "engines": { - "node": ">=6.0" - } - }, "node_modules/chromedriver": { - "version": "127.0.2", - "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-127.0.2.tgz", - "integrity": "sha512-mYfJ/8FqzsdFOs2rPiAI4y0suFnv78cRnzZK0MHdSfSIDeRPbqZz0rNX4lrXt14hXc9vqXa+a8cMxlrhWtXKSQ==", + "version": "127.0.3", + "resolved": "https://registry.npmjs.org/chromedriver/-/chromedriver-127.0.3.tgz", + "integrity": "sha512-trUHkFt0n7jGzNOgkO1srOJfz50kKyAGJ016PyV0hrtyKNIGnOC9r3Jlssz19UoEjSzI/1g2shEiIFtDbBYVaw==", "dev": true, "hasInstallScript": true, "dependencies": { "@testim/chrome-version": "^1.1.4", - "axios": "^1.6.7", + "axios": "^1.7.4", "compare-versions": "^6.1.0", "extract-zip": "^2.0.1", "proxy-agent": "^6.4.0", @@ -3261,56 +1938,6 @@ "integrity": "sha512-riT/3vI5YpVH6/qomlDnJow6TBee2PBKSEpx3O32EGPYbWGIRsIlGRms3Sm74wYE1JMo8RnO04Hb12+v1J5ICw==", "dev": true }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/class-utils/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", @@ -3403,33 +2030,6 @@ "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/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", @@ -3448,12 +2048,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "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/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3472,12 +2066,6 @@ "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/commoner": { "version": "0.10.8", "resolved": "https://registry.npmjs.org/commoner/-/commoner-0.10.8.tgz", @@ -3557,15 +2145,6 @@ "integrity": "sha512-LNZQXhqUvqUTotpZ00qLSaify3b4VFD588aRr8MKFw4CMUr98ytzCW5wDH5qx/DEY5kCDXcbcRuCqL0szEf2tg==", "dev": true }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/compress-commons": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", @@ -3587,145 +2166,35 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/convert-source-map": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.5.1.tgz", + "integrity": "sha512-Iy5Wc88cL36uxzlUog0yy4LHumGb5NAyGxgXn2ec9YAcN5qka4wcOK7I5PRLBOarS8nmZd9WfvnLItF70QLtfQ==", "dev": true }, - "node_modules/concat-stream/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/core-js": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-0.6.1.tgz", + "integrity": "sha512-ANdRS9QdyvvVCqMD7gvDhgI5T+/t5FELQB1ZLN94oCDXTJLwt4Q1o6Nbc1wnVrhl6QPyJ5mv0k8hMCdAFLNbLg==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "dev": true }, - "node_modules/concat-stream/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==", + "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/concat-stream/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==", + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "node_modules/constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-0.5.1.tgz", - "integrity": "sha512-Iy5Wc88cL36uxzlUog0yy4LHumGb5NAyGxgXn2ec9YAcN5qka4wcOK7I5PRLBOarS8nmZd9WfvnLItF70QLtfQ==", - "dev": true - }, - "node_modules/copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, - "node_modules/copy-concurrently/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/copy-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/core-js": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-0.6.1.tgz", - "integrity": "sha512-ANdRS9QdyvvVCqMD7gvDhgI5T+/t5FELQB1ZLN94oCDXTJLwt4Q1o6Nbc1wnVrhl6QPyJ5mv0k8hMCdAFLNbLg==", - "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", - "dev": true - }, - "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/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" } }, "node_modules/crc32-stream": { @@ -3741,106 +2210,6 @@ "node": ">= 10" } }, - "node_modules/create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - } - }, - "node_modules/create-ecdh/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.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/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "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/crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "dependencies": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - }, - "engines": { - "node": "*" - } - }, "node_modules/cssstyle": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", @@ -3853,12 +2222,6 @@ "node": ">=14" } }, - "node_modules/cyclist": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.2.tgz", - "integrity": "sha512-0sVXIohTfLqVIW3kb/0n6IiWF3Ifj5nm2XaSrLq2DI6fKIGa2fYAZdk917rUneaeLVpYfFcyXE2ft0fe3remsA==", - "dev": true - }, "node_modules/data-uri-to-buffer": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", @@ -3909,15 +2272,6 @@ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -4020,19 +2374,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/defined": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", @@ -4077,16 +2418,6 @@ "node": ">=0.4.0" } }, - "node_modules/des.js": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", - "integrity": "sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "node_modules/detect-indent": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-3.0.1.tgz", @@ -4147,33 +2478,6 @@ "node": ">=0.3.1" } }, - "node_modules/diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - } - }, - "node_modules/diffie-hellman/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true, - "engines": { - "node": ">=0.4", - "npm": ">=1.2" - } - }, "node_modules/domexception": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", @@ -4199,99 +2503,6 @@ "url": "https://github.com/motdotla/dotenv?sponsor=1" } }, - "node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/duplexer2/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/duplexer2/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/duplexer2/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/duplexer2/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/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/duplexify/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/duplexify/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/duplexify/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/duplexify/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/edge-paths": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/edge-paths/-/edge-paths-3.0.5.tgz", @@ -4369,42 +2580,12 @@ "integrity": "sha512-r4x5+FowKG6q+/Wj0W9nidx7QO31BJwmR2uEo+Qh3YLGQ8SbBAFuDFpTxzly/I2gsbrFwBuIjrMp423L3O5U3w==", "dev": true }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "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/end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -4414,103 +2595,28 @@ "once": "^1.4.0" } }, - "node_modules/enhanced-resolve": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", - "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/enhanced-resolve/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", "dev": true }, - "node_modules/enhanced-resolve/node_modules/memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "node_modules/envinfo": { + "version": "7.11.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", + "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "bin": { + "envinfo": "dist/cli.js" }, "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" + "node": ">=4" } }, - "node_modules/enhanced-resolve/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/enhanced-resolve/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/enhanced-resolve/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/entities": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", - "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", - "dev": true - }, - "node_modules/envinfo": { - "version": "7.11.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.11.0.tgz", - "integrity": "sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==", - "dev": true, - "bin": { - "envinfo": "dist/cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/es-get-iterator": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", - "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", + "node_modules/es-get-iterator": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz", + "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", @@ -4594,28 +2700,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", - "dev": true, - "dependencies": { - "esrecurse": "^4.1.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-scope/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/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -4642,27 +2726,6 @@ "node": ">=0.4.0" } }, - "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": "1.9.3", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.9.3.tgz", @@ -4687,154 +2750,6 @@ "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", "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/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/expand-brackets/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -4878,24 +2793,12 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "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-fifo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", "dev": true }, - "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/fast-xml-parser": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", @@ -4918,15 +2821,6 @@ "fxparser": "src/cli/cli.js" } }, - "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, - "engines": { - "node": ">= 4.9.1" - } - }, "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -4959,19 +2853,6 @@ "node": "^12.20 || >= 14.13" } }, - "node_modules/figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "deprecated": "This module is no longer supported.", - "dev": true - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true - }, "node_modules/filelist": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", @@ -4993,20 +2874,6 @@ "node": ">=8" } }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -5032,52 +2899,6 @@ "flat": "cli.js" } }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, - "node_modules/flush-write-stream/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/flush-write-stream/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/flush-write-stream/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/flush-write-stream/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/follow-redirects": { "version": "1.15.6", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", @@ -5107,15 +2928,6 @@ "is-callable": "^1.1.3" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/form-data": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", @@ -5142,91 +2954,33 @@ "node": ">=12.20.0" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, "dependencies": { - "map-cache": "^0.2.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=14.14" } }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/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/from2/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/from2/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/from2/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/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-extra/node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", - "dev": true, - "engines": { - "node": ">= 10.0.0" + "engines": { + "node": ">= 10.0.0" } }, "node_modules/fs-readdir-recursive": { @@ -5235,54 +2989,6 @@ "integrity": "sha512-//yfxmYAazrsyb/rgeYDNFXFTuPYTGYirp5QHFSH8h/LaNUoP5bQAa2ikstdK1PR/bFd1CIlQLpUq6/u6UVfSw==", "dev": true }, - "node_modules/fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, - "node_modules/fs-write-stream-atomic/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/fs-write-stream-atomic/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/fs-write-stream-atomic/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/fs-write-stream-atomic/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/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5295,6 +3001,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "optional": true, "os": [ "darwin" ], @@ -5302,45 +3009,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/fstream/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/fstream/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/function-bind": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", @@ -5522,15 +3190,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -5693,93 +3352,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "node_modules/hasown": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", @@ -5818,17 +3390,6 @@ "he": "bin/he" } }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "node_modules/html-encoding-sniffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", @@ -5877,12 +3438,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==", - "dev": 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", @@ -5963,175 +3518,62 @@ } ] }, - "node_modules/iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==", - "dev": true - }, "node_modules/immediate": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", "dev": true }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "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==", "dev": true, "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/import-local/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/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/import-local/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==", + "node_modules/internal-slot": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", + "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/import-local/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==", + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "loose-envify": "^1.0.0" } }, - "node_modules/import-local/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==", + "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": { - "p-limit": "^2.2.0" + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" }, "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/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/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/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==", - "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/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invariant": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", - "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", - "dev": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "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": ">= 12" } }, "node_modules/ip-address/node_modules/sprintf-js": { @@ -6149,18 +3591,6 @@ "node": ">=8" } }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", - "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-arguments": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", @@ -6231,12 +3661,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, "node_modules/is-callable": { "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", @@ -6249,30 +3673,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-core-module": { - "version": "2.13.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", - "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", - "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/is-date-object": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", @@ -6288,19 +3688,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-descriptor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", - "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/is-docker": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", @@ -6316,18 +3703,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -6430,18 +3805,6 @@ "node": ">=8" } }, - "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-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -6570,15 +3933,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", @@ -6620,15 +3974,6 @@ "node": ">=16" } }, - "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/jake": { "version": "10.8.7", "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", @@ -6891,30 +4236,6 @@ "jsesc": "bin/jsesc" } }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "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/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", @@ -6984,15 +4305,6 @@ "safe-buffer": "~5.1.0" } }, - "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/klaw": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", @@ -7097,35 +4409,6 @@ "uc.micro": "^1.0.1" } }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", - "dev": true - }, - "node_modules/loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", - "dev": true, - "engines": { - "node": ">=4.3.0 <5.0.0 || >=5.10" - } - }, - "node_modules/loader-utils": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", - "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", - "dev": true, - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -7418,40 +4701,6 @@ "node": ">=10" } }, - "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, - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/markdown-it": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", @@ -7489,276 +4738,58 @@ "node": ">= 8.16.2" } }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, "node_modules/mdurl": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", "dev": true }, - "node_modules/memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", - "dev": true, - "dependencies": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, - "node_modules/memory-fs/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/memory-fs/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==", + "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, - "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" + "engines": { + "node": ">= 0.6" } }, - "node_modules/memory-fs/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/memory-fs/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==", + "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": { - "safe-buffer": "~5.1.0" + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "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, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=6" } }, - "node_modules/micromatch/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/minami": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/minami/-/minami-1.2.3.tgz", + "integrity": "sha512-3f2QqqbUC1usVux0FkQMFYB73yd9JIxmHSn1dWQacizL6hOUaNu6mA3KxZ9SfiCc4qgcgq+5XP59+hP7URa1Dw==", + "dev": true + }, + "node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/micromatch/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "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/minami": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/minami/-/minami-1.2.3.tgz", - "integrity": "sha512-3f2QqqbUC1usVux0FkQMFYB73yd9JIxmHSn1dWQacizL6hOUaNu6mA3KxZ9SfiCc4qgcgq+5XP59+hP7URa1Dw==", - "dev": true - }, - "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/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" + "node": ">=10" } }, "node_modules/minimist": { @@ -7770,40 +4801,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "dependencies": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -7816,12 +4813,6 @@ "node": ">=10" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, "node_modules/mocha": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.1.0.tgz", @@ -7927,56 +4918,12 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, - "node_modules/move-concurrently/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/move-concurrently/node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "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/nan": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz", - "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==", - "dev": true - }, "node_modules/nanoid": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", @@ -7989,34 +4936,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "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/netmask": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", @@ -8032,6 +4951,7 @@ "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", "dev": true, "hasInstallScript": true, + "optional": true, "os": [ "!win32" ], @@ -8404,7 +5324,8 @@ "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 + "dev": true, + "optional": true }, "node_modules/node-domexception": { "version": "1.0.0", @@ -8448,96 +5369,13 @@ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.7.1.tgz", "integrity": "sha512-wTSrZ+8lsRRa3I3H8Xr65dLWSgCvY2l4AOnaeKdPA9TB/WYMPaTcrzf3rXvFoVvjKNVnu0CcWSx54qq9GKRUYg==", "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-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "dependencies": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - } - }, - "node_modules/node-libs-browser/node_modules/buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "node_modules/node-libs-browser/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/node-libs-browser/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/node-libs-browser/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/node-libs-browser/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/node-libs-browser/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/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -8562,57 +5400,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", @@ -8647,18 +5434,6 @@ "node": ">= 0.4" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.assign": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", @@ -8677,22 +5452,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "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==", + "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" @@ -8817,12 +5580,6 @@ "node": ">=8" } }, - "node_modules/os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==", - "dev": true - }, "node_modules/output-file-sync": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/output-file-sync/-/output-file-sync-1.1.2.tgz", @@ -8876,15 +5633,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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/pac-proxy-agent": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", @@ -8959,66 +5707,6 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "node_modules/parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "dependencies": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "node_modules/parallel-transform/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/parallel-transform/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/parallel-transform/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/parallel-transform/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/parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "dependencies": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "node_modules/parse5": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", @@ -9043,27 +5731,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", - "dev": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -9082,21 +5749,6 @@ "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/pathval": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", @@ -9106,22 +5758,6 @@ "node": "*" } }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -9140,15 +5776,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "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, - "engines": { - "node": ">=6" - } - }, "node_modules/piscina": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", @@ -9163,88 +5790,6 @@ "nice-napi": "^1.0.2" } }, - "node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dev": true, - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/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/pkg-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/private": { "version": "0.1.8", "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", @@ -9254,27 +5799,12 @@ "node": ">= 0.6" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "dev": true, - "engines": { - "node": ">= 0.6.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/proxy-agent": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", @@ -9345,38 +5875,12 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true }, - "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 - }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", "dev": true }, - "node_modules/public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "dependencies": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/public-encrypt/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -9387,27 +5891,6 @@ "once": "^1.3.1" } }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, - "node_modules/pumpify/node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -9427,30 +5910,6 @@ "teleport": ">=0.2.0" } }, - "node_modules/qs": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", - "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -9472,16 +5931,6 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "dependencies": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -9575,18 +6024,6 @@ "node": ">=0.10.0" } }, - "node_modules/rechoir": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", - "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", - "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -9628,19 +6065,6 @@ "private": "^0.1.6" } }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/regexp.prototype.flags": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", @@ -9749,30 +6173,6 @@ "regjsparser": "bin/parser" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", - "dev": true - }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/repeating": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", @@ -9818,51 +6218,6 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, - "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.13.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-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "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": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -9876,15 +6231,6 @@ "node": ">=8" } }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" - } - }, "node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -9900,16 +6246,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, "node_modules/rollup": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.0.tgz", @@ -9945,15 +6281,6 @@ "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", "dev": true }, - "node_modules/run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", - "dev": true, - "dependencies": { - "aproba": "^1.1.1" - } - }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -9974,15 +6301,6 @@ } ] }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -10001,20 +6319,6 @@ "node": ">=v12.22.7" } }, - "node_modules/schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", - "dev": true, - "dependencies": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" - }, - "engines": { - "node": ">= 4" - } - }, "node_modules/selenium-webdriver": { "version": "4.14.0", "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.14.0.tgz", @@ -10076,94 +6380,12 @@ "node": ">= 0.4" } }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "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-command/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/shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", @@ -10218,130 +6440,6 @@ "integrity": "sha512-9LK+E7Hv5R9u4g4C3p+jjLstaLe11MDsL21UpYaCNmapvMkYhqCV4A/f/3gyH8QjMyh6l68q9xC85vihY9ahMQ==", "dev": true }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/snapdragon/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/socks": { "version": "2.8.3", "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", @@ -10393,12 +6491,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "node_modules/source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", @@ -10411,20 +6503,6 @@ "node": ">=0.8.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/source-map-support": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.2.10.tgz", @@ -10446,40 +6524,12 @@ "node": ">=0.8.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "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": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "dependencies": { - "figgy-pudding": "^3.5.1" - } - }, "node_modules/stacktrace-parser": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", @@ -10501,229 +6551,80 @@ "node": ">=8" } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "node_modules/stop-iteration-iterator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", + "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", "dev": true, "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" + "internal-slot": "^1.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "node_modules/streamx": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" }, - "engines": { - "node": ">=0.10.0" + "optionalDependencies": { + "bare-events": "^2.2.0" } }, - "node_modules/static-extend/node_modules/is-descriptor": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", - "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "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": { - "is-accessor-descriptor": "^1.0.1", - "is-data-descriptor": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" + "safe-buffer": "~5.2.0" } }, - "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "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": { - "internal-slot": "^1.0.4" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "node_modules/string-width/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, - "dependencies": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" + "engines": { + "node": ">=8" } }, - "node_modules/stream-browserify/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/stream-browserify/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==", + "node_modules/string-width/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": { - "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" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/stream-browserify/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/stream-browserify/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/stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, - "node_modules/stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "dependencies": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, - "node_modules/stream-http/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/stream-http/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/stream-http/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/stream-http/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/stream-shift": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", - "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", - "dev": true - }, - "node_modules/streamx": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", - "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", - "dev": true, - "dependencies": { - "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.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/string-width/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/string-width/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-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, "dependencies": { "ansi-regex": "^2.0.0" @@ -10759,18 +6660,6 @@ "node": ">=0.8.0" } }, - "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-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -10783,15 +6672,6 @@ "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==", "dev": true }, - "node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/tar-fs": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", @@ -10884,83 +6764,6 @@ "node": ">=10" } }, - "node_modules/terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", - "dev": true, - "dependencies": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", - "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" - }, - "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "webpack": "^4.0.0" - } - }, - "node_modules/terser-webpack-plugin/node_modules/is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/terser-webpack-plugin/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/terser-webpack-plugin/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/terser-webpack-plugin/node_modules/terser": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", - "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/terser/node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10989,805 +6792,179 @@ "b4a": "^1.6.4" } }, - "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/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/through2/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/through2/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/through2/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/through2/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/timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "dependencies": { - "setimmediate": "^1.0.4" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/tmp": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", - "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", - "dev": true, - "dependencies": { - "rimraf": "^3.0.0" - }, - "engines": { - "node": ">=8.17.0" - } - }, - "node_modules/to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", - "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.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, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", - "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", - "dev": true, - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", - "dev": true, - "dependencies": { - "punycode": "^2.3.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/trim-right": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", - "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true - }, - "node_modules/tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==", - "dev": true - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true - }, - "node_modules/uc.micro": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", - "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", - "dev": true - }, - "node_modules/underscore": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", - "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==", - "dev": true - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/union-value/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", - "dev": true, - "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", - "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", - "dev": true, - "dependencies": { - "isarray": "1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unset-value/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/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/unzipper": { - "version": "0.10.14", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.14.tgz", - "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/unzipper/node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "dev": true - }, - "node_modules/unzipper/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/unzipper/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/unzipper/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/unzipper/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/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, - "engines": { - "node": ">=4", - "yarn": "*" - } - }, - "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/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/url": { - "version": "0.11.3", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.3.tgz", - "integrity": "sha512-6hxOLGfZASQK/cijlZnZJTq8OXAkt/3YGfQX45vvMYXpZoo8NdWZcY73K108Jf759lS1Bv/8wXnHDTSz17dSRw==", - "dev": true, - "dependencies": { - "punycode": "^1.4.1", - "qs": "^6.11.2" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "dev": true, - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/url/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/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "dependencies": { - "inherits": "2.0.3" - } - }, - "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/util/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/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/vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, - "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "dev": true, - "dependencies": { - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0" - }, - "optionalDependencies": { - "chokidar": "^3.4.1", - "watchpack-chokidar2": "^2.0.1" - } - }, - "node_modules/watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "dependencies": { - "chokidar": "^2.1.8" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/watchpack-chokidar2/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } + "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/watchpack-chokidar2/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", "dev": true, "dependencies": { - "is-extendable": "^0.1.0" + "rimraf": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.17.0" } }, - "node_modules/watchpack-chokidar2/node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "node_modules/to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha512-lxrWP8ejsq+7E3nNjwYmUBMAgjMTZoTI+sdBOpvNyijeDLa29LUn9QaoXAHv4+Z578hbmHHJKZknzxVtvo77og==", "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "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, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">= 4.0" + "node": ">=8.0" } }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dev": true, "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" } }, - "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", "dev": true, "dependencies": { - "is-extglob": "^2.1.0" + "punycode": "^2.3.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=14" } }, - "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "node_modules/trim-right": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha512-WZGXGstmCWgeevgTL54hrCuw1dyMQIzWy7ZfqRJfSmJZBwklI15egmQytFP6bPidmw3M8d5yEowl1niq4vmqZw==", "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/watchpack-chokidar2/node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", + "dev": true + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/watchpack-chokidar2/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/watchpack-chokidar2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "node_modules/underscore": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", + "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==", + "dev": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, - "node_modules/watchpack-chokidar2/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 4.0.0" } }, - "node_modules/watchpack-chokidar2/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==", + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "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" + "engines": { + "node": ">=8" } }, - "node_modules/watchpack-chokidar2/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - }, - "engines": { - "node": ">=0.10" + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "node_modules/watchpack-chokidar2/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==", + "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/watchpack-chokidar2/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==", + "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, - "dependencies": { - "safe-buffer": "~5.1.0" + "bin": { + "uuid": "dist/bin/uuid" } }, - "node_modules/watchpack-chokidar2/node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "node_modules/w3c-xmlserializer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", + "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", "dev": true, "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=14" } }, "node_modules/wcwidth": { @@ -11817,168 +6994,6 @@ "node": ">=12" } }, - "node_modules/webpack": { - "version": "4.47.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", - "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", - "dev": true, - "dependencies": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.5.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - }, - "webpack-command": { - "optional": true - } - } - }, - "node_modules/webpack-cli": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", - "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.2.0", - "@webpack-cli/info": "^1.5.0", - "@webpack-cli/serve": "^1.7.0", - "colorette": "^2.0.14", - "commander": "^7.0.0", - "cross-spawn": "^7.0.3", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "webpack-merge": "^5.7.3" - }, - "bin": { - "webpack-cli": "bin/cli.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x" - }, - "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, - "@webpack-cli/migrate": { - "optional": true - }, - "webpack-bundle-analyzer": { - "optional": true - }, - "webpack-dev-server": { - "optional": true - } - } - }, - "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-merge": { - "version": "5.10.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", - "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", - "dev": true, - "dependencies": { - "clone-deep": "^4.0.1", - "flat": "^5.0.2", - "wildcard": "^2.0.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", - "dev": true, - "dependencies": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" - } - }, - "node_modules/webpack-sources/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/webpack/node_modules/acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/webpack/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/whatwg-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", @@ -12102,21 +7117,6 @@ "node": ">=8" } }, - "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/worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "dependencies": { - "errno": "~0.1.7" - } - }, "node_modules/workerpool": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", @@ -12224,15 +7224,6 @@ "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", "dev": true }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/package.json b/package.json index 641e8f7..3c5d9a3 100755 --- a/package.json +++ b/package.json @@ -1,16 +1,16 @@ { "name": "@puremvc/puremvc-js-multicore-framework", - "version": "2.0.7", + "version": "2.0.8", + "description": "PureMVC MultiCore Framework for JavaScript", "type": "module", - "main": "bin/cjs/puremvc.cjs", - "module": "bin/esm/puremvc.js", + "main": "bin/cjs/index.cjs", + "module": "bin/esm/index.js", "exports": { ".": { - "require": "./bin/cjs/puremvc.cjs", - "import": "./bin/esm/puremvc.js" + "require": "./bin/cjs/index.cjs", + "import": "./bin/esm/index.js" } }, - "description": "PureMVC MultiCore Framework for JavaScript", "scripts": { "build": "npm run clean && npm run build:lib", "build:lib": "rollup -c build/rollup.conf.mjs", @@ -30,6 +30,10 @@ "type": "git", "url": "git+https://github.com/PureMVC/puremvc-js-multicore-framework.git" }, + "homepage": "https://puremvc.org", + "bugs": { + "url": "https://github.com/PureMVC/puremvc-js-multicore-framework/issues" + }, "keywords": [ "puremvc", "mvc" @@ -40,16 +44,18 @@ "VERSION", "package.json" ], + "author": "Saad Shams, David Foley, Cliff Hall", + "license": "BSD-3-Clause", "authors": [ "Saad Shams ", "David Foley ", "Cliff Hall " ], - "license": "BSD-3-Clause", - "bugs": { - "url": "https://github.com/PureMVC/puremvc-js-multicore-framework/issues" + "directories": { + "doc": "docs", + "test": "test", + "bin": "bin" }, - "homepage": "https://puremvc.org", "babel": { "presets": [ "env" @@ -64,7 +70,7 @@ "babel-plugin-add-module-exports": "^1.0.4", "babel-preset-env": "^1.7.0", "chai": "^4.2.0", - "chromedriver": "^127.0.2", + "chromedriver": "^127.0.0", "dotenv": "^16.0.3", "edgedriver": "^5.3.8", "geckodriver": "^4.2.1", @@ -73,13 +79,5 @@ "mocha": "10.1.0", "nightwatch": "^3.3.2", "rollup": "^4.6.1" - }, - "bin": { - "puremvc-js-multicore-framework": "bin/puremvc.js" - }, - "directories": { - "doc": "docs", - "test": "test" - }, - "author": "Saad Shams, David Foley, Cliff Hall" + } } diff --git a/src/core/Controller.js b/src/core/Controller.js index f076258..42b945f 100644 --- a/src/core/Controller.js +++ b/src/core/Controller.js @@ -54,10 +54,10 @@ class Controller { * passing the unique key for this instance * `Controller.getInstance( multitonKey )`

* - * @throws {Error} Error if instance for this Multiton key has already been constructed - * * @constructor * @param {string} key + * + * @throws {Error} Error if instance for this Multiton key has already been constructed */ constructor(key) { if (Controller.instanceMap[key] != null) throw new Error(Controller.MULTITON_MSG); diff --git a/src/core/Model.js b/src/core/Model.js index 0b64df7..5436d6c 100644 --- a/src/core/Model.js +++ b/src/core/Model.js @@ -30,7 +30,6 @@ * * @class Model */ - class Model { /** @@ -150,4 +149,4 @@ class Model { */ static get MULTITON_MSG() { return "Model instance for this Multiton key already constructed!" }; } -export { Model } \ No newline at end of file +export { Model } diff --git a/src/patterns/facade/Facade.js b/src/patterns/facade/Facade.js index ec4716a..e9c1a57 100644 --- a/src/patterns/facade/Facade.js +++ b/src/patterns/facade/Facade.js @@ -33,6 +33,7 @@ class Facade { * * @constructor * @param {string} key + * * @throws {Error} Error if instance for this Multiton key has already been constructed */ constructor(key) { @@ -197,7 +198,7 @@ class Facade { } /** - * Check if a Proxy is registered + * Check if a `Proxy` is registered * * @param {string} proxyName * @returns {boolean} whether a Proxy is currently registered with the given `proxyName`. @@ -236,7 +237,7 @@ class Facade { } /** - * Check if a Mediator is registered or not + * Check if a `Mediator` is registered or not * * @param {string} mediatorName * @returns {boolean} whether a Mediator is registered with the given `mediatorName`. @@ -276,7 +277,7 @@ class Facade { * compatibility, and to allow you to send custom * notification classes using the facade.

* - *

Usually you should just call sendNotification + *

Usually you should just call `sendNotification` * and pass the parameters, never having to * construct the notification yourself.

* diff --git a/src/patterns/mediator/Mediator.js b/src/patterns/mediator/Mediator.js index 9f031a2..3a64824 100644 --- a/src/patterns/mediator/Mediator.js +++ b/src/patterns/mediator/Mediator.js @@ -21,10 +21,10 @@ class Mediator extends Notifier { * Constructor. * * @constructor - * @param {string} mediatorName - * @param {Object} [viewComponent] viewComponent + * @param {string | null} [mediatorName=null] + * @param {Object | null} [viewComponent=null] */ - constructor(mediatorName, viewComponent = null) { + constructor(mediatorName = null, viewComponent = null) { super(); this._mediatorName = mediatorName || Mediator.NAME; this._viewComponent = viewComponent; @@ -85,7 +85,7 @@ class Mediator extends Notifier { * be defined in the subclass that casts the view * object to a type, like this:

* - * @returns {Object} + * @returns {Object | null} */ get viewComponent() { return this._viewComponent; diff --git a/src/patterns/observer/Notification.js b/src/patterns/observer/Notification.js index fc46bdf..3642425 100644 --- a/src/patterns/observer/Notification.js +++ b/src/patterns/observer/Notification.js @@ -7,7 +7,6 @@ */ /** - * * A base `Notification` implementation. * *

PureMVC does not rely upon underlying event models such @@ -65,7 +64,7 @@ class Notification { /** * Get the body of the `Notification` instance. * - * @returns {Object} + * @returns {Object | null} */ get body() { return this._body; diff --git a/src/patterns/observer/Observer.js b/src/patterns/observer/Observer.js index fe065c0..accedde 100644 --- a/src/patterns/observer/Observer.js +++ b/src/patterns/observer/Observer.js @@ -32,12 +32,12 @@ class Observer { *

The notification method on the interested object should take * one parameter of type `Notification`

* - * @param {function(Notification):void} notifyMethod - * @param {Object} notifyContext + * @param {function(Notification):void | null} [notify = null] + * @param {Object | null} [context = null] */ - constructor(notifyMethod, notifyContext) { - this._notifyMethod = notifyMethod; - this._notifyContext = notifyContext; + constructor(notify = null, context = null) { + this._notifyMethod = notify; + this._notifyContext = context; } /** diff --git a/src/patterns/proxy/Proxy.js b/src/patterns/proxy/Proxy.js index 8e9fcac..799a0f0 100755 --- a/src/patterns/proxy/Proxy.js +++ b/src/patterns/proxy/Proxy.js @@ -33,16 +33,16 @@ class Proxy extends Notifier { * Constructor * * @constructor - * @param {string} proxyName - * @param {Object} [data] + * @param {string | null} [proxyName=null] + * @param {Object | null} [data=null] */ - constructor(proxyName, data = null) { + constructor(proxyName = null, data = null) { super(); /** @protected * @type {string} */ this._proxyName = proxyName || Proxy.NAME; /** @protected - * @type {Object} */ + * @type {Object | null} */ this._data = data; } @@ -68,7 +68,7 @@ class Proxy extends Notifier { /** * Get the data object * - * @returns {Object} + * @returns {Object | null} */ get data () { return this._data; diff --git a/test/core/ControllerTest.js b/test/core/ControllerTest.js index 99247af..2898a5c 100644 --- a/test/core/ControllerTest.js +++ b/test/core/ControllerTest.js @@ -1,3 +1,11 @@ +// +// ControllerTest.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import chai from "chai" import {Controller, View, Notification} from "../../src/index.js"; import {ControllerTestCommand} from "./ControllerTestCommand.js"; diff --git a/test/core/ControllerTestCommand.js b/test/core/ControllerTestCommand.js index d90cbe2..acc2cc1 100644 --- a/test/core/ControllerTestCommand.js +++ b/test/core/ControllerTestCommand.js @@ -1,7 +1,14 @@ +// +// ControllerTestCommand.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {SimpleCommand} from "../../src/index.js"; /** - /** * A SimpleCommand subclass used by ControllerTest. * * @see ControllerTest diff --git a/test/core/ControllerTestCommand2.js b/test/core/ControllerTestCommand2.js index 4e5e58c..9d6912e 100644 --- a/test/core/ControllerTestCommand2.js +++ b/test/core/ControllerTestCommand2.js @@ -1,3 +1,11 @@ +// +// ControllerTestCommand2.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {SimpleCommand} from "../../src/index.js"; /** diff --git a/test/core/ControllerTestVO.js b/test/core/ControllerTestVO.js index 5a4d442..fc52658 100644 --- a/test/core/ControllerTestVO.js +++ b/test/core/ControllerTestVO.js @@ -1,3 +1,11 @@ +// +// ControllerTestVO.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + /** * A utility class used by ControllerTest. * diff --git a/test/core/ModelTest.js b/test/core/ModelTest.js index 22f4562..cb526ae 100644 --- a/test/core/ModelTest.js +++ b/test/core/ModelTest.js @@ -1,3 +1,11 @@ +// +// ModelTest.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {Model, Proxy} from "../../src/index.js"; import chai from "chai" import { ModelTestProxy } from "./ModelTestProxy.js" diff --git a/test/core/ModelTestProxy.js b/test/core/ModelTestProxy.js index 497085c..06ca877 100644 --- a/test/core/ModelTestProxy.js +++ b/test/core/ModelTestProxy.js @@ -1,3 +1,11 @@ +// +// ModelTestProxy.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {Proxy} from "../../src/index.js" /** diff --git a/test/core/ViewTest.js b/test/core/ViewTest.js index 5b91309..e05b63e 100644 --- a/test/core/ViewTest.js +++ b/test/core/ViewTest.js @@ -1,3 +1,11 @@ +// +// ViewTest.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import chai from "chai" import {View, Notification, Observer, Mediator} from "../../src/index.js"; import {ViewTestMediator} from "./ViewTestMediator.js"; @@ -84,8 +92,11 @@ describe("ViewTest", () => { chai.assert.isTrue(mediator !== undefined, "ViewTestMediator is not null"); }); + /** + * Tests the hasMediator Method + */ it("testHasMediator", () => { - // register a Mediator + // Get the Multiton View instance let view = View.getInstance("ViewTestKey4", key => new View(key)); // Create and register the test mediator @@ -180,6 +191,8 @@ describe("ViewTest", () => { // Remove the Mediator view.removeMediator(ViewTestMediator.NAME); + + chai.assert.isTrue(view.retrieveMediator(ViewTestMediator.NAME) == null, "view.retrieveMediator(ViewTestMediator.NAME) == null"); }); /** @@ -199,11 +212,11 @@ describe("ViewTest", () => { view.registerMediator(new ViewTestMediator2(viewTest)); // test that notifications work - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE1)) - chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.notes.NOTE1, "Expecting lastNotification === NOTE1"); + view.notifyObservers(new Notification(ViewTestNote.NOTE1)) + chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.NOTE1, "Expecting lastNotification === NOTE1"); - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE2)); - chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.notes.NOTE2); + view.notifyObservers(new Notification(ViewTestNote.NOTE2)); + chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.NOTE2); // Remove the Mediator view.removeMediator(ViewTestMediator2.NAME); @@ -216,13 +229,18 @@ describe("ViewTest", () => { // on this component, and ViewTestMediator) viewTest.lastNotification = null; - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE1)) - chai.assert.isTrue(viewTest.lastNotification !== ViewTestNote.notes.NOTE1, "Expecting lastNotification === NOTE1"); + view.notifyObservers(new Notification(ViewTestNote.NOTE1)) + chai.assert.isTrue(viewTest.lastNotification !== ViewTestNote.NOTE1, "Expecting lastNotification === NOTE1"); - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE2)) - chai.assert.isTrue(viewTest.lastNotification !== ViewTestNote.notes.NOTE2, "Expecting lastNotification === NOTE2"); + view.notifyObservers(new Notification(ViewTestNote.NOTE2)) + chai.assert.isTrue(viewTest.lastNotification !== ViewTestNote.NOTE2, "Expecting lastNotification === NOTE2"); }); + /** + * Tests registering a Mediator for 2 different notifications, removing the + * Mediator from the View, and seeing that neither notification causes the + * Mediator to be notified. Added for the fix deployed in version 1.7 + */ it("testRemoveOneOfTwoMediatorsAndSubsequentNotify", () => { let viewTest = { lastNotification: "" }; @@ -236,14 +254,14 @@ describe("ViewTest", () => { view.registerMediator(new ViewTestMediator3(viewTest)); // test that all notifications work - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE1)); - chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.notes.NOTE1, "Expecting lastNotification === NOTE1"); + view.notifyObservers(new Notification(ViewTestNote.NOTE1)); + chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.NOTE1, "Expecting lastNotification === NOTE1"); - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE2)); - chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.notes.NOTE2, "Expecting lastNotification === NOTE2"); + view.notifyObservers(new Notification(ViewTestNote.NOTE2)); + chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.NOTE2, "Expecting lastNotification === NOTE2"); - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE3)); - chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.notes.NOTE3, "Expecting lastNotification === NOTE3"); + view.notifyObservers(new Notification(ViewTestNote.NOTE3)); + chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.NOTE3, "Expecting lastNotification === NOTE3"); // Remove the Mediator that responds to 1 and 2 view.removeMediator(ViewTestMediator2.NAME); @@ -255,14 +273,14 @@ describe("ViewTest", () => { // for notifications 1 and 2, but still work for 3 viewTest.lastNotification = null; - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE1)); - chai.assert.isTrue(viewTest.lastNotification !== ViewTestNote.notes.NOTE1, "Expecting lastNotification != NOTE1"); + view.notifyObservers(new Notification(ViewTestNote.NOTE1)); + chai.assert.isTrue(viewTest.lastNotification !== ViewTestNote.NOTE1, "Expecting lastNotification != NOTE1"); - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE2)); - chai.assert.isTrue(viewTest.lastNotification !== ViewTestNote.notes.NOTE2, "Expecting lastNotification != NOTE2"); + view.notifyObservers(new Notification(ViewTestNote.NOTE2)); + chai.assert.isTrue(viewTest.lastNotification !== ViewTestNote.NOTE2, "Expecting lastNotification != NOTE2"); - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE3)); - chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.notes.NOTE3, "Expecting lastNotification === NOTE3"); + view.notifyObservers(new Notification(ViewTestNote.NOTE3)); + chai.assert.isTrue(viewTest.lastNotification === ViewTestNote.NOTE3, "Expecting lastNotification === NOTE3"); }); /** @@ -289,7 +307,7 @@ describe("ViewTest", () => { // test that the counter is only incremented once (mediator 5's response) viewTest.counter = 0; - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE5)); + view.notifyObservers(new Notification(ViewTestNote.NOTE5)); chai.assert.isTrue(viewTest.counter === 1, "Expecting counter === 1"); // Remove the Mediator @@ -300,7 +318,7 @@ describe("ViewTest", () => { // test that the counter is no longer incremented viewTest.counter = 0; - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE5)); + view.notifyObservers(new Notification(ViewTestNote.NOTE5)); chai.assert.isTrue(viewTest.counter === 0, "Expecting counter === 0"); }); @@ -339,14 +357,14 @@ describe("ViewTest", () => { // send the notification. each of the above mediators will respond by removing // themselves and incrementing the counter by 1. This should leave us with a // count of 8, since 8 mediators will respond. - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE6)); + view.notifyObservers(new Notification(ViewTestNote.NOTE6)); // verify the count is correct chai.assert.isTrue(viewTest.counter === 8, "Expecting counter === 8"); // clear the counter viewTest.counter = 0; - view.notifyObservers(new Notification(ViewTestNote.notes.NOTE6)); + view.notifyObservers(new Notification(ViewTestNote.NOTE6)); // verify the count is 0 chai.assert.isTrue(viewTest.counter === 0, "Expecting counter === 0"); }); diff --git a/test/core/ViewTestMediator.js b/test/core/ViewTestMediator.js index 0461f60..1c8177b 100644 --- a/test/core/ViewTestMediator.js +++ b/test/core/ViewTestMediator.js @@ -1,3 +1,11 @@ +// +// ViewTestMediator.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {Mediator} from "../../src/index.js"; /** diff --git a/test/core/ViewTestMediator2.js b/test/core/ViewTestMediator2.js index 1a02a59..298ee85 100644 --- a/test/core/ViewTestMediator2.js +++ b/test/core/ViewTestMediator2.js @@ -1,3 +1,11 @@ +// +// ViewTestMediator2.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {Mediator} from "../../src/index.js"; import {ViewTestNote} from "./ViewTestNote.js"; @@ -22,7 +30,7 @@ class ViewTestMediator2 extends Mediator { * @returns {[string]} */ listNotificationInterests() { - return [ViewTestNote.notes.NOTE1, ViewTestNote.notes.NOTE2]; + return [ViewTestNote.NOTE1, ViewTestNote.NOTE2]; } /** diff --git a/test/core/ViewTestMediator3.js b/test/core/ViewTestMediator3.js index 3a0daca..16ad360 100644 --- a/test/core/ViewTestMediator3.js +++ b/test/core/ViewTestMediator3.js @@ -1,3 +1,11 @@ +// +// ViewTestMediator3.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {Mediator} from "../../src/index.js"; import {ViewTestNote} from "./ViewTestNote.js"; @@ -18,7 +26,7 @@ class ViewTestMediator3 extends Mediator { listNotificationInterests() { // be sure that the mediator has some Observers created // in order to test removeMediator - return [ViewTestNote.notes.NOTE3]; + return [ViewTestNote.NOTE3]; } /** diff --git a/test/core/ViewTestMediator4.js b/test/core/ViewTestMediator4.js index 3d7543d..f2d8f4c 100644 --- a/test/core/ViewTestMediator4.js +++ b/test/core/ViewTestMediator4.js @@ -1,3 +1,11 @@ +// +// ViewTestMediator4.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {Mediator} from "../../src/index.js"; /** diff --git a/test/core/ViewTestMediator5.js b/test/core/ViewTestMediator5.js index b643f2b..003a72d 100644 --- a/test/core/ViewTestMediator5.js +++ b/test/core/ViewTestMediator5.js @@ -1,3 +1,11 @@ +// +// ViewTestMediator5.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {Mediator} from "../../src/index.js"; import {ViewTestNote} from "./ViewTestNote.js"; @@ -20,7 +28,7 @@ class ViewTestMediator5 extends Mediator { * @returns {[string]} */ listNotificationInterests() { - return [ViewTestNote.notes.NOTE5]; + return [ViewTestNote.NOTE5]; } /** diff --git a/test/core/ViewTestMediator6.js b/test/core/ViewTestMediator6.js index 0a545d9..2fa7318 100644 --- a/test/core/ViewTestMediator6.js +++ b/test/core/ViewTestMediator6.js @@ -1,3 +1,11 @@ +// +// ViewTestMediator6.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {Mediator} from "../../src/index.js"; import {ViewTestNote} from "./ViewTestNote.js"; @@ -12,7 +20,7 @@ class ViewTestMediator6 extends Mediator { } listNotificationInterests() { - return [ViewTestNote.notes.NOTE6]; + return [ViewTestNote.NOTE6]; } handleNotification(notification) { diff --git a/test/core/ViewTestNote.js b/test/core/ViewTestNote.js index a8b5ecc..afc8e76 100644 --- a/test/core/ViewTestNote.js +++ b/test/core/ViewTestNote.js @@ -1,4 +1,12 @@ -import {Notification} from "../../src/index.js"; +// +// ViewTestNote.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + +import {Notification} from "../../src/index.js" /** * @@ -6,6 +14,13 @@ import {Notification} from "../../src/index.js"; */ class ViewTestNote extends Notification { + static get NOTE1() { return "Notification1" } + static get NOTE2() { return "Notification2" } + static get NOTE3() { return "Notification3" } + static get NOTE4() { return "Notification4" } + static get NOTE5() { return "Notification5" } + static get NOTE6() { return "Notification6" } + /** * * @param {string} name @@ -13,22 +28,11 @@ class ViewTestNote extends Notification { */ constructor(name, body) { super(name, body); - - /** @type {Map} */ - ViewTestNote.notes = { - NOTE1: "Notification1", - NOTE2: "Notification2", - NOTE3: "Notification3", - NOTE4: "Notification4", - NOTE5: "Notification5", - NOTE6: "Notification6" - }; } /** * * @param {Object} body - * @static * @returns {ViewTestNote} */ static create(body) { diff --git a/test/patterns/command/MacroCommandTest.js b/test/patterns/command/MacroCommandTest.js index c42c287..1340915 100644 --- a/test/patterns/command/MacroCommandTest.js +++ b/test/patterns/command/MacroCommandTest.js @@ -1,7 +1,16 @@ +// +// MacroCommandTest.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import chai from "chai" import {Notification} from "../../../src/index.js" import {MacroCommandTestCommand} from "./MacroCommandTestCommand.js" import {MacroCommandTestVO} from "./MacroCommandTestVO.js" + /** * Test the PureMVC SimpleCommand class. * diff --git a/test/patterns/command/MacroCommandTestCommand.js b/test/patterns/command/MacroCommandTestCommand.js index 9669ed4..777ec79 100644 --- a/test/patterns/command/MacroCommandTestCommand.js +++ b/test/patterns/command/MacroCommandTestCommand.js @@ -1,6 +1,15 @@ +// +// MacroCommandTestCommand.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {MacroCommand} from "../../../src/index.js"; import {MacroCommandTestSub1Command} from "./MacroCommandTestSub1Command.js"; import {MacroCommandTestSub2Command} from "./MacroCommandTestSub2Command.js"; + /** * A MacroCommand subclass used by MacroCommandTest. * diff --git a/test/patterns/command/MacroCommandTestSub1Command.js b/test/patterns/command/MacroCommandTestSub1Command.js index 296611d..54f7121 100644 --- a/test/patterns/command/MacroCommandTestSub1Command.js +++ b/test/patterns/command/MacroCommandTestSub1Command.js @@ -1,3 +1,11 @@ +// +// MacroCommandTestSub1Command.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {SimpleCommand} from "../../../src/index.js"; /** diff --git a/test/patterns/command/MacroCommandTestSub2Command.js b/test/patterns/command/MacroCommandTestSub2Command.js index a446761..ec301f0 100644 --- a/test/patterns/command/MacroCommandTestSub2Command.js +++ b/test/patterns/command/MacroCommandTestSub2Command.js @@ -1,3 +1,11 @@ +// +// MacroCommandTestSub2Command.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {SimpleCommand} from "../../../src/index.js"; /** diff --git a/test/patterns/command/MacroCommandTestVO.js b/test/patterns/command/MacroCommandTestVO.js index a73450f..a9bea83 100644 --- a/test/patterns/command/MacroCommandTestVO.js +++ b/test/patterns/command/MacroCommandTestVO.js @@ -1,3 +1,11 @@ +// +// MacroCommandTestVO.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + /** * A utility class used by MacroCommandTest. * diff --git a/test/patterns/command/SimpleCommandTest.js b/test/patterns/command/SimpleCommandTest.js index 470d90f..5ce5623 100644 --- a/test/patterns/command/SimpleCommandTest.js +++ b/test/patterns/command/SimpleCommandTest.js @@ -1,3 +1,11 @@ +// +// SimpleCommandTest.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import chai from "chai" import {Notification} from "../../../src/index.js" import {SimpleCommandTestCommand} from "./SimpleCommandTestCommand.js"; diff --git a/test/patterns/command/SimpleCommandTestCommand.js b/test/patterns/command/SimpleCommandTestCommand.js index 6667c9e..83f93be 100644 --- a/test/patterns/command/SimpleCommandTestCommand.js +++ b/test/patterns/command/SimpleCommandTestCommand.js @@ -1,3 +1,11 @@ +// +// SimpleCommandTestCommand.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {SimpleCommand} from "../../../src/index.js"; /** diff --git a/test/patterns/command/SimpleCommandTestVO.js b/test/patterns/command/SimpleCommandTestVO.js index 3dae0d2..4119c42 100644 --- a/test/patterns/command/SimpleCommandTestVO.js +++ b/test/patterns/command/SimpleCommandTestVO.js @@ -1,3 +1,11 @@ +// +// SimpleCommandTestVO.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + /** * A utility class used by SimpleCommandTest. * diff --git a/test/patterns/facade/FacadeTest.js b/test/patterns/facade/FacadeTest.js index f806fab..a975267 100644 --- a/test/patterns/facade/FacadeTest.js +++ b/test/patterns/facade/FacadeTest.js @@ -1,3 +1,11 @@ +// +// FacadeTest.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import chai from "chai" import {Facade, Mediator, Proxy} from "../../../src/index.js"; import {FacadeTestCommand} from "./FacadeTestCommand.js"; @@ -187,7 +195,7 @@ describe("FacadeTest", () => { */ it("should testHasCommand", () => { // register the ControllerTestCommand to handle 'hasCommandTest' notes - let facade = Facade.getInstance("FacadeTestKey10", key => new Facade(key)); + let facade = Facade.getInstance("FacadeTestKey9", key => new Facade(key)); facade.registerCommand("facadeHasCommandTest", () => new FacadeTestCommand()); // test that hasCommand returns true for hasCommandTest notifications @@ -205,19 +213,19 @@ describe("FacadeTest", () => { */ it("should testHasCoreAndRemoveCore", () => { // assert that the Facade.hasCore method returns false first - chai.assert.isFalse(Facade.hasCore("FacadeTestKey11"), "Expecting facade.hasCore('FacadeTestKey11') == false"); + chai.assert.isFalse(Facade.hasCore("FacadeTestKey10"), "Expecting facade.hasCore('FacadeTestKey11') == false"); // register a Core - Facade.getInstance("FacadeTestKey11", key => new Facade(key)); + Facade.getInstance("FacadeTestKey10", key => new Facade(key)); // assert that the Facade.hasCore method returns true now that a Core is registered - chai.assert.isTrue(Facade.hasCore("FacadeTestKey11"), "Expecting facade.hasCore('FacadeTestKey11') == true"); + chai.assert.isTrue(Facade.hasCore("FacadeTestKey10"), "Expecting facade.hasCore('FacadeTestKey11') == true"); // remove the Core - Facade.removeCore("FacadeTestKey11"); + Facade.removeCore("FacadeTestKey10"); // assert that the Facade.hasCore method returns false now that the core has been removed. - chai.assert.isFalse(Facade.hasCore("FacadeTestKey11"), "Expecting facade.hasCore('FacadeTestKey11') == false"); + chai.assert.isFalse(Facade.hasCore("FacadeTestKey10"), "Expecting facade.hasCore('FacadeTestKey11') == false"); }); }); diff --git a/test/patterns/facade/FacadeTestCommand.js b/test/patterns/facade/FacadeTestCommand.js index 0e76e6c..40f9c22 100644 --- a/test/patterns/facade/FacadeTestCommand.js +++ b/test/patterns/facade/FacadeTestCommand.js @@ -1,3 +1,11 @@ +// +// FacadeTestCommand.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {SimpleCommand} from "../../../src/index.js"; /** diff --git a/test/patterns/facade/FacadeTestVO.js b/test/patterns/facade/FacadeTestVO.js index 43fb902..69ac636 100644 --- a/test/patterns/facade/FacadeTestVO.js +++ b/test/patterns/facade/FacadeTestVO.js @@ -1,3 +1,11 @@ +// +// FacadeTestVO.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + /** * A utility class used by FacadeTest. * diff --git a/test/patterns/mediator/MediatorTest.js b/test/patterns/mediator/MediatorTest.js index d6e1ff1..3b33f7e 100644 --- a/test/patterns/mediator/MediatorTest.js +++ b/test/patterns/mediator/MediatorTest.js @@ -1,3 +1,11 @@ +// +// MediatorTest.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import {Mediator} from "../../../src/index.js"; import chai from "chai" diff --git a/test/patterns/observer/NotificationTest.js b/test/patterns/observer/NotificationTest.js index 091d0f9..d8c4849 100644 --- a/test/patterns/observer/NotificationTest.js +++ b/test/patterns/observer/NotificationTest.js @@ -1,3 +1,11 @@ +// +// NotificationTest.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import chai from "chai" import {Notification} from "../../../src/index.js"; diff --git a/test/patterns/observer/NotifierTest.js b/test/patterns/observer/NotifierTest.js index cb97510..87fbfa4 100644 --- a/test/patterns/observer/NotifierTest.js +++ b/test/patterns/observer/NotifierTest.js @@ -1,3 +1,11 @@ +// +// NotifierTest.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import chai from "chai" import {Facade, Notifier} from "../../../src/index.js"; import {FacadeTestVO} from "../facade/FacadeTestVO.js"; diff --git a/test/patterns/observer/ObserverTest.js b/test/patterns/observer/ObserverTest.js index b504a6f..89cb966 100644 --- a/test/patterns/observer/ObserverTest.js +++ b/test/patterns/observer/ObserverTest.js @@ -1,3 +1,11 @@ +// +// ObserverTest.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import chai from "chai" import {Notification, Observer} from "../../../src/index.js"; @@ -79,9 +87,7 @@ describe("ObserverTest", () => { it("should testCompareNotifyContext", () => { // Create observer passing in notification method and context let obj = { - observerTestMethod: (notification) => { - - } + observerTestMethod: (notification) => {} }; let observer = new Observer(obj.observerTestMethod, obj); diff --git a/test/patterns/proxy/ProxyTest.js b/test/patterns/proxy/ProxyTest.js index 12d814e..bf4928f 100644 --- a/test/patterns/proxy/ProxyTest.js +++ b/test/patterns/proxy/ProxyTest.js @@ -1,3 +1,11 @@ +// +// ProxyTest.js +// PureMVC JavaScript Multicore +// +// Copyright(c) 2023 Saad Shams +// Your reuse is governed by the BSD-3-Clause License +// + import chai from "chai" import {Proxy} from "../../../src/index.js"; @@ -25,6 +33,9 @@ describe("ProxyTest", () => { chai.assert.isTrue(proxy2.proxyName === Proxy.NAME, "Expecting proxy.getProxyName() == 'Proxy'"); }); + /** + * Tests setting and getting the data using Proxy class accessor methods. + */ it("should testDataAccessors", () => { // Create a new Proxy and use accessors to set the data let proxy = new Proxy("colors", null); @@ -38,6 +49,9 @@ describe("ProxyTest", () => { chai.assert.equal(data[2], "blue", "Expecting data[2] == 'blue'"); }); + /** + * Tests setting the name and body using the Notification class Constructor. + */ it("should testConstructor", () => { // Create a new Proxy using the Constructor to set the name and data let proxy = new Proxy("colors", ["red", "green", "blue"]);