diff --git a/.eslintrc.json b/.eslintrc.json index 313b4cf..0e9571f 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -2,8 +2,7 @@ "env": { "node": false, "es6": true, - "browser": true, - "commonjs": true + "browser": true }, "extends": "eslint:recommended", "overrides": [], diff --git a/demo/.gitignore b/demo/.gitignore index a02cf7c..53cf0c6 100644 --- a/demo/.gitignore +++ b/demo/.gitignore @@ -1 +1,2 @@ amp-client.js +amp-client.embed.js diff --git a/demo/index.html b/demo/index.html index 2f699e2..be98979 100644 --- a/demo/index.html +++ b/demo/index.html @@ -97,14 +97,14 @@

Banners:

-

First (added manually, single):

+

Manually added single banner:

-

Second (added manually, random):

+

Manually added random banner:

-

Third (added via data-* attributes, multiple):

+

Multiple banner added via data attributes:

+ class="slider--splide"> +
+
+ +
+

Embed banner:

+
+
diff --git a/index.js b/index.js deleted file mode 100644 index debde7f..0000000 --- a/index.js +++ /dev/null @@ -1,8 +0,0 @@ -'use strict'; - -const AMPClientFactory = require('./src/client/standard/client-factory'); -const EmbedAMPClientFactory = require('./src/client/embed/client-factory'); - -module.exports = AMPClientFactory; -module.exports.AMPClientFactory = AMPClientFactory; -module.exports.EmbedAMPClientFactory = EmbedAMPClientFactory; diff --git a/index.mjs b/index.mjs new file mode 100644 index 0000000..23eb520 --- /dev/null +++ b/index.mjs @@ -0,0 +1,3 @@ +export { ClientFactory as default } from './src/client/standard/client-factory.mjs'; +export { ClientFactory as AMPClientFactory } from './src/client/standard/client-factory.mjs'; +export { ClientFactory as EmbedAMPClientFactory } from './src/client/embed/client-factory.mjs'; diff --git a/package-lock.json b/package-lock.json index 68fda8b..66f6405 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,14 +13,14 @@ "query-string": "^8.1.0" }, "devDependencies": { - "@babel/core": "^7.22.8", + "@babel/core": "^7.23.5", "@babel/polyfill": "^7.12.1", - "@babel/preset-env": "^7.22.7", + "@babel/preset-env": "^7.23.5", "babel-loader": "^8.3.0", - "eslint": "^8.44.0", + "eslint": "^8.55.0", "path": "^0.12.7", "terser-webpack-plugin": "^5.3.9", - "webpack": "^5.88.1", + "webpack": "^5.89.0", "webpack-cli": "^5.1.4", "webpack-dev-server": "^4.15.1" } @@ -48,47 +48,48 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.22.5" + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/compat-data": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", - "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.8.tgz", - "integrity": "sha512-75+KxFB4CZqYRXjx4NlR4J7yGvKumBuZTmV4NV6v09dVXXkuYVYLT68N6HCzLvfJ+fWCxQsntNzKwwIXL4bHnw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.5.tgz", + "integrity": "sha512-Cwc2XjUrG4ilcfOw4wBAK+enbdgwAcAJCfGUItPBKR7Mjw4aEfAFYrLxeRp4jWgtNIKn3n2AlBOfwwafl+42/g==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.8", - "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.5", + "@babel/parser": "^7.23.5", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2" + "json5": "^2.2.3", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -99,12 +100,12 @@ } }, "node_modules/@babel/generator": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz", - "integrity": "sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.5.tgz", + "integrity": "sha512-BPssCHrBD+0YrxviOa3QzpqwhNIXKEtOa2jQrm4FlmkC2apYgRnQcmPWiGZDlGxiNtltnUFolMe8497Esry+jA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5", + "@babel/types": "^7.23.5", "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "jsesc": "^2.5.1" @@ -126,51 +127,48 @@ } }, "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.5.tgz", - "integrity": "sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz", + "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", - "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz", + "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-validator-option": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.15", "browserslist": "^4.21.9", - "lru-cache": "^5.1.1" + "lru-cache": "^5.1.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.6.tgz", - "integrity": "sha512-iwdzgtSiBxF6ni6mzVnZCF3xt5qE6cEA0J7nFt8QOAWZ0zjCFceEgpn3vtb2V7WFR6QzP2jmIFOHMTRo7eNJjQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.5.tgz", + "integrity": "sha512-QELlRWxSpgdwdJzSJn4WAhKC+hvw/AtHbbrIoncKHkhKKR/luAlKkgBDcri1EzWAo8f8VvYVryEHN4tax/V67A==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-member-expression-to-functions": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@nicolo-ribaudo/semver-v6": "^6.3.3" + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -180,14 +178,14 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.6.tgz", - "integrity": "sha512-nBookhLKxAWo/TUCmhnaEJyLz2dekjQvv5SRpE9epWQBcpedWLKt8aZdsuT9XV5ovzR3fENLjRXVT0GsSlGGhA==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz", + "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "regexpu-core": "^5.3.1" + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -197,9 +195,9 @@ } }, "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.1.tgz", - "integrity": "sha512-kX4oXixDxG197yhX+J3Wp+NpL2wuCFjWQAr6yX2jtCnflK9ulMI51ULFGIrWiX1jGfvAxdHp+XQCcP2bZGPs9A==", + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz", + "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==", "dev": true, "dependencies": { "@babel/helper-compilation-targets": "^7.22.6", @@ -209,26 +207,26 @@ "resolve": "^1.14.2" }, "peerDependencies": { - "@babel/core": "^7.4.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" @@ -247,46 +245,46 @@ } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", - "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz", + "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.23.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", "dev": true, "dependencies": { - "@babel/types": "^7.22.5" + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-optimise-call-expression": { @@ -311,15 +309,14 @@ } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.5.tgz", - "integrity": "sha512-cU0Sq1Rf4Z55fgz7haOakIyM7+x/uCFwXpLPaeRzfoUtAEAuUZjZvFPjL/rk5rW693dIgn2hng1W7xbT7lWT4g==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz", + "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-wrap-function": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-wrap-function": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -329,20 +326,20 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.5.tgz", - "integrity": "sha512-aLdNM5I3kdI/V9xGNyKSF3X/gTyMUBohTZ+/3QdQKAA9vxIiy12E+8E2HoOP1/DjeqU+g6as35QHJNMDDYpuCg==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz", + "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-member-expression-to-functions": "^7.22.5", - "@babel/helper-optimise-call-expression": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-member-expression-to-functions": "^7.22.15", + "@babel/helper-optimise-call-expression": "^7.22.5" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" } }, "node_modules/@babel/helper-simple-access": { @@ -382,69 +379,68 @@ } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.5.tgz", - "integrity": "sha512-bYqLIBSEshYcYQyfks8ewYA8S30yaGSeRslcvKMvoUk6HHPySbxHq9YRi6ghhzEU+yhQv9bP/jXnygkStOcqZw==", + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz", + "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==", "dev": true, "dependencies": { "@babel/helper-function-name": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/types": "^7.22.19" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.5.tgz", + "integrity": "sha512-oO7us8FzTEsG3U6ag9MfdF1iA/7Z6dz+MtFhifZk8C8o453rGJFFWUP1t+ULM9TUIAzC9uxXEiXjOiVMyd7QPg==", "dev": true, "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.5", + "@babel/types": "^7.23.5" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", "js-tokens": "^4.0.0" }, "engines": { @@ -452,9 +448,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.7.tgz", - "integrity": "sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -464,9 +460,9 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", - "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz", + "integrity": "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -479,14 +475,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", - "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz", + "integrity": "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.5" + "@babel/plugin-transform-optional-chaining": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -495,29 +491,29 @@ "@babel/core": "^7.13.0" } }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz", + "integrity": "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==", "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-plugin-utils": "^7.22.5" + }, "engines": { "node": ">=6.9.0" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0" } }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", "dev": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, "engines": { - "node": ">=4" + "node": ">=6.9.0" }, "peerDependencies": { "@babel/core": "^7.0.0-0" @@ -587,9 +583,9 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", - "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz", + "integrity": "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -602,9 +598,9 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", - "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz", + "integrity": "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -759,9 +755,9 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", - "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz", + "integrity": "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -774,14 +770,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.7.tgz", - "integrity": "sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.4.tgz", + "integrity": "sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==", "dev": true, "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.20", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.20", "@babel/plugin-syntax-async-generators": "^7.8.4" }, "engines": { @@ -792,14 +788,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", - "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz", + "integrity": "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==", "dev": true, "dependencies": { - "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-module-imports": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-remap-async-to-generator": "^7.22.5" + "@babel/helper-remap-async-to-generator": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -809,9 +805,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", - "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz", + "integrity": "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -824,9 +820,9 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.5.tgz", - "integrity": "sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.4.tgz", + "integrity": "sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -839,12 +835,12 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", - "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz", + "integrity": "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -855,12 +851,12 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", - "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.4.tgz", + "integrity": "sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-class-static-block": "^7.14.5" }, @@ -872,18 +868,18 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", - "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.5.tgz", + "integrity": "sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-optimise-call-expression": "^7.22.5", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.20", "@babel/helper-split-export-declaration": "^7.22.6", "globals": "^11.1.0" }, @@ -895,13 +891,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", - "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz", + "integrity": "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/template": "^7.22.5" + "@babel/template": "^7.22.15" }, "engines": { "node": ">=6.9.0" @@ -911,9 +907,9 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.5.tgz", - "integrity": "sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz", + "integrity": "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -926,12 +922,12 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", - "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz", + "integrity": "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -942,9 +938,9 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", - "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz", + "integrity": "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -957,9 +953,9 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", - "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.4.tgz", + "integrity": "sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -973,12 +969,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", - "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz", + "integrity": "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==", "dev": true, "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -989,9 +985,9 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", - "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.4.tgz", + "integrity": "sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1005,9 +1001,9 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", - "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz", + "integrity": "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1020,13 +1016,13 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", - "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz", + "integrity": "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==", "dev": true, "dependencies": { - "@babel/helper-compilation-targets": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.15", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1037,9 +1033,9 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", - "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.4.tgz", + "integrity": "sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1053,9 +1049,9 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", - "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz", + "integrity": "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1068,9 +1064,9 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", - "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.4.tgz", + "integrity": "sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1084,9 +1080,9 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", - "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz", + "integrity": "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1099,12 +1095,12 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", - "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz", + "integrity": "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1115,12 +1111,12 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", - "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz", + "integrity": "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", "@babel/helper-simple-access": "^7.22.5" }, @@ -1132,15 +1128,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", - "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz", + "integrity": "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==", "dev": true, "dependencies": { "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-validator-identifier": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1150,12 +1146,12 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", - "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz", + "integrity": "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==", "dev": true, "dependencies": { - "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-module-transforms": "^7.23.3", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1182,9 +1178,9 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", - "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz", + "integrity": "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1197,9 +1193,9 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", - "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.4.tgz", + "integrity": "sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1213,9 +1209,9 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", - "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.4.tgz", + "integrity": "sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1229,16 +1225,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", - "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", + "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.5", + "@babel/compat-data": "^7.23.3", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.22.5" + "@babel/plugin-transform-parameters": "^7.23.3" }, "engines": { "node": ">=6.9.0" @@ -1248,13 +1244,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", - "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz", + "integrity": "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-replace-supers": "^7.22.5" + "@babel/helper-replace-supers": "^7.22.20" }, "engines": { "node": ">=6.9.0" @@ -1264,9 +1260,9 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", - "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.4.tgz", + "integrity": "sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1280,9 +1276,9 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.6.tgz", - "integrity": "sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.4.tgz", + "integrity": "sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1297,9 +1293,9 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", - "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz", + "integrity": "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1312,12 +1308,12 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", - "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz", + "integrity": "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==", "dev": true, "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1328,13 +1324,13 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", - "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.4.tgz", + "integrity": "sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", - "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", "@babel/plugin-syntax-private-property-in-object": "^7.14.5" }, @@ -1346,9 +1342,9 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", - "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz", + "integrity": "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1361,13 +1357,13 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.5.tgz", - "integrity": "sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz", + "integrity": "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", - "regenerator-transform": "^0.15.1" + "regenerator-transform": "^0.15.2" }, "engines": { "node": ">=6.9.0" @@ -1377,9 +1373,9 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", - "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz", + "integrity": "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1392,9 +1388,9 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", - "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz", + "integrity": "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1407,9 +1403,9 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", - "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz", + "integrity": "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5", @@ -1423,9 +1419,9 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", - "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz", + "integrity": "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1438,9 +1434,9 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", - "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz", + "integrity": "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1453,9 +1449,9 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", - "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz", + "integrity": "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1468,9 +1464,9 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.5.tgz", - "integrity": "sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz", + "integrity": "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.22.5" @@ -1483,12 +1479,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", - "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz", + "integrity": "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1499,12 +1495,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", - "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz", + "integrity": "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1515,12 +1511,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", - "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz", + "integrity": "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==", "dev": true, "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-create-regexp-features-plugin": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5" }, "engines": { @@ -1542,25 +1538,26 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.22.7", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.7.tgz", - "integrity": "sha512-1whfDtW+CzhETuzYXfcgZAh8/GFMeEbz0V5dVgya8YeJyCU6Y/P2Gnx4Qb3MylK68Zu9UiwUvbPMPTpFAOJ+sQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.5.tgz", + "integrity": "sha512-0d/uxVD6tFGWXGDSfyMD1p2otoaKmu6+GD+NfAx0tMaH+dxORnp7T9TaVQ6mKyya7iBtCIVxHjWT7MuzzM9z+A==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-compilation-targets": "^7.22.6", + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.22.15", "@babel/helper-plugin-utils": "^7.22.5", - "@babel/helper-validator-option": "^7.22.5", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/helper-validator-option": "^7.23.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.23.3", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.23.3", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.23.3", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-class-properties": "^7.12.13", "@babel/plugin-syntax-class-static-block": "^7.14.5", "@babel/plugin-syntax-dynamic-import": "^7.8.3", "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.22.5", - "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-assertions": "^7.23.3", + "@babel/plugin-syntax-import-attributes": "^7.23.3", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", @@ -1572,61 +1569,60 @@ "@babel/plugin-syntax-private-property-in-object": "^7.14.5", "@babel/plugin-syntax-top-level-await": "^7.14.5", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.22.5", - "@babel/plugin-transform-async-generator-functions": "^7.22.7", - "@babel/plugin-transform-async-to-generator": "^7.22.5", - "@babel/plugin-transform-block-scoped-functions": "^7.22.5", - "@babel/plugin-transform-block-scoping": "^7.22.5", - "@babel/plugin-transform-class-properties": "^7.22.5", - "@babel/plugin-transform-class-static-block": "^7.22.5", - "@babel/plugin-transform-classes": "^7.22.6", - "@babel/plugin-transform-computed-properties": "^7.22.5", - "@babel/plugin-transform-destructuring": "^7.22.5", - "@babel/plugin-transform-dotall-regex": "^7.22.5", - "@babel/plugin-transform-duplicate-keys": "^7.22.5", - "@babel/plugin-transform-dynamic-import": "^7.22.5", - "@babel/plugin-transform-exponentiation-operator": "^7.22.5", - "@babel/plugin-transform-export-namespace-from": "^7.22.5", - "@babel/plugin-transform-for-of": "^7.22.5", - "@babel/plugin-transform-function-name": "^7.22.5", - "@babel/plugin-transform-json-strings": "^7.22.5", - "@babel/plugin-transform-literals": "^7.22.5", - "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", - "@babel/plugin-transform-member-expression-literals": "^7.22.5", - "@babel/plugin-transform-modules-amd": "^7.22.5", - "@babel/plugin-transform-modules-commonjs": "^7.22.5", - "@babel/plugin-transform-modules-systemjs": "^7.22.5", - "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-arrow-functions": "^7.23.3", + "@babel/plugin-transform-async-generator-functions": "^7.23.4", + "@babel/plugin-transform-async-to-generator": "^7.23.3", + "@babel/plugin-transform-block-scoped-functions": "^7.23.3", + "@babel/plugin-transform-block-scoping": "^7.23.4", + "@babel/plugin-transform-class-properties": "^7.23.3", + "@babel/plugin-transform-class-static-block": "^7.23.4", + "@babel/plugin-transform-classes": "^7.23.5", + "@babel/plugin-transform-computed-properties": "^7.23.3", + "@babel/plugin-transform-destructuring": "^7.23.3", + "@babel/plugin-transform-dotall-regex": "^7.23.3", + "@babel/plugin-transform-duplicate-keys": "^7.23.3", + "@babel/plugin-transform-dynamic-import": "^7.23.4", + "@babel/plugin-transform-exponentiation-operator": "^7.23.3", + "@babel/plugin-transform-export-namespace-from": "^7.23.4", + "@babel/plugin-transform-for-of": "^7.23.3", + "@babel/plugin-transform-function-name": "^7.23.3", + "@babel/plugin-transform-json-strings": "^7.23.4", + "@babel/plugin-transform-literals": "^7.23.3", + "@babel/plugin-transform-logical-assignment-operators": "^7.23.4", + "@babel/plugin-transform-member-expression-literals": "^7.23.3", + "@babel/plugin-transform-modules-amd": "^7.23.3", + "@babel/plugin-transform-modules-commonjs": "^7.23.3", + "@babel/plugin-transform-modules-systemjs": "^7.23.3", + "@babel/plugin-transform-modules-umd": "^7.23.3", "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", - "@babel/plugin-transform-new-target": "^7.22.5", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", - "@babel/plugin-transform-numeric-separator": "^7.22.5", - "@babel/plugin-transform-object-rest-spread": "^7.22.5", - "@babel/plugin-transform-object-super": "^7.22.5", - "@babel/plugin-transform-optional-catch-binding": "^7.22.5", - "@babel/plugin-transform-optional-chaining": "^7.22.6", - "@babel/plugin-transform-parameters": "^7.22.5", - "@babel/plugin-transform-private-methods": "^7.22.5", - "@babel/plugin-transform-private-property-in-object": "^7.22.5", - "@babel/plugin-transform-property-literals": "^7.22.5", - "@babel/plugin-transform-regenerator": "^7.22.5", - "@babel/plugin-transform-reserved-words": "^7.22.5", - "@babel/plugin-transform-shorthand-properties": "^7.22.5", - "@babel/plugin-transform-spread": "^7.22.5", - "@babel/plugin-transform-sticky-regex": "^7.22.5", - "@babel/plugin-transform-template-literals": "^7.22.5", - "@babel/plugin-transform-typeof-symbol": "^7.22.5", - "@babel/plugin-transform-unicode-escapes": "^7.22.5", - "@babel/plugin-transform-unicode-property-regex": "^7.22.5", - "@babel/plugin-transform-unicode-regex": "^7.22.5", - "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "babel-plugin-polyfill-corejs2": "^0.4.4", - "babel-plugin-polyfill-corejs3": "^0.8.2", - "babel-plugin-polyfill-regenerator": "^0.5.1", - "core-js-compat": "^3.31.0" + "@babel/plugin-transform-new-target": "^7.23.3", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.23.4", + "@babel/plugin-transform-numeric-separator": "^7.23.4", + "@babel/plugin-transform-object-rest-spread": "^7.23.4", + "@babel/plugin-transform-object-super": "^7.23.3", + "@babel/plugin-transform-optional-catch-binding": "^7.23.4", + "@babel/plugin-transform-optional-chaining": "^7.23.4", + "@babel/plugin-transform-parameters": "^7.23.3", + "@babel/plugin-transform-private-methods": "^7.23.3", + "@babel/plugin-transform-private-property-in-object": "^7.23.4", + "@babel/plugin-transform-property-literals": "^7.23.3", + "@babel/plugin-transform-regenerator": "^7.23.3", + "@babel/plugin-transform-reserved-words": "^7.23.3", + "@babel/plugin-transform-shorthand-properties": "^7.23.3", + "@babel/plugin-transform-spread": "^7.23.3", + "@babel/plugin-transform-sticky-regex": "^7.23.3", + "@babel/plugin-transform-template-literals": "^7.23.3", + "@babel/plugin-transform-typeof-symbol": "^7.23.3", + "@babel/plugin-transform-unicode-escapes": "^7.23.3", + "@babel/plugin-transform-unicode-property-regex": "^7.23.3", + "@babel/plugin-transform-unicode-regex": "^7.23.3", + "@babel/plugin-transform-unicode-sets-regex": "^7.23.3", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.6", + "babel-plugin-polyfill-corejs3": "^0.8.5", + "babel-plugin-polyfill-regenerator": "^0.5.3", + "core-js-compat": "^3.31.0", + "semver": "^6.3.1" }, "engines": { "node": ">=6.9.0" @@ -1636,19 +1632,17 @@ } }, "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", + "version": "0.1.6-no-external-plugins", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", + "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==", "dev": true, "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", "@babel/types": "^7.4.4", "esutils": "^2.0.2" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" } }, "node_modules/@babel/regjsgen": { @@ -1658,45 +1652,51 @@ "dev": true }, "node_modules/@babel/runtime": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.6.tgz", - "integrity": "sha512-wDb5pWm4WDdF6LFUde3Jl8WzPA+3ZbxYqkC6xAXuD3irdEHN1k0NfTRrJD8ZD378SJ61miMLCqIOXYhd8x+AJQ==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz", + "integrity": "sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==", "dev": true, "dependencies": { - "regenerator-runtime": "^0.13.11" + "regenerator-runtime": "^0.14.0" }, "engines": { "node": ">=6.9.0" } }, + "node_modules/@babel/runtime/node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.22.8", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.8.tgz", - "integrity": "sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.5.tgz", + "integrity": "sha512-czx7Xy5a6sapWWRx61m1Ke1Ra4vczu1mCTtJam5zRTBOonfdJ+S/B6HYmGYu3fJtr8GGET3si6IhgWVBhJ/m8w==", "dev": true, "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.7", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.5", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.7", - "@babel/types": "^7.22.5", + "@babel/parser": "^7.23.5", + "@babel/types": "^7.23.5", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -1705,13 +1705,13 @@ } }, "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.5.tgz", + "integrity": "sha512-ON5kSOJwVO6xXVRTvOI0eOnWe7VdUcIpsovGo9U/Br4Ie4UVFQTboO2cYnDhAGU6Fp+UxSiT+pMft0SMHfuq6w==", "dev": true, "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", "to-fast-properties": "^2.0.0" }, "engines": { @@ -1743,18 +1743,18 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz", - "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.0.tgz", - "integrity": "sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", @@ -1775,9 +1775,9 @@ } }, "node_modules/@eslint/eslintrc/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -1790,21 +1790,21 @@ } }, "node_modules/@eslint/js": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.44.0.tgz", - "integrity": "sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", + "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz", - "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==", + "version": "0.11.13", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", + "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", + "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", "minimatch": "^3.0.5" }, @@ -1826,9 +1826,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", + "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", "dev": true }, "node_modules/@jridgewell/gen-mapping": { @@ -1846,9 +1846,9 @@ } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", "dev": true, "engines": { "node": ">=6.0.0" @@ -1880,36 +1880,21 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", "dev": true }, - "node_modules/@nicolo-ribaudo/semver-v6": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", - "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1946,9 +1931,9 @@ } }, "node_modules/@types/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", "dev": true, "dependencies": { "@types/connect": "*", @@ -1956,27 +1941,27 @@ } }, "node_modules/@types/bonjour": { - "version": "3.5.10", - "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", - "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect": { - "version": "3.4.35", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", - "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/connect-history-api-fallback": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", - "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", "dev": true, "dependencies": { "@types/express-serve-static-core": "*", @@ -1984,9 +1969,9 @@ } }, "node_modules/@types/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-gsF+c/0XOguWgaOgvFs+xnnRqt9GwgTvIks36WpE6ueeI4KCEHHd8K/CKHqhOqrJKsYH8m27kRzQEvWXAwXUTw==", + "version": "8.44.8", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.8.tgz", + "integrity": "sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==", "dev": true, "dependencies": { "@types/estree": "*", @@ -1994,9 +1979,9 @@ } }, "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "dependencies": { "@types/eslint": "*", @@ -2004,15 +1989,15 @@ } }, "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, "node_modules/@types/express": { - "version": "4.17.17", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", - "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", "dev": true, "dependencies": { "@types/body-parser": "*", @@ -2022,9 +2007,9 @@ } }, "node_modules/@types/express-serve-static-core": { - "version": "4.17.35", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", - "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "version": "4.17.41", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz", + "integrity": "sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA==", "dev": true, "dependencies": { "@types/node": "*", @@ -2034,48 +2019,60 @@ } }, "node_modules/@types/http-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", "dev": true }, "node_modules/@types/http-proxy": { - "version": "1.17.11", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", - "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/json-schema": { - "version": "7.0.12", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz", - "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/mime": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", - "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", "dev": true }, "node_modules/@types/node": { - "version": "20.4.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.4.1.tgz", - "integrity": "sha512-JIzsAvJeA/5iY6Y/OxZbv1lUcc8dNSE77lb2gnBH+/PJ3lFR1Ccvgwl5JWnHAkNHcRsT0TbpVOsiMKZ1F/yyJg==", - "dev": true + "version": "20.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", + "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.10.tgz", + "integrity": "sha512-y6PJDYN4xYBxwd22l+OVH35N+1fCYWiuC3aiP2SlXVE6Lo7SS+rSx9r89hLxrP4pn6n1lBGhHJ12pj3F3Mpttw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } }, "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "version": "6.9.10", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz", + "integrity": "sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw==", "dev": true }, "node_modules/@types/range-parser": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", - "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", "dev": true }, "node_modules/@types/retry": { @@ -2085,9 +2082,9 @@ "dev": true }, "node_modules/@types/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", - "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", "dev": true, "dependencies": { "@types/mime": "^1", @@ -2095,18 +2092,18 @@ } }, "node_modules/@types/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", "dev": true, "dependencies": { "@types/express": "*" } }, "node_modules/@types/serve-static": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", - "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", + "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", "dev": true, "dependencies": { "@types/http-errors": "*", @@ -2115,23 +2112,29 @@ } }, "node_modules/@types/sockjs": { - "version": "0.3.33", - "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", - "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "version": "0.3.36", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", "dev": true, "dependencies": { "@types/node": "*" } }, "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dev": true, "dependencies": { "@types/node": "*" } }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, "node_modules/@webassemblyjs/ast": { "version": "1.11.6", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", @@ -2348,9 +2351,9 @@ } }, "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "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" @@ -2519,42 +2522,42 @@ } }, "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.4.tgz", - "integrity": "sha512-9WeK9snM1BfxB38goUEv2FLnA6ja07UMfazFHzCXUb3NyDZAwfXvQiURQ6guTTMeHcOsdknULm1PDhs4uWtKyA==", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz", + "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==", "dev": true, "dependencies": { "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.1", - "@nicolo-ribaudo/semver-v6": "^6.3.3" + "@babel/helper-define-polyfill-provider": "^0.4.3", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.2.tgz", - "integrity": "sha512-Cid+Jv1BrY9ReW9lIfNlNpsI53N+FN7gE+f73zLAUbr9C52W4gKLWSByx47pfDJsEysojKArqOtOKZSVIIUTuQ==", + "version": "0.8.6", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz", + "integrity": "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1", - "core-js-compat": "^3.31.0" + "@babel/helper-define-polyfill-provider": "^0.4.3", + "core-js-compat": "^3.33.1" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.1.tgz", - "integrity": "sha512-L8OyySuI6OSQ5hFy9O+7zFjyr4WhAfRjLIOkhQGYl+emwJkd/S4XXT1JpfrgR1jrQ1NcGiOh+yAdGlF8pnC3Jw==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz", + "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==", "dev": true, "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.4.1" + "@babel/helper-define-polyfill-provider": "^0.4.3" }, "peerDependencies": { - "@babel/core": "^7.0.0-0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/balanced-match": { @@ -2670,9 +2673,9 @@ } }, "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", "dev": true, "funding": [ { @@ -2689,10 +2692,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" }, "bin": { "browserslist": "cli.js" @@ -2717,13 +2720,14 @@ } }, "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2739,9 +2743,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001515", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001515.tgz", - "integrity": "sha512-eEFDwUOZbE24sb+Ecsx3+OvNETqjWIdabMy52oOkIgcUtAsQifjUG9q4U9dgTHJM2mfk4uEPxc0+xuFdJ629QA==", + "version": "1.0.30001566", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001566.tgz", + "integrity": "sha512-ggIhCsTxmITBAMmK8yZjEhCO5/47jKXPu6Dha/wuCS4JePVL+3uiDEBuhu2aIoT+bqTOR8L76Ip1ARL9xYsEJA==", "dev": true, "funding": [ { @@ -2799,6 +2803,18 @@ "fsevents": "~2.3.2" } }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -2943,9 +2959,9 @@ } }, "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, "node_modules/cookie": { @@ -2972,12 +2988,12 @@ "hasInstallScript": true }, "node_modules/core-js-compat": { - "version": "3.31.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.31.1.tgz", - "integrity": "sha512-wIDWd2s5/5aJSdpOJHfSibxNODxoGoWOBHt8JSPB41NOE94M7kuTPZCYLOlTtuoXTsBPKobpJ6T+y0SSy5L9SA==", + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.34.0.tgz", + "integrity": "sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==", "dev": true, "dependencies": { - "browserslist": "^4.21.9" + "browserslist": "^4.22.2" }, "funding": { "type": "opencollective", @@ -3047,6 +3063,20 @@ "node": ">= 10" } }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/define-lazy-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", @@ -3088,9 +3118,9 @@ "dev": true }, "node_modules/dns-packet": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", - "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", "dev": true, "dependencies": { "@leichtgewicht/ip-codec": "^2.0.1" @@ -3118,9 +3148,9 @@ "dev": true }, "node_modules/electron-to-chromium": { - "version": "1.4.457", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.457.tgz", - "integrity": "sha512-/g3UyNDmDd6ebeWapmAoiyy+Sy2HyJ+/X8KyvNeHfKRFfHaA2W8oF5fxD5F3tjBDcjpwo0iek6YNgxNXDBoEtA==", + "version": "1.4.608", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.608.tgz", + "integrity": "sha512-J2f/3iIIm3Mo0npneITZ2UPe4B1bg8fTNrFjD8715F/k1BvbviRuqYGkET1PgprrczXYTHFvotbBOmUp6KE0uA==", "dev": true }, "node_modules/emojis-list": { @@ -3155,9 +3185,9 @@ } }, "node_modules/envinfo": { - "version": "7.10.0", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.10.0.tgz", - "integrity": "sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==", + "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" @@ -3167,9 +3197,9 @@ } }, "node_modules/es-module-lexer": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz", - "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", "dev": true }, "node_modules/escalade": { @@ -3197,27 +3227,28 @@ } }, "node_modules/eslint": { - "version": "8.44.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.44.0.tgz", - "integrity": "sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==", + "version": "8.55.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", + "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.4.0", - "@eslint/eslintrc": "^2.1.0", - "@eslint/js": "8.44.0", - "@humanwhocodes/config-array": "^0.11.10", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.55.0", + "@humanwhocodes/config-array": "^0.11.13", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", - "ajv": "^6.10.0", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.0", - "eslint-visitor-keys": "^3.4.1", - "espree": "^9.6.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3227,7 +3258,6 @@ "globals": "^13.19.0", "graphemer": "^1.4.0", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", @@ -3239,7 +3269,6 @@ "natural-compare": "^1.4.0", "optionator": "^0.9.3", "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", "text-table": "^0.2.0" }, "bin": { @@ -3253,22 +3282,25 @@ } }, "node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "estraverse": "^5.2.0" }, "engines": { - "node": ">=8.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz", - "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -3338,63 +3370,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz", - "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/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/eslint/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/eslint/node_modules/globals": { - "version": "13.20.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", - "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, "dependencies": { "type-fest": "^0.20.2" @@ -3409,55 +3388,10 @@ "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/eslint/node_modules/supports-color": { @@ -3473,9 +3407,9 @@ } }, "node_modules/espree": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.0.tgz", - "integrity": "sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "dependencies": { "acorn": "^8.9.0", @@ -3501,15 +3435,6 @@ "node": ">=0.10" } }, - "node_modules/esquery/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/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", @@ -3522,7 +3447,7 @@ "node": ">=4.0" } }, - "node_modules/esrecurse/node_modules/estraverse": { + "node_modules/estraverse": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", @@ -3531,15 +3456,6 @@ "node": ">=4.0" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -3793,25 +3709,38 @@ } }, "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==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "dependencies": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, "dependencies": { - "flatted": "^3.1.0", + "flatted": "^3.2.9", + "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { @@ -3819,15 +3748,15 @@ } }, "node_modules/flatted": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", - "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", "dev": true, "funding": [ { @@ -3863,9 +3792,9 @@ } }, "node_modules/fs-monkey": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", - "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.5.tgz", + "integrity": "sha512-8uMbBjrhzW76TYgEV27Y5E//W2f/lTFmx78P2w19FZSxarhI/798APGQyuGCwmkNxgwGRhrLfvWyLBvNtuOmew==", "dev": true }, "node_modules/fs.realpath": { @@ -3875,9 +3804,9 @@ "dev": true }, "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, "optional": true, @@ -3889,10 +3818,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/gensync": { "version": "1.0.0-beta.2", @@ -3904,15 +3836,15 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", + "function-bind": "^1.1.2", "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3951,15 +3883,15 @@ } }, "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/glob-to-regexp": { @@ -3977,6 +3909,18 @@ "node": ">=4" } }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -3995,18 +3939,6 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -4016,6 +3948,18 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-proto": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", @@ -4040,6 +3984,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/hpack.js": { "version": "2.1.6", "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", @@ -4120,12 +4076,6 @@ "node": ">= 0.8" } }, - "node_modules/http-errors/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/http-parser-js": { "version": "0.5.8", "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", @@ -4192,9 +4142,9 @@ } }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "dev": true, "engines": { "node": ">= 4" @@ -4216,15 +4166,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -4264,9 +4205,9 @@ } }, "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "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/interpret": { @@ -4300,12 +4241,12 @@ } }, "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", + "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": { - "has": "^1.0.3" + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4502,6 +4443,12 @@ "node": ">=4" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -4532,6 +4479,15 @@ "node": ">=6" } }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -4542,13 +4498,13 @@ } }, "node_modules/launch-editor": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", - "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.1.tgz", + "integrity": "sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==", "dev": true, "dependencies": { "picocolors": "^1.0.0", - "shell-quote": "^1.7.3" + "shell-quote": "^1.8.1" } }, "node_modules/levn": { @@ -4588,15 +4544,18 @@ } }, "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==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "dependencies": { - "p-locate": "^4.1.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/lodash": { @@ -4805,9 +4764,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", - "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", "dev": true }, "node_modules/normalize-path": { @@ -4832,9 +4791,9 @@ } }, "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4926,30 +4885,33 @@ } }, "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==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-retry": { @@ -5074,6 +5036,58 @@ "node": ">=8" } }, + "node_modules/pkg-dir/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/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/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": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5121,9 +5135,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, "engines": { "node": ">=6" @@ -5267,9 +5281,9 @@ "dev": true }, "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz", + "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==", "dev": true, "dependencies": { "regenerate": "^1.4.2" @@ -5285,9 +5299,9 @@ "dev": true }, "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", "dev": true, "dependencies": { "@babel/runtime": "^7.8.4" @@ -5347,12 +5361,12 @@ "dev": true }, "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "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.11.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -5375,7 +5389,7 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/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==", @@ -5384,6 +5398,15 @@ "node": ">=8" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -5492,11 +5515,12 @@ "dev": true }, "node_modules/selfsigned": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", - "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", "dev": true, "dependencies": { + "@types/node-forge": "^1.3.0", "node-forge": "^1" }, "engines": { @@ -5617,6 +5641,12 @@ "node": ">= 0.6" } }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -5653,6 +5683,21 @@ "node": ">= 0.8.0" } }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -5877,9 +5922,9 @@ } }, "node_modules/terser": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.19.0.tgz", - "integrity": "sha512-JpcpGOQLOXm2jsomozdMDpd5f8ZHh1rR48OFgWUH3QsyZcfPgv2qDCYbcDEAYNd4OZRj2bWYKpwdll/udZCk/Q==", + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", "dev": true, "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -6025,6 +6070,12 @@ "node": ">= 0.6" } }, + "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/unicode-canonical-property-names-ecmascript": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", @@ -6075,9 +6126,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", "dev": true, "funding": [ { @@ -6128,6 +6179,12 @@ "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/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -6178,9 +6235,9 @@ } }, "node_modules/webpack": { - "version": "5.88.1", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.88.1.tgz", - "integrity": "sha512-FROX3TxQnC/ox4N+3xQoWZzvGXSuscxR32rbzjpXgEzWudJFEJBpdlkkob2ylrv5yzzufD1zph1OoFsLtm6stQ==", + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", "dev": true, "dependencies": { "@types/eslint-scope": "^3.7.3", @@ -6467,12 +6524,13 @@ } }, "node_modules/webpack-merge": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", - "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "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": { @@ -6488,6 +6546,28 @@ "node": ">=10.13.0" } }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/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/webpack/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -6557,9 +6637,9 @@ "dev": true }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.14.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz", + "integrity": "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==", "dev": true, "engines": { "node": ">=10.0.0" diff --git a/package.json b/package.json index 9f06103..810a580 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "1.4.0-beta.2", "description": "JS Client for 68publishers/amp", "homepage": "http://www.68publishers.io/", - "main": "index.js", + "main": "index.mjs", "repository": { "type": "git", "url": "git+https://gitlab.com/68publishers/projects/amp-client" @@ -12,8 +12,8 @@ "build:dev": "webpack --config webpack.config.dev.js --progress --profile", "build:prod": "webpack --config webpack.config.prod.js --progress --profile", "start:dev": "webpack --config webpack.config.dev.js --progress --profile && webpack-dev-server --config webpack.config.dev.js", - "eslint:fix": "eslint ./index.js ./src --ext .js --fix", - "eslint": "eslint ./index.js ./src --ext .js" + "eslint:fix": "eslint ./index.mjs ./src --ext .mjs --fix", + "eslint": "eslint ./index.mjs ./src --ext .mjs" }, "keywords": [ "68publishers", @@ -24,14 +24,14 @@ "author": "68publishers", "license": "ISC", "devDependencies": { - "@babel/core": "^7.22.8", + "@babel/core": "^7.23.5", "@babel/polyfill": "^7.12.1", - "@babel/preset-env": "^7.22.7", + "@babel/preset-env": "^7.23.5", "babel-loader": "^8.3.0", - "eslint": "^8.44.0", + "eslint": "^8.55.0", "path": "^0.12.7", "terser-webpack-plugin": "^5.3.9", - "webpack": "^5.88.1", + "webpack": "^5.89.0", "webpack-cli": "^5.1.4", "webpack-dev-server": "^4.15.1" }, @@ -41,8 +41,9 @@ }, "files": [ "src", - "index.js", + "index.mjs", "dist/amp-client.min.js", - "dist/amp-client.standalone.min.js" + "dist/amp-client.standalone.min.js", + "dist/amp-client.embed.min.js" ] } diff --git a/src/banner/attributes-parser.js b/src/banner/attributes-parser.mjs similarity index 93% rename from src/banner/attributes-parser.js rename to src/banner/attributes-parser.mjs index 227f2e2..0a7468f 100644 --- a/src/banner/attributes-parser.js +++ b/src/banner/attributes-parser.mjs @@ -1,4 +1,4 @@ -class AttributesParser { +export class AttributesParser { static parseResources(element) { const resources = {}; @@ -31,5 +31,3 @@ class AttributesParser { return options; } } - -module.exports = AttributesParser; diff --git a/src/banner/banner-manager.js b/src/banner/banner-manager.mjs similarity index 50% rename from src/banner/banner-manager.js rename to src/banner/banner-manager.mjs index 2f22fc1..9412cab 100644 --- a/src/banner/banner-manager.js +++ b/src/banner/banner-manager.mjs @@ -1,59 +1,36 @@ -const internal = require('../utils/internal-state'); -const ManagedBanner = require('./managed/managed-banner'); -const ExternalBanner = require('./external/external-banner'); -const EmbedBanner = require('./embed/embed-banner'); -const Banner = require('./banner'); -const State = require('./state'); -const Fingerprint = require('./fingerprint'); -const Resource = require('../request/resource'); -const SequenceGenerator = require('../utils/sequence-generator'); - -const getElement = (el) => { - if (el instanceof HTMLElement) { - return el; - } - - if (typeof el !== 'string') { - throw new TypeError('Element must be instance of HTMLElement or String'); - } - - let htmlEl; - - if ('#' === el.charAt(0)) { - htmlEl = document.getElementById(el.slice(1)); - } else { - htmlEl = document.querySelector(el); - } +import { ManagedBanner } from './managed/managed-banner.mjs'; +import { ExternalBanner } from './external/external-banner.mjs'; +import { EmbedBanner } from './embed/embed-banner.mjs'; +import { Banner } from './banner.mjs'; +import { State } from './state.mjs'; +import { Fingerprint } from './fingerprint.mjs'; +import { Resource } from '../request/resource.mjs'; +import { SequenceGenerator } from '../utils/sequence-generator.mjs'; + +export class BannerManager { + #eventBus; + #sequenceGenerator; + #banners = []; - if (!(htmlEl instanceof HTMLElement)) { - throw new TypeError('Selector ' + el + ' is invalid.'); - } - - return htmlEl; -}; - -class BannerManager { constructor(eventBus) { - // constants - this.STATE = State; + this.#eventBus = eventBus; + this.#sequenceGenerator = new SequenceGenerator(); - internal(this).eventBus = eventBus; - internal(this).banners = []; - internal(this).sequenceGenerator = new SequenceGenerator(); + this.STATE = State; } addExternalBanner(element) { - element = getElement(element); + element = this.#getElement(element); element.setAttribute('data-amp-attached', ''); const banner = new ExternalBanner( - internal(this).eventBus, - internal(this).sequenceGenerator.getNextIdentifier(), + this.#eventBus, + this.#sequenceGenerator.getNextIdentifier(), element, ); - internal(this).banners.push(banner); + this.#banners.push(banner); return banner; } @@ -61,7 +38,7 @@ class BannerManager { addManagedBanner(element, position, resources = {}, options = {}) { const resourceArr = []; let key; - element = getElement(element); + element = this.#getElement(element); element.setAttribute('data-amp-attached', ''); @@ -70,39 +47,39 @@ class BannerManager { } const banner = new ManagedBanner( - internal(this).eventBus, - internal(this).sequenceGenerator.getNextIdentifier(), + this.#eventBus, + this.#sequenceGenerator.getNextIdentifier(), element, position, resourceArr, options, ); - internal(this).banners.push(banner); + this.#banners.push(banner); return banner; } addEmbedBanner(iframe, position, options) { - iframe = getElement(iframe); + iframe = this.#getElement(iframe); iframe.setAttribute('data-amp-attached', ''); const banner = new EmbedBanner( - internal(this).eventBus, - internal(this).sequenceGenerator.getNextIdentifier(), + this.#eventBus, + this.#sequenceGenerator.getNextIdentifier(), iframe, position, options, ); - internal(this).banners.push(banner); + this.#banners.push(banner); return banner; } getBannersByState({state, managed = true, external = true, embed = true}) { - return internal(this).banners.filter(banner => { + return this.#banners.filter(banner => { if (!(banner instanceof Banner) || banner.state !== state) { return false; } @@ -114,7 +91,7 @@ class BannerManager { getBannerByFingerprint(fingerprint) { const fingerprintValue = fingerprint instanceof Fingerprint ? fingerprint.value : fingerprint; - for (let banner of internal(this).banners) { + for (let banner of this.#banners) { if (banner in EmbedBanner) { continue; } @@ -130,7 +107,7 @@ class BannerManager { } getBannerByUid(uid) { - for (let banner of internal(this).banners) { + for (let banner of this.#banners) { if (banner.uid === uid) { return banner; } @@ -138,6 +115,28 @@ class BannerManager { return null; } -} -module.exports = BannerManager; + #getElement(el) { + if (el instanceof HTMLElement) { + return el; + } + + if (typeof el !== 'string') { + throw new TypeError('Element must be instance of HTMLElement or String'); + } + + let htmlEl; + + if ('#' === el.charAt(0)) { + htmlEl = document.getElementById(el.slice(1)); + } else { + htmlEl = document.querySelector(el); + } + + if (!(htmlEl instanceof HTMLElement)) { + throw new TypeError('Selector ' + el + ' is invalid.'); + } + + return htmlEl; + } +} diff --git a/src/banner/banner.js b/src/banner/banner.mjs similarity index 51% rename from src/banner/banner.js rename to src/banner/banner.mjs index ea9fb2d..2a9cec2 100644 --- a/src/banner/banner.js +++ b/src/banner/banner.mjs @@ -1,46 +1,51 @@ -const State = require('./state'); -const Events = require('../event/events'); -const PositionData = require('./position-data'); -const Options = require('./options'); -const internal = require('../utils/internal-state'); +import { State } from './state.mjs'; +import { Events } from '../event/events.mjs'; +import { PositionData } from './position-data.mjs'; +import { Options } from './options.mjs'; + +export class Banner { + #uid; + #element; + #options; + #state = null; + #stateInfo = null; + #stateCounters = {}; -class Banner { constructor(eventBus, uid, element, position, options) { if (this.constructor === Banner) { throw new TypeError('Can not construct abstract class Banner.'); } - // constants - this.STATE = State; + this.#uid = uid; + this.#element = element; + this.#options = new Options(options); + + this._eventBus = eventBus; + this._positionData = PositionData.createInitial(position); - internal(this).eventBus = eventBus; - internal(this).uid = uid; - internal(this).element = element; - internal(this).positionData = PositionData.createInitial(position); - internal(this).options = new Options(options); - internal(this).stateCounters = {}; + this.STATE = State; this.setState(this.STATE.NEW, 'Banner created.'); } get uid() { - return internal(this).uid; + return this.#uid; } get element() { - return internal(this).element; + return this.#element; } get state() { - return internal(this).state; + return this.#state; } get stateInfo() { - return internal(this).stateInfo; + return this.#stateInfo; } get stateCounter() { - return internal(this).stateCounters[this.state] || 0; + return this.#stateCounters[this.state] || 0; } get position() { @@ -51,14 +56,14 @@ class Banner { * @returns {PositionData} */ get positionData() { - return internal(this).positionData; + return this._positionData; } /** * @returns {Options} */ get options() { - return internal(this).options; + return this.#options; } /** @@ -73,11 +78,11 @@ class Banner { throw new TypeError(`${state} is not valid state.`); } - internal(this).state = state; - internal(this).stateInfo = info.toString(); - internal(this).stateCounters[state] = (internal(this).stateCounters[state] || 0) + 1; + this.#state = state; + this.#stateInfo = info.toString(); + this.#stateCounters[state] = (this.#stateCounters[state] || 0) + 1; - internal(this).eventBus.dispatch(Events.ON_BANNER_STATE_CHANGED, this); + this._eventBus.dispatch(Events.ON_BANNER_STATE_CHANGED, this); } /** @@ -99,5 +104,3 @@ class Banner { return false; } } - -module.exports = Banner; diff --git a/src/banner/embed/embed-banner.js b/src/banner/embed/embed-banner.mjs similarity index 88% rename from src/banner/embed/embed-banner.js rename to src/banner/embed/embed-banner.mjs index 4bebf60..a551ccd 100644 --- a/src/banner/embed/embed-banner.js +++ b/src/banner/embed/embed-banner.mjs @@ -1,6 +1,6 @@ -const Banner = require('../banner'); +import { Banner } from '../banner.mjs'; -class EmbedBanner extends Banner { +export class EmbedBanner extends Banner { constructor(eventBus, uid, iframe, position, options) { super(eventBus, uid, iframe, position, options); } @@ -28,5 +28,3 @@ class EmbedBanner extends Banner { } } } - -module.exports = EmbedBanner; diff --git a/src/banner/external/external-banner.js b/src/banner/external/external-banner.mjs similarity index 78% rename from src/banner/external/external-banner.js rename to src/banner/external/external-banner.mjs index eef0f48..2af7da8 100644 --- a/src/banner/external/external-banner.js +++ b/src/banner/external/external-banner.mjs @@ -1,10 +1,12 @@ -const Banner = require('../banner'); -const Fingerprint = require('../fingerprint'); -const PositionData = require('../position-data'); -const AttributesParser = require('../attributes-parser'); -const internal = require('../../utils/internal-state'); +import { Banner } from '../banner.mjs'; +import { Fingerprint } from '../fingerprint.mjs'; +import { PositionData } from '../position-data.mjs'; +import { AttributesParser } from '../attributes-parser.mjs'; + +export class ExternalBanner extends Banner { + #fingerprints = []; + #breakpointsByBannerId = {}; -class ExternalBanner extends Banner { constructor(eventBus, uid, element) { if (!('ampBannerExternal' in element.dataset)) { throw new Error(`Unable to initialize ExternalBanner from element that does not have an attribute "data-amp-external".`); @@ -45,9 +47,9 @@ class ExternalBanner extends Banner { } } - internal(this).positionData = positionData; - internal(this).fingerprints = fingerprints; - internal(this).breakpointsByBannerId = breakpointsByBannerId; + this._positionData = positionData; + this.#fingerprints = fingerprints; + this.#breakpointsByBannerId = breakpointsByBannerId; this.setState(state.value, state.info); } @@ -56,14 +58,14 @@ class ExternalBanner extends Banner { * @returns {Array} */ get fingerprints() { - return internal(this).fingerprints || []; + return this.#fingerprints; } /** * @returns {number|null} */ getCurrenBreakpoint(bannerId) { - const breakpointsByBannerId = internal(this).breakpointsByBannerId || {}; + const breakpointsByBannerId = this.#breakpointsByBannerId; const breakpoints = breakpointsByBannerId[bannerId] || []; for (let breakpoint of breakpoints) { @@ -81,5 +83,3 @@ class ExternalBanner extends Banner { return true; } } - -module.exports = ExternalBanner; diff --git a/src/banner/fingerprint.js b/src/banner/fingerprint.mjs similarity index 94% rename from src/banner/fingerprint.js rename to src/banner/fingerprint.mjs index a2e8646..5126fd2 100644 --- a/src/banner/fingerprint.js +++ b/src/banner/fingerprint.mjs @@ -1,4 +1,4 @@ -class Fingerprint { +export class Fingerprint { constructor(value, { bannerId, bannerName, positionId, positionCode, positionName, campaignId, campaignCode, campaignName }) { this.value = value; this.bannerId = bannerId; @@ -29,5 +29,3 @@ class Fingerprint { return this.value; } } - -module.exports = Fingerprint; diff --git a/src/banner/managed/banner-data.js b/src/banner/managed/banner-data.js deleted file mode 100644 index 18df9b0..0000000 --- a/src/banner/managed/banner-data.js +++ /dev/null @@ -1,152 +0,0 @@ -const internal = require('../../utils/internal-state'); -const Fingerprint = require('../fingerprint'); - -const getWidth = () => { - return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; -}; - -const iterate = (data, cb) => { - for (let i in data) { - cb(data[i], i); - } -}; - -class BannerData { - constructor(data, breakpointType) { - internal(this).data = data; - internal(this).fingerprint = null; - internal(this).breakpointType = breakpointType; - internal(this).resolvedContent = null; - internal(this).resolvedContentBounds = { - min: null, - max: null, - reset: function () { - this.min = this.max = null; - }, - }; - } - - set fingerprint(fingerprint) { - if (!(fingerprint instanceof Fingerprint)) { - throw new TypeError(`The value must be instance of Fingerprint object.`); - } - - internal(this).fingerprint = fingerprint; - } - - get fingerprint() { - return internal(this).fingerprint; - } - - get id() { - return internal(this).data.id; - } - - get name() { - return internal(this).data.name || null; - } - - get score() { - return internal(this).data.score; - } - - /** - * @deprecated Use property `campaignCode` instead - */ - get campaign() { - console.warn('Usage of deprecated property `BannerData.campaign`. Please use property `campaignCode` instead.'); - - return this.campaignCode(); - } - - get campaignId() { - return internal(this).data.campaign_id || null; - } - - get campaignCode() { - return internal(this).data.campaign_code || internal(this).data.campaign || null; - } - - get campaignName() { - return internal(this).data.campaign_name || null; - } - - get content() { - const privateProperties = internal(this); - - if (null !== privateProperties.resolvedContent && !this.needRedraw()) { - return privateProperties.resolvedContent; - } - - privateProperties.resolvedContentBounds.reset(); - - const windowWith = getWidth(); - const contents = privateProperties.data.contents; - const breakpointType = privateProperties.breakpointType; - - let defaultContent = null, - alternativeContent = null, - currentBreakpoint = null; - - const breakpoints = []; - - iterate(contents, (content) => { - let breakpoint = content['breakpoint']; - - if (null === breakpoint) { - defaultContent = content; - - return; - } - - breakpoints.push(breakpoint); - - if (('min' === breakpointType && windowWith >= breakpoint && (null === currentBreakpoint || currentBreakpoint < breakpoint)) - || ('max' === breakpointType && windowWith <= breakpoint && (null === currentBreakpoint || currentBreakpoint > breakpoint))) { - alternativeContent = content; - currentBreakpoint = breakpoint; - privateProperties.resolvedContentBounds[breakpointType] = breakpoint; - } - }); - - if (null === alternativeContent && null === defaultContent) { - throw new Error(`Missing content for banner with ID ${this.id}`); - } - - // find bounds - breakpoints.sort((a, b) => a - b); - - if ('min' === breakpointType) { - breakpoints.unshift(null); - } else { - breakpoints.push(null); - } - - const currentBreakpointIndex = breakpoints.indexOf(currentBreakpoint); - - if ('max' === breakpointType && (currentBreakpointIndex - 1) in breakpoints) { - privateProperties.resolvedContentBounds.min = breakpoints[currentBreakpointIndex - 1]; - } - - if ('min' === breakpointType && (currentBreakpointIndex + 1) in breakpoints) { - privateProperties.resolvedContentBounds.max = breakpoints[currentBreakpointIndex + 1]; - } - - return privateProperties.resolvedContent = null !== alternativeContent ? alternativeContent : defaultContent; - } - - needRedraw() { - const privateProperties = internal(this); - - if (null === privateProperties.resolvedContent) { - return true; - } - - const windowWith = getWidth(); - - return ((null !== privateProperties.resolvedContentBounds.min && windowWith < privateProperties.resolvedContentBounds.min) - || (null !== privateProperties.resolvedContentBounds.max && windowWith > privateProperties.resolvedContentBounds.max)); - } -} - -module.exports = BannerData; diff --git a/src/banner/managed/banner-data.mjs b/src/banner/managed/banner-data.mjs new file mode 100644 index 0000000..708775f --- /dev/null +++ b/src/banner/managed/banner-data.mjs @@ -0,0 +1,148 @@ +import { Fingerprint } from '../fingerprint.mjs'; + +export class BannerData { + #data; + #breakpointType; + #fingerprint = null; + #resolvedContent = null; + #resolvedContentBounds = { + min: null, + max: null, + reset: function () { + this.min = this.max = null; + }, + }; + + constructor(data, breakpointType) { + this.#data = data; + this.#breakpointType = breakpointType; + } + + set fingerprint(fingerprint) { + if (!(fingerprint instanceof Fingerprint)) { + throw new TypeError(`The value must be instance of Fingerprint object.`); + } + + this.#fingerprint = fingerprint; + } + + get fingerprint() { + return this.#fingerprint; + } + + get id() { + return this.#data.id; + } + + get name() { + return this.#data.name || null; + } + + get score() { + return this.#data.score; + } + + /** + * @deprecated Use property `campaignCode` instead + */ + get campaign() { + console.warn('Usage of deprecated property `BannerData.campaign`. Please use property `campaignCode` instead.'); + + return this.campaignCode(); + } + + get campaignId() { + return this.#data.campaign_id || null; + } + + get campaignCode() { + return this.#data.campaign_code || this.#data.campaign || null; + } + + get campaignName() { + return this.#data.campaign_name || null; + } + + get content() { + if (null !== this.#resolvedContent && !this.needRedraw()) { + return this.#resolvedContent; + } + + this.#resolvedContentBounds.reset(); + + const windowWith = this.#getWidth(); + const contents = this.#data.contents; + const breakpointType = this.#breakpointType; + + let defaultContent = null, + alternativeContent = null, + currentBreakpoint = null; + + const breakpoints = []; + + this.#iterate(contents, (content) => { + let breakpoint = content['breakpoint']; + + if (null === breakpoint) { + defaultContent = content; + + return; + } + + breakpoints.push(breakpoint); + + if (('min' === breakpointType && windowWith >= breakpoint && (null === currentBreakpoint || currentBreakpoint < breakpoint)) + || ('max' === breakpointType && windowWith <= breakpoint && (null === currentBreakpoint || currentBreakpoint > breakpoint))) { + alternativeContent = content; + currentBreakpoint = breakpoint; + this.#resolvedContentBounds[breakpointType] = breakpoint; + } + }); + + if (null === alternativeContent && null === defaultContent) { + throw new Error(`Missing content for banner with ID ${this.id}`); + } + + // find bounds + breakpoints.sort((a, b) => a - b); + + if ('min' === breakpointType) { + breakpoints.unshift(null); + } else { + breakpoints.push(null); + } + + const currentBreakpointIndex = breakpoints.indexOf(currentBreakpoint); + + if ('max' === breakpointType && (currentBreakpointIndex - 1) in breakpoints) { + this.#resolvedContentBounds.min = breakpoints[currentBreakpointIndex - 1]; + } + + if ('min' === breakpointType && (currentBreakpointIndex + 1) in breakpoints) { + this.#resolvedContentBounds.max = breakpoints[currentBreakpointIndex + 1]; + } + + return this.#resolvedContent = null !== alternativeContent ? alternativeContent : defaultContent; + } + + needRedraw() { + if (null === this.#resolvedContent) { + return true; + } + + const windowWith = this.#getWidth(); + + return ((null !== this.#resolvedContentBounds.min && windowWith < this.#resolvedContentBounds.min) + || (null !== this.#resolvedContentBounds.max && windowWith > this.#resolvedContentBounds.max)); + } + + #getWidth() { + return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; + } + + #iterate(data, cb) { + for (let i in data) { + cb(data[i], i); + } + } +} diff --git a/src/banner/managed/managed-banner.js b/src/banner/managed/managed-banner.mjs similarity index 72% rename from src/banner/managed/managed-banner.js rename to src/banner/managed/managed-banner.mjs index 59e900b..b49c85b 100644 --- a/src/banner/managed/managed-banner.js +++ b/src/banner/managed/managed-banner.mjs @@ -1,27 +1,28 @@ -const Banner = require('../banner'); -const PositionData = require('../position-data'); -const BannerData = require('./banner-data'); -const ResponseData = require('./response-data'); -const Randomizer = require('../../utils/randomizer'); -const Fingerprint = require('../fingerprint'); -const internal = require('../../utils/internal-state'); - -class ManagedBanner extends Banner { +import { Banner } from '../banner.mjs'; +import { PositionData } from '../position-data.mjs'; +import { BannerData } from './banner-data.mjs'; +import { ResponseData } from './response-data.mjs'; +import { Randomizer } from '../../utils/randomizer.mjs'; +import { Fingerprint } from '../fingerprint.mjs'; + +export class ManagedBanner extends Banner { + #resources; + #responseDataReceived = false; + #resolvedBannerData = null; + #banners = []; + constructor(eventBus, uid, element, position, resources = [], options = {}) { super(eventBus, uid, element, position, options); - internal(this).resources = resources; - internal(this).responseDataReceived = false; - internal(this).resolvedBannerData = null; - internal(this).banners = []; + this.#resources = resources; } set html(html) { - internal(this).element.innerHTML = html; + this.element.innerHTML = html; } get resources () { - return internal(this).resources; + return this.#resources; } /** @@ -56,11 +57,11 @@ class ManagedBanner extends Banner { * @returns {BannerData|Array} */ get bannerData() { - if (null !== internal(this).resolvedBannerData) { - return internal(this).resolvedBannerData; + if (null !== this.#resolvedBannerData) { + return this.#resolvedBannerData; } - if (!internal(this).banners.length) { + if (!this.#banners.length) { throw new Error('Banner\'s data is empty.'); } @@ -80,15 +81,15 @@ class ManagedBanner extends Banner { switch (true) { case positionData.isSingle(): - data = internal(this).banners.reduce((a, b) => a.score >= b.score ? a : b) + data = this.#banners.reduce((a, b) => a.score >= b.score ? a : b) data.fingerprint = createFingerprint(data); break; case positionData.isRandom(): - data = Randomizer.randomByWeights(internal(this).banners, 'score'); + data = Randomizer.randomByWeights(this.#banners, 'score'); data.fingerprint = createFingerprint(data); break; case positionData.isMultiple(): - data = internal(this).banners.sort((a, b) => b.score - a.score); + data = this.#banners.sort((a, b) => b.score - a.score); for (let row of data) { row.fingerprint = createFingerprint(row); @@ -103,7 +104,7 @@ class ManagedBanner extends Banner { throw new Error('Banner\'s data is empty.'); } - internal(this).resolvedBannerData = data; + this.#resolvedBannerData = data; return data; } @@ -122,13 +123,13 @@ class ManagedBanner extends Banner { } setResponseData(responseData) { - if (internal(this).responseDataReceived) { + if (this.#responseDataReceived) { throw new Error(`Data for banner on position ${this.position} is already set.`); } - internal(this).positionData = new PositionData({ + this._positionData = new PositionData({ id: responseData['position_id'] || null, - code: this.positionData.code, + code: this._positionData.code, name: responseData['position_name'] || null, rotationSeconds: responseData['rotation_seconds'], displayType: responseData['display_type'], @@ -141,8 +142,8 @@ class ManagedBanner extends Banner { banners.push(new BannerData(responseData.banners[i], responseData['breakpoint_type'])); } - internal(this).banners = banners; - internal(this).responseDataReceived = true; + this.#banners = banners; + this.#responseDataReceived = true; } needRedraw() { @@ -161,5 +162,3 @@ class ManagedBanner extends Banner { return false; } } - -module.exports = ManagedBanner; diff --git a/src/banner/managed/response-data.js b/src/banner/managed/response-data.js deleted file mode 100644 index 9366129..0000000 --- a/src/banner/managed/response-data.js +++ /dev/null @@ -1,34 +0,0 @@ -/** - * @deprecated - */ -class ResponseData { - constructor(managedBanner) { - this.managedBanner = managedBanner; - } - - get positionCode() { - return this.managedBanner.positionData.code; - } - - get rotationSeconds() { - return this.managedBanner.positionData.rotationSeconds; - } - - get displayType() { - return this.managedBanner.positionData.displayType; - } - - get breakpointType() { - return this.managedBanner.positionData.breakpointType; - } - - get fingerprints() { - return this.managedBanner.fingerprints; - } - - get bannerData() { - return this.managedBanner.bannerData; - } -} - -module.exports = ResponseData; diff --git a/src/banner/managed/response-data.mjs b/src/banner/managed/response-data.mjs new file mode 100644 index 0000000..00646da --- /dev/null +++ b/src/banner/managed/response-data.mjs @@ -0,0 +1,34 @@ +/** + * @deprecated + */ +export class ResponseData { + #managedBanner; + + constructor(managedBanner) { + this.#managedBanner = managedBanner; + } + + get positionCode() { + return this.#managedBanner.positionData.code; + } + + get rotationSeconds() { + return this.#managedBanner.positionData.rotationSeconds; + } + + get displayType() { + return this.#managedBanner.positionData.displayType; + } + + get breakpointType() { + return this.#managedBanner.positionData.breakpointType; + } + + get fingerprints() { + return this.#managedBanner.fingerprints; + } + + get bannerData() { + return this.#managedBanner.bannerData; + } +} diff --git a/src/banner/options.js b/src/banner/options.mjs similarity index 85% rename from src/banner/options.js rename to src/banner/options.mjs index dc7670c..dc4e4a3 100644 --- a/src/banner/options.js +++ b/src/banner/options.mjs @@ -1,4 +1,4 @@ -class Options { +export class Options { constructor(options) { this.options = options; } @@ -11,5 +11,3 @@ class Options { return this.options[optionName] || defaultValue; } } - -module.exports = Options; diff --git a/src/banner/position-data.js b/src/banner/position-data.mjs similarity index 95% rename from src/banner/position-data.js rename to src/banner/position-data.mjs index 6148348..d94df00 100644 --- a/src/banner/position-data.js +++ b/src/banner/position-data.mjs @@ -1,4 +1,4 @@ -class PositionData { +export class PositionData { /** * @param {string|null} id * @param {string} code @@ -50,5 +50,3 @@ class PositionData { } } } - -module.exports = PositionData; diff --git a/src/banner/state.js b/src/banner/state.mjs similarity index 91% rename from src/banner/state.js rename to src/banner/state.mjs index 10197f3..bebae63 100644 --- a/src/banner/state.js +++ b/src/banner/state.mjs @@ -1,4 +1,4 @@ -class State { +export class State { static get NEW() { return 'NEW'; } @@ -24,5 +24,3 @@ class State { ]; } } - -module.exports = State; diff --git a/src/client/client-version.js b/src/client/client-version.js deleted file mode 100644 index 479de66..0000000 --- a/src/client/client-version.js +++ /dev/null @@ -1,8 +0,0 @@ -class ClientVersion { - constructor(semver, full) { - this.semver = semver; - this.full = full; - } -} - -module.exports = ClientVersion; diff --git a/src/client/client-version.mjs b/src/client/client-version.mjs new file mode 100644 index 0000000..bf9663b --- /dev/null +++ b/src/client/client-version.mjs @@ -0,0 +1,17 @@ +export class ClientVersion { + #semver; + #full; + + constructor(semver, full) { + this.#semver = semver; + this.#full = full; + } + + get semver() { + return this.#semver; + } + + get full() { + return this.#full; + } +} diff --git a/src/client/embed/client-factory.js b/src/client/embed/client-factory.mjs similarity index 53% rename from src/client/embed/client-factory.js rename to src/client/embed/client-factory.mjs index e579a1b..68e1b61 100644 --- a/src/client/embed/client-factory.js +++ b/src/client/embed/client-factory.mjs @@ -1,8 +1,10 @@ -const semver = require('../../../package.json').version; -const ClientVersion = require('../client-version'); -const Client = require('./client'); +import pkg from '../../../package.json'; +import { ClientVersion } from '../client-version.mjs'; +import { Client } from './client.mjs'; -class ClientFactory { +const semver = pkg.version; + +export class ClientFactory { static create(options = {}) { return new Client( ClientFactory.version, @@ -14,5 +16,3 @@ class ClientFactory { return new ClientVersion(semver, `embed@${semver}`); } } - -module.exports = ClientFactory; diff --git a/src/client/embed/client.js b/src/client/embed/client.mjs similarity index 71% rename from src/client/embed/client.js rename to src/client/embed/client.mjs index 594df36..968bd96 100644 --- a/src/client/embed/client.js +++ b/src/client/embed/client.mjs @@ -1,13 +1,13 @@ -const { mainConfig, extendedConfig } = require('./config'); -const BannerManager = require('../../banner/banner-manager'); -const EventBus = require('../../event/event-bus'); -const Events = require('../../event/events'); -const ParentFrameMessenger = require('../../frame/parent-frame-messenger'); -const BannerInteractionWatcher = require("../../interaction/banner-interaction-watcher"); -const MetricsSender = require('../../metrics/metrics-sender'); -const MetricsEventListener = require("../../metrics/metrics-events-listener"); +import { createMainConfig, createExtendedConfig } from './config.mjs'; +import { BannerManager } from '../../banner/banner-manager.mjs'; +import { EventBus } from '../../event/event-bus.mjs'; +import { Events } from '../../event/events.mjs'; +import { ParentFrameMessenger } from '../../frame/parent-frame-messenger.mjs'; +import { BannerInteractionWatcher } from '../../interaction/banner-interaction-watcher.mjs'; +import { MetricsSender } from '../../metrics/metrics-sender.mjs'; +import { MetricsEventsListener } from '../../metrics/metrics-events-listener.mjs'; -class Client { +export class Client { #version; #mainConfig; #extendedConfig; @@ -16,7 +16,7 @@ class Client { #frameMessenger; #bannerInteractionWatcher; #metricsSender; - #metricsEventListener; + #metricsEventsListener; #attached; /** @@ -25,9 +25,10 @@ class Client { */ constructor (version, options) { this.EVENTS = Events; + this.#version = version; - this.#mainConfig = mainConfig(options); - this.#extendedConfig = extendedConfig({}); + this.#mainConfig = createMainConfig(options); + this.#extendedConfig = createExtendedConfig({}); this.#extendedConfig = null; this.#eventBus = new EventBus(); this.#bannerManager = new BannerManager(this.#eventBus); @@ -40,14 +41,14 @@ class Client { [this.#sendMetricsEvent.bind(this)], [], ); - this.#metricsEventListener = new MetricsEventListener( + this.#metricsEventsListener = new MetricsEventsListener( this.#metricsSender, this.#eventBus, this.#mainConfig.channel, ); this.#frameMessenger.on('connect', ({ data }) => { - this.#extendedConfig = extendedConfig(data.extendedConfig); + this.#extendedConfig = createExtendedConfig(data.extendedConfig); this.#bannerInteractionWatcher = new BannerInteractionWatcher( this.#bannerManager, this.#eventBus, @@ -58,7 +59,7 @@ class Client { }) this.#frameMessenger.listen(); - this.#metricsEventListener.attach(); + this.#metricsEventsListener.attach(); } /** @@ -98,5 +99,3 @@ class Client { }); } } - -module.exports = Client; diff --git a/src/client/embed/config.js b/src/client/embed/config.js deleted file mode 100644 index b41e239..0000000 --- a/src/client/embed/config.js +++ /dev/null @@ -1,61 +0,0 @@ -const merge = require('lodash/merge'); - -const roundRatio = (ratio, optionPath) => { - const rounded = Math.round(ratio * 10) / 10; - - if (rounded !== ratio) { - console.warn(`The value for the option "${optionPath}" has been rounded to ${rounded} (originally ${ratio}).`); - } - - return rounded; -}; - -module.exports = { - mainConfig: options => { - return merge({ - channel: null, - }, options); - }, - extendedConfig: options => { - const config = merge({ - interaction: { - defaultIntersectionRatio: 0.5, - intersectionRatioMap: {}, - firstTimeSeenTimeout: 1000, - }, - }, options); - - // interaction - if ('object' !== typeof config.interaction) { - throw new Error(`The option "interaction" must be an object of the format { intersectionRatio: int|float, firstTimeSeenTimeout: int }, ${config.interaction} passed.`); - } - - if ('number' !== typeof config.interaction.defaultIntersectionRatio || 0.1 > config.interaction.defaultIntersectionRatio || 1 < config.interaction.defaultIntersectionRatio) { - throw new Error(`The option "interaction.defaultIntersectionRatio" must be a number between 0.1 and 1 in increments of 0.1 [e.g. 0.1, 0.2, 0.3, ...], "${config.interaction.defaultIntersectionRatio}" passed.`); - } - - config.interaction.defaultIntersectionRatio = roundRatio(config.interaction.defaultIntersectionRatio, 'interaction.defaultIntersectionRatio'); - - if ('object' !== typeof config.interaction.intersectionRatioMap) { - throw new Error(`The option "interaction.intersectionRatioMap" must be an object with an integer keys (pixels) and valid ratios as values, ${config.interaction.intersectionRatioMap} passed.`); - } - - for (const [key, value] of Object.entries(config.interaction.intersectionRatioMap)) { - if (Number(key).toString() !== key) { - throw new Error(`The key "interaction.intersectionRatioMap.${key}" must be an integer.`); - } - - if ('number' !== typeof value || 0.1 > value || 1 < value) { - throw new Error(`The option "interaction.intersectionRatioMap.${key}" must be a number between 0.1 and 1 in increments of 0.1 [e.g. 0.1, 0.2, 0.3, ...], "${config.interaction.intersectionRatioMap[key]}" passed.`); - } - - config.interaction.intersectionRatioMap[key] = roundRatio(value, 'interaction.intersectionRatioMap.' + key); - } - - if (!Number.isInteger(config.interaction.firstTimeSeenTimeout) || 500 > config.interaction.firstTimeSeenTimeout) { - throw new Error(`The option "interaction.firstTimeSeenTimeout" must be a int with a minimum value of 500, "${config.interaction.firstTimeSeenTimeout}" passed.`); - } - - return config; - }, -} diff --git a/src/client/embed/config.mjs b/src/client/embed/config.mjs new file mode 100644 index 0000000..f144341 --- /dev/null +++ b/src/client/embed/config.mjs @@ -0,0 +1,60 @@ +import merge from 'lodash/merge.js'; + +const roundRatio = (ratio, optionPath) => { + const rounded = Math.round(ratio * 10) / 10; + + if (rounded !== ratio) { + console.warn(`The value for the option "${optionPath}" has been rounded to ${rounded} (originally ${ratio}).`); + } + + return rounded; +}; + +export function createMainConfig(options) { + return merge({ + channel: null, + }, options); +} + +export function createExtendedConfig(options) { + const config = merge({ + interaction: { + defaultIntersectionRatio: 0.5, + intersectionRatioMap: {}, + firstTimeSeenTimeout: 1000, + }, + }, options); + + // interaction + if ('object' !== typeof config.interaction) { + throw new Error(`The option "interaction" must be an object of the format { intersectionRatio: int|float, firstTimeSeenTimeout: int }, ${config.interaction} passed.`); + } + + if ('number' !== typeof config.interaction.defaultIntersectionRatio || 0.1 > config.interaction.defaultIntersectionRatio || 1 < config.interaction.defaultIntersectionRatio) { + throw new Error(`The option "interaction.defaultIntersectionRatio" must be a number between 0.1 and 1 in increments of 0.1 [e.g. 0.1, 0.2, 0.3, ...], "${config.interaction.defaultIntersectionRatio}" passed.`); + } + + config.interaction.defaultIntersectionRatio = roundRatio(config.interaction.defaultIntersectionRatio, 'interaction.defaultIntersectionRatio'); + + if ('object' !== typeof config.interaction.intersectionRatioMap) { + throw new Error(`The option "interaction.intersectionRatioMap" must be an object with an integer keys (pixels) and valid ratios as values, ${config.interaction.intersectionRatioMap} passed.`); + } + + for (const [key, value] of Object.entries(config.interaction.intersectionRatioMap)) { + if (Number(key).toString() !== key) { + throw new Error(`The key "interaction.intersectionRatioMap.${key}" must be an integer.`); + } + + if ('number' !== typeof value || 0.1 > value || 1 < value) { + throw new Error(`The option "interaction.intersectionRatioMap.${key}" must be a number between 0.1 and 1 in increments of 0.1 [e.g. 0.1, 0.2, 0.3, ...], "${config.interaction.intersectionRatioMap[key]}" passed.`); + } + + config.interaction.intersectionRatioMap[key] = roundRatio(value, 'interaction.intersectionRatioMap.' + key); + } + + if (!Number.isInteger(config.interaction.firstTimeSeenTimeout) || 500 > config.interaction.firstTimeSeenTimeout) { + throw new Error(`The option "interaction.firstTimeSeenTimeout" must be a int with a minimum value of 500, "${config.interaction.firstTimeSeenTimeout}" passed.`); + } + + return config; +} diff --git a/src/client/standard/client-factory.js b/src/client/standard/client-factory.mjs similarity index 54% rename from src/client/standard/client-factory.js rename to src/client/standard/client-factory.mjs index e2de6da..8157ec9 100644 --- a/src/client/standard/client-factory.js +++ b/src/client/standard/client-factory.mjs @@ -1,8 +1,10 @@ -const semver = require('../../../package.json').version; -const ClientVersion = require('../client-version'); -const Client = require('./client'); +import pkg from '../../../package.json'; +import { ClientVersion } from '../client-version.mjs'; +import { Client } from './client.mjs'; -class ClientFactory { +const semver = pkg.version; + +export class ClientFactory { static create(options = {}) { return new Client( ClientFactory.version, @@ -14,5 +16,3 @@ class ClientFactory { return new ClientVersion(semver, `standard@${semver}`); } } - -module.exports = ClientFactory; diff --git a/src/client/standard/client.js b/src/client/standard/client.js deleted file mode 100644 index af3c5c6..0000000 --- a/src/client/standard/client.js +++ /dev/null @@ -1,275 +0,0 @@ -const internal = require('../../utils/internal-state'); -const _config = require('./config'); -const _gateway = require('../../gateway/index'); -const RequestFactory = require('../../request/request-factory'); -const EmbedUrlFactory = require('../../request/embed-url-factory'); -const BannerManager = require('../../banner/banner-manager'); -const ManagedBanner = require('../../banner/managed/managed-banner'); -const AttributesParser = require('../../banner/attributes-parser'); -const EventBus = require('../../event/event-bus'); -const Events = require('../../event/events'); -const BannerRenderer = require('../../renderer/banner-renderer'); -const BannerInteractionWatcher = require('../../interaction/banner-interaction-watcher'); -const MetricsEventListener = require('../../metrics/metrics-events-listener'); -const MetricsSender = require('../../metrics/metrics-sender'); -const BannerFrameMessenger = require('../../frame/banner-frame-messenger'); - -class Client { - /** - * @param {ClientVersion} version - * @param {Object} options - */ - constructor (version, options) { - // constants - this.EVENTS = Events; - - const privateProperties = internal(this); - - options = _config(options); - - privateProperties.config = options; - privateProperties.version = version; - privateProperties.eventBus = new EventBus(); - privateProperties.requestFactory = new RequestFactory( - options.method, - options.url, - options.version, - options.channel, - ); - privateProperties.embedUrlFactory = new EmbedUrlFactory( - options.url, - options.channel, - ); - - privateProperties.gateway = null; - privateProperties.bannerManager = new BannerManager(privateProperties.eventBus); - privateProperties.bannerRenderer = new BannerRenderer(options.template); - privateProperties.bannerInteractionWatcher = new BannerInteractionWatcher( - privateProperties.bannerManager, - privateProperties.eventBus, - options.interaction, - ); - privateProperties.metricsSender = MetricsSender.createFromReceivers( - options.metrics.receiver, - options.metrics.disabledEvents, - ); - privateProperties.metricsEventListener = new MetricsEventListener( - privateProperties.metricsSender, - privateProperties.eventBus, - options.channel, - ); - privateProperties.frameMessenger = new BannerFrameMessenger({ - origin: options.url, - connectionData: { - extendedConfig: { - interaction: options.interaction, - }, - }, - bannerManager: privateProperties.bannerManager, - metricsSender: privateProperties.metricsSender, - }); - - this.setLocale(options.locale); - privateProperties.requestFactory.origin = options.origin; - - let resourceName; - - for (resourceName in options.resources) { - privateProperties.requestFactory.addDefaultResource(resourceName, options.resources[resourceName]); - privateProperties.embedUrlFactory.addDefaultResource(resourceName, options.resources[resourceName]); - } - - window.addEventListener('resize', () => { - const banners = privateProperties.bannerManager.getBannersByState({ - state: privateProperties.bannerManager.STATE.RENDERED, - managed: true, - external: false, - embed: false, - }); - - for (let i in banners) { - if (!banners[i].needRedraw()) { - continue; - } - - this.renderBanner(banners[i]); - } - }); - - privateProperties.frameMessenger.listen(); - privateProperties.metricsEventListener.attach(); - privateProperties.bannerInteractionWatcher.start(); - } - - /** - * @returns {ClientVersion} - */ - get version() { - return internal(this).version; - } - - on(event, callback, scope = null) { - return internal(this).eventBus.subscribe(event, callback, scope); - } - - setLocale(locale) { - internal(this).requestFactory.locale = locale; - internal(this).embedUrlFactory.locale = locale; - } - - setGateway(gateway) { - if (!_gateway.isGateway(gateway)) { - throw new TypeError('Argument gateway mut be instance of AbstractGateway.'); - } - - internal(this).gateway = gateway; - } - - getGateway() { - if (null === internal(this).gateway) { - this.setGateway(_gateway.create()); - } - - return internal(this).gateway; - } - - createBanner(element, position, resources = {}, options = {}) { - return internal(this).bannerManager.addManagedBanner(element, position, resources, options); - } - - attachBanners(snippet = document) { - const privateProperties = internal(this); - const elements = snippet.querySelectorAll('[data-amp-banner]:not([data-amp-attached])'); - - for (let element of elements) { - const position = element.dataset.ampBanner; - - if (!position) { - console.warn('Unable to attach a banner to the element ', element, ' because the attribute "data-amp-banner" has an empty value.'); - - continue; - } - - let banner; - - if ('ampBannerExternal' in element.dataset) { - banner = privateProperties.bannerManager.addExternalBanner(element); - } else if ('ampMode' in element.dataset && 'embed' === element.dataset.ampMode) { - const { iframe, options } = this.#createIframeAndOptions(element, position); - banner = privateProperties.bannerManager.addEmbedBanner(iframe, position, options); - - privateProperties.frameMessenger.connectBanner(banner); - element.insertAdjacentElement('afterend', iframe); - element.remove(); - - element = iframe; - } else { - const resources = AttributesParser.parseResources(element); - const options = AttributesParser.parseOptions(element); - - banner = this.createBanner(element, position, resources, options); - } - - privateProperties.eventBus.dispatch(this.EVENTS.ON_BANNER_ATTACHED, banner); - } - } - - fetch() { - const privateProperties = internal(this); - const banners = privateProperties.bannerManager.getBannersByState({ - state: privateProperties.bannerManager.STATE.NEW, - managed: true, - external: false, - embed: false, - }); - - if (!banners.length) { - return; - } - - const request = privateProperties.requestFactory.create(); - - for (let banner of banners) { - request.addPosition(banner.position, banner.resources) - } - - const success = (response) => { - const data = response.data; - - for (let banner of banners) { - if (!(banner.position in data) - || !('banners' in data[banner.position]) - || !Object.values(data[banner.position]['banners']).length) { - - banner.setState(privateProperties.bannerManager.STATE.NOT_FOUND, 'Banner not found in fetched response.'); - - continue; - } - - if (!Array.isArray(data[banner.position]['banners'])) { - data[banner.position]['banners'] = Object.values(data[banner.position]['banners']); - } - - banner.setResponseData(data[banner.position]); - this.renderBanner(banner); - } - - privateProperties.eventBus.dispatch(this.EVENTS.ON_FETCH_SUCCESS, response); - }; - - const error = (response) => { - for (let banner of banners) { - banner.setState(privateProperties.bannerManager.STATE.ERROR, 'Request on api failed.'); - } - - privateProperties.eventBus.dispatch(this.EVENTS.ON_FETCH_ERROR, response); - }; - - privateProperties.eventBus.dispatch(this.EVENTS.ON_BEFORE_FETCH); - this.getGateway().fetch(request, success, error); - } - - renderBanner(banner) { - if (!(banner instanceof ManagedBanner)) { - throw new TypeError(`Only managed banners can be rendered.`); - } - - const privateProperties = internal(this); - - try { - banner.html = privateProperties.bannerRenderer.render(banner); - } catch (e) { - banner.setState(privateProperties.bannerManager.STATE.ERROR, 'Render error: ' + e.message); - - return; - } - - banner.setState(privateProperties.bannerManager.STATE.RENDERED, 'Banner was successfully rendered.'); - } - - #createIframeAndOptions(element, position) { - const options = AttributesParser.parseOptions(element); - const iframe = document.createElement('iframe'); - - [...element.attributes].map(({ name, value }) => { - iframe.setAttribute(name, value); - }) - - iframe.width = '100%'; - iframe.height = '100%'; - iframe.allowFullscreen = true; - iframe.scrolling = 'no'; - iframe.style.border = 'none'; - iframe.style.overflow = 'hidden'; - iframe.src = element.dataset.ampEmbedSrc || internal(this).embedUrlFactory.create(position, AttributesParser.parseResources(element), options); - iframe.setAttribute('allowtransparency', 'true'); - - if ('lazy' === options.loading) { - iframe.loading = 'lazy'; - } - - return { iframe, options }; - } -} - -module.exports = Client; diff --git a/src/client/standard/client.mjs b/src/client/standard/client.mjs new file mode 100644 index 0000000..e3f74a8 --- /dev/null +++ b/src/client/standard/client.mjs @@ -0,0 +1,280 @@ +import { createConfig } from './config.mjs'; +import { isGateway, createGateway } from '../../gateway/index.mjs'; +import { RequestFactory } from '../../request/request-factory.mjs'; +import { EmbedUrlFactory } from '../../request/embed-url-factory.mjs'; +import { BannerManager } from '../../banner/banner-manager.mjs'; +import { ManagedBanner } from '../../banner/managed/managed-banner.mjs'; +import { AttributesParser } from '../../banner/attributes-parser.mjs'; +import { EventBus } from '../../event/event-bus.mjs'; +import { Events } from '../../event/events.mjs'; +import { BannerRenderer } from '../../renderer/banner-renderer.mjs'; +import { BannerInteractionWatcher } from '../../interaction/banner-interaction-watcher.mjs'; +import { MetricsEventsListener } from '../../metrics/metrics-events-listener.mjs'; +import { MetricsSender } from '../../metrics/metrics-sender.mjs'; +import { BannerFrameMessenger } from '../../frame/banner-frame-messenger.mjs'; + +export class Client { + #version; + #config; + #eventBus; + #requestFactory; + #embedUrlFactory; + #gateway = null; + #bannerManager; + #bannerRenderer; + #bannerInteractionWatcher; + #metricsSender; + #metricsEventsListener; + #frameMessenger; + + /** + * @param {ClientVersion} version + * @param {Object} options + */ + constructor (version, options) { + this.EVENTS = Events; + + this.#version = version; + this.#config = options = createConfig(options); + this.#eventBus = new EventBus(); + this.#requestFactory = new RequestFactory( + options.method, + options.url, + options.version, + options.channel, + ); + this.#embedUrlFactory = new EmbedUrlFactory( + options.url, + options.channel, + ); + + this.#bannerManager = new BannerManager( + this.#eventBus, + ); + this.#bannerRenderer = new BannerRenderer( + options.template, + ); + this.#bannerInteractionWatcher = new BannerInteractionWatcher( + this.#bannerManager, + this.#eventBus, + options.interaction, + ); + this.#metricsSender = MetricsSender.createFromReceivers( + options.metrics.receiver, + options.metrics.disabledEvents, + ); + this.#metricsEventsListener = new MetricsEventsListener( + this.#metricsSender, + this.#eventBus, + options.channel, + ); + this.#frameMessenger = new BannerFrameMessenger({ + origin: options.url, + connectionData: { + extendedConfig: { + interaction: options.interaction, + }, + }, + bannerManager: this.#bannerManager, + metricsSender: this.#metricsSender, + }); + + this.setLocale(options.locale); + this.#requestFactory.origin = options.origin; + + for (let resourceName in options.resources) { + this.#requestFactory.addDefaultResource(resourceName, options.resources[resourceName]); + this.#embedUrlFactory.addDefaultResource(resourceName, options.resources[resourceName]); + } + + window.addEventListener('resize', () => { + const banners = this.#bannerManager.getBannersByState({ + state: this.#bannerManager.STATE.RENDERED, + managed: true, + external: false, + embed: false, + }); + + for (let i in banners) { + if (!banners[i].needRedraw()) { + continue; + } + + this.renderBanner(banners[i]); + } + }); + + this.#frameMessenger.listen(); + this.#metricsEventsListener.attach(); + this.#bannerInteractionWatcher.start(); + } + + /** + * @returns {ClientVersion} + */ + get version() { + return this.#version; + } + + on(event, callback, scope = null) { + return this.#eventBus.subscribe(event, callback, scope); + } + + setLocale(locale) { + this.#requestFactory.locale = locale; + this.#embedUrlFactory.locale = locale; + } + + setGateway(gateway) { + if (!isGateway(gateway)) { + throw new TypeError('Argument gateway mut be instance of AbstractGateway.'); + } + + this.#gateway = gateway; + } + + /** + * @returns {AbstractGateway} + */ + getGateway() { + if (null === this.#gateway) { + this.setGateway(createGateway()); + } + + return this.#gateway; + } + + createBanner(element, position, resources = {}, options = {}) { + return this.#bannerManager.addManagedBanner(element, position, resources, options); + } + + attachBanners(snippet = document) { + const elements = snippet.querySelectorAll('[data-amp-banner]:not([data-amp-attached])'); + + for (let element of elements) { + const position = element.dataset.ampBanner; + + if (!position) { + console.warn('Unable to attach a banner to the element ', element, ' because the attribute "data-amp-banner" has an empty value.'); + + continue; + } + + let banner; + + if ('ampBannerExternal' in element.dataset) { + banner = this.#bannerManager.addExternalBanner(element); + } else if ('ampMode' in element.dataset && 'embed' === element.dataset.ampMode) { + const { iframe, options } = this.#createIframeAndOptions(element, position); + banner = this.#bannerManager.addEmbedBanner(iframe, position, options); + + this.#frameMessenger.connectBanner(banner); + element.insertAdjacentElement('afterend', iframe); + element.remove(); + + element = iframe; + } else { + const resources = AttributesParser.parseResources(element); + const options = AttributesParser.parseOptions(element); + + banner = this.createBanner(element, position, resources, options); + } + + this.#eventBus.dispatch(this.EVENTS.ON_BANNER_ATTACHED, banner); + } + } + + fetch() { + const banners = this.#bannerManager.getBannersByState({ + state: this.#bannerManager.STATE.NEW, + managed: true, + external: false, + embed: false, + }); + + if (!banners.length) { + return; + } + + const request = this.#requestFactory.create(); + + for (let banner of banners) { + request.addPosition(banner.position, banner.resources) + } + + const success = (response) => { + const data = response.data; + + for (let banner of banners) { + if (!(banner.position in data) + || !('banners' in data[banner.position]) + || !Object.values(data[banner.position]['banners']).length) { + + banner.setState(this.#bannerManager.STATE.NOT_FOUND, 'Banner not found in fetched response.'); + + continue; + } + + if (!Array.isArray(data[banner.position]['banners'])) { + data[banner.position]['banners'] = Object.values(data[banner.position]['banners']); + } + + banner.setResponseData(data[banner.position]); + this.renderBanner(banner); + } + + this.#eventBus.dispatch(this.EVENTS.ON_FETCH_SUCCESS, response); + }; + + const error = (response) => { + for (let banner of banners) { + banner.setState(this.#bannerManager.STATE.ERROR, 'Request on api failed.'); + } + + this.#eventBus.dispatch(this.EVENTS.ON_FETCH_ERROR, response); + }; + + this.#eventBus.dispatch(this.EVENTS.ON_BEFORE_FETCH); + this.getGateway().fetch(request, success, error); + } + + renderBanner(banner) { + if (!(banner instanceof ManagedBanner)) { + throw new TypeError(`Only managed banners can be rendered.`); + } + + try { + banner.html = this.#bannerRenderer.render(banner); + } catch (e) { + banner.setState(this.#bannerManager.STATE.ERROR, 'Render error: ' + e.message); + + return; + } + + banner.setState(this.#bannerManager.STATE.RENDERED, 'Banner was successfully rendered.'); + } + + #createIframeAndOptions(element, position) { + const options = AttributesParser.parseOptions(element); + const iframe = document.createElement('iframe'); + + [...element.attributes].map(({ name, value }) => { + iframe.setAttribute(name, value); + }) + + iframe.width = '100%'; + iframe.height = '100%'; + iframe.allowFullscreen = true; + iframe.scrolling = 'no'; + iframe.style.border = 'none'; + iframe.style.overflow = 'hidden'; + iframe.src = element.dataset.ampEmbedSrc || this.#embedUrlFactory.create(position, AttributesParser.parseResources(element), options); + iframe.setAttribute('allowtransparency', 'true'); + + if ('lazy' === options.loading) { + iframe.loading = 'lazy'; + } + + return { iframe, options }; + } +} diff --git a/src/client/standard/config.js b/src/client/standard/config.mjs similarity index 98% rename from src/client/standard/config.js rename to src/client/standard/config.mjs index cdebed5..c161fed 100644 --- a/src/client/standard/config.js +++ b/src/client/standard/config.mjs @@ -1,5 +1,5 @@ -const merge = require('lodash/merge'); -const templates = require('../../template'); +import merge from 'lodash/merge.js'; +import templates from '../../template/index.mjs'; const roundRatio = (ratio, optionPath) => { const rounded = Math.round(ratio * 10) / 10; @@ -11,7 +11,7 @@ const roundRatio = (ratio, optionPath) => { return rounded; }; -module.exports = options => { +export function createConfig(options) { const config = merge({ method: 'GET', url: null, @@ -141,4 +141,4 @@ module.exports = options => { } return config; -}; +} diff --git a/src/event/event-bus.js b/src/event/event-bus.js deleted file mode 100644 index 5245e1a..0000000 --- a/src/event/event-bus.js +++ /dev/null @@ -1,61 +0,0 @@ -const SequenceGenerator = require('../utils/sequence-generator'); -const internal = require('../utils/internal-state'); - -class EventBus { - constructor() { - internal(this).generator = new SequenceGenerator(); - internal(this).listeners = {}; - internal(this).sortedListeners = {}; - } - - subscribe(event, callback, scope = null, priority = 0) { - if (typeof callback !== 'function') { - throw new TypeError('Listener must be of type function.'); - } - - const _internal = internal(this); - - const id = 'idx_' + _internal.generator.getNextIdentifier(); - - _internal.listeners[event] = _internal.listeners[event] || {}; - _internal.listeners[event][id] = { - callback: callback, - scope: scope, - priority: priority, - }; - - if (event in _internal.sortedListeners) { - delete _internal.sortedListeners[event]; - } - - return function () { - if (event in _internal.listeners && id in _internal.listeners[event]) { - delete _internal.listeners[event][id]; - } - }; - } - - dispatch(event, ...args) { - for (let listener of this.getSortedListeners(event)) { - listener.callback.call(listener.scope, ...args); - } - } - - reset() { - internal(this).listeners = {}; - } - - getSortedListeners(event) { - if (event in internal(this).sortedListeners) { - return internal(this).sortedListeners[event]; - } - - const listeners = Object.values(internal(this).listeners[event] || {}).sort((left, right) => { - return left.priority > right.priority ? -1 : (left.priority < right.priority ? 1 : 0); - }); - - return internal(this).sortedListeners[event] = listeners; - } -} - -module.exports = EventBus; diff --git a/src/event/event-bus.mjs b/src/event/event-bus.mjs new file mode 100644 index 0000000..a295543 --- /dev/null +++ b/src/event/event-bus.mjs @@ -0,0 +1,60 @@ +import { SequenceGenerator } from '../utils/sequence-generator.mjs'; + +export class EventBus { + #generator; + #listeners; + #sortedListeners; + + constructor() { + this.#generator = new SequenceGenerator(); + this.#listeners = {}; + this.#sortedListeners = {}; + } + + subscribe(event, callback, scope = null, priority = 0) { + if (typeof callback !== 'function') { + throw new TypeError('Listener must be of type function.'); + } + + const id = 'idx_' + this.#generator.getNextIdentifier(); + + this.#listeners[event] = this.#listeners[event] || {}; + this.#listeners[event][id] = { + callback: callback, + scope: scope, + priority: priority, + }; + + if (event in this.#sortedListeners) { + delete this.#sortedListeners[event]; + } + + return () => { + if (event in this.#listeners && id in this.#listeners[event]) { + delete this.#listeners[event][id]; + } + }; + } + + dispatch(event, ...args) { + for (let listener of this.getSortedListeners(event)) { + listener.callback.call(listener.scope, ...args); + } + } + + reset() { + this.#listeners = {}; + } + + getSortedListeners(event) { + if (event in this.#sortedListeners) { + return this.#sortedListeners[event]; + } + + const listeners = Object.values(this.#listeners[event] || {}).sort((left, right) => { + return left.priority > right.priority ? -1 : (left.priority < right.priority ? 1 : 0); + }); + + return this.#sortedListeners[event] = listeners; + } +} diff --git a/src/event/events.js b/src/event/events.mjs similarity index 97% rename from src/event/events.js rename to src/event/events.mjs index 8223719..9e2125d 100644 --- a/src/event/events.js +++ b/src/event/events.mjs @@ -1,4 +1,4 @@ -class Events { +export class Events { /** * Arguments: {Banner} */ @@ -89,5 +89,3 @@ class Events { return 'amp:fetch:success'; } } - -module.exports = Events; diff --git a/src/frame/banner-frame-messenger.js b/src/frame/banner-frame-messenger.mjs similarity index 92% rename from src/frame/banner-frame-messenger.js rename to src/frame/banner-frame-messenger.mjs index 732cc40..2f15642 100644 --- a/src/frame/banner-frame-messenger.js +++ b/src/frame/banner-frame-messenger.mjs @@ -1,7 +1,7 @@ -const FrameMessenger = require('./frame-messenger'); -const EmbedBanner = require('../banner/embed/embed-banner'); +import { FrameMessenger } from './frame-messenger.mjs'; +import { EmbedBanner } from '../banner/embed/embed-banner.mjs'; -class BannerFrameMessenger extends FrameMessenger { +export class BannerFrameMessenger extends FrameMessenger { #origin; #connectionData; #bannerManager; @@ -104,5 +104,3 @@ class BannerFrameMessenger extends FrameMessenger { return banner; } } - -module.exports = BannerFrameMessenger; diff --git a/src/frame/frame-messenger.js b/src/frame/frame-messenger.mjs similarity index 89% rename from src/frame/frame-messenger.js rename to src/frame/frame-messenger.mjs index aab039d..818722e 100644 --- a/src/frame/frame-messenger.js +++ b/src/frame/frame-messenger.mjs @@ -1,6 +1,6 @@ -const EventBus = require('../event/event-bus'); +import { EventBus } from '../event/event-bus.mjs'; -class FrameMessenger { +export class FrameMessenger { #origins; #eventBus; @@ -36,5 +36,3 @@ class FrameMessenger { }, false); } } - -module.exports = FrameMessenger; diff --git a/src/frame/parent-frame-messenger.js b/src/frame/parent-frame-messenger.mjs similarity index 92% rename from src/frame/parent-frame-messenger.js rename to src/frame/parent-frame-messenger.mjs index f0cd58d..da88d31 100644 --- a/src/frame/parent-frame-messenger.js +++ b/src/frame/parent-frame-messenger.mjs @@ -1,8 +1,8 @@ -const FrameMessenger = require('./frame-messenger'); -const Events = require('../event/events'); -const State = require('../banner/state'); +import { FrameMessenger } from './frame-messenger.mjs'; +import { Events } from '../event/events.mjs'; +import { State } from '../banner/state.mjs'; -class ParentFrameMessenger extends FrameMessenger { +export class ParentFrameMessenger extends FrameMessenger { #clientEventBus; #origin; #uid; @@ -117,5 +117,3 @@ class ParentFrameMessenger extends FrameMessenger { this.#parentMessagesQueue = []; } } - -module.exports = ParentFrameMessenger; diff --git a/src/gateway/abstract-gateway.js b/src/gateway/abstract-gateway.mjs similarity index 89% rename from src/gateway/abstract-gateway.js rename to src/gateway/abstract-gateway.mjs index 3d44c10..d4d3414 100644 --- a/src/gateway/abstract-gateway.js +++ b/src/gateway/abstract-gateway.mjs @@ -1,4 +1,4 @@ -class AbstractGateway { +export class AbstractGateway { constructor() { if (this.constructor === AbstractGateway) { throw new TypeError('Can not construct abstract class AbstractGateway.'); @@ -14,5 +14,3 @@ class AbstractGateway { throw new TypeError('Do not call abstract method ::fetch() from child.'); } } - -module.exports = AbstractGateway; diff --git a/src/gateway/default-gateway.js b/src/gateway/default-gateway.mjs similarity index 87% rename from src/gateway/default-gateway.js rename to src/gateway/default-gateway.mjs index 41b55ce..24f096b 100644 --- a/src/gateway/default-gateway.js +++ b/src/gateway/default-gateway.mjs @@ -1,7 +1,7 @@ -const AbstractGateway = require('./abstract-gateway'); -const querystring = require('query-string').default; +import { AbstractGateway } from './abstract-gateway.mjs'; +import { default as querystring } from 'query-string'; -class DefaultGateway extends AbstractGateway { +export class DefaultGateway extends AbstractGateway { fetch(request, success, error) { const xhr = new XMLHttpRequest(); @@ -46,5 +46,3 @@ class DefaultGateway extends AbstractGateway { xhr.send('POST' === request.method ? JSON.stringify(request.parameters) : null); } } - -module.exports = DefaultGateway; diff --git a/src/gateway/index.js b/src/gateway/index.js deleted file mode 100644 index e374069..0000000 --- a/src/gateway/index.js +++ /dev/null @@ -1,11 +0,0 @@ -const AbstractGateway = require('./abstract-gateway'); -const DefaultGateway = require('./default-gateway'); - -module.exports = { - isGateway: (gateway) => { - return gateway instanceof AbstractGateway; - }, - create: () => { - return new DefaultGateway(); - }, -}; diff --git a/src/gateway/index.mjs b/src/gateway/index.mjs new file mode 100644 index 0000000..59be719 --- /dev/null +++ b/src/gateway/index.mjs @@ -0,0 +1,10 @@ +import { AbstractGateway } from './abstract-gateway.mjs'; +import { DefaultGateway } from './default-gateway.mjs'; + +export function isGateway (gateway) { + return gateway instanceof AbstractGateway; +} + +export function createGateway() { + return new DefaultGateway(); +} diff --git a/src/interaction/banner-interaction-watcher.js b/src/interaction/banner-interaction-watcher.mjs similarity index 90% rename from src/interaction/banner-interaction-watcher.js rename to src/interaction/banner-interaction-watcher.mjs index 79f4864..f25204a 100644 --- a/src/interaction/banner-interaction-watcher.js +++ b/src/interaction/banner-interaction-watcher.mjs @@ -1,21 +1,26 @@ -const State = require('../banner/state'); -const Fingerprint = require('../banner/fingerprint'); -const Events = require('../event/events'); -const intersectionObserverFactory = require('./intersection-observer-factory'); +import { State } from '../banner/state.mjs'; +import { Fingerprint } from '../banner/fingerprint.mjs'; +import { Events } from '../event/events.mjs'; +import { IntersectionObserverFactory } from './intersection-observer-factory.mjs'; -class BannerInteractionWatcher { +export class BannerInteractionWatcher { #started; #bannerManager; #eventBus; #fingerprints; #intersectionObserver; + /** + * @param {BannerManager} bannerManager + * @param {EventBus} eventBus + * @param {Object} interactionOptions + */ constructor (bannerManager, eventBus, interactionOptions) { this.#started = false; this.#bannerManager = bannerManager; this.#eventBus = eventBus; this.#fingerprints = {}; - this.#intersectionObserver = intersectionObserverFactory( + this.#intersectionObserver = IntersectionObserverFactory.create( bannerManager, eventBus, this.#fingerprints, @@ -130,5 +135,3 @@ class BannerInteractionWatcher { } } } - -module.exports = BannerInteractionWatcher; diff --git a/src/interaction/intersection-observer-factory.js b/src/interaction/intersection-observer-factory.js deleted file mode 100644 index 345e77a..0000000 --- a/src/interaction/intersection-observer-factory.js +++ /dev/null @@ -1,111 +0,0 @@ -const Events = require('../event/events'); - -module.exports = (bannerManager, eventBus, fingerprints, defaultIntersectionRatio, intersectionRatioMap, firstTimeSeenTimeout) => { - let sortedIntersectionSet = []; - - for (let pixels in intersectionRatioMap) { - sortedIntersectionSet.push({ - pixels: parseInt(pixels), - ratio: intersectionRatioMap[pixels], - }); - } - - sortedIntersectionSet = sortedIntersectionSet.sort((a, b) => b.pixels - a.pixels); - - const resolveIntersectionRatio = element => { - const style = getComputedStyle(element); - const width = element.offsetWidth - (parseFloat(style.paddingLeft) + parseFloat(style.paddingRight)) - (parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth)); - const height = element.offsetHeight - (parseFloat(style.paddingTop) + parseFloat(style.paddingBottom)) - (parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth)); - const pixels = width * height; - - for (let item of sortedIntersectionSet) { - if (pixels >= item.pixels) { - return item.ratio; - } - } - - return defaultIntersectionRatio; - } - - return new IntersectionObserver(entries => { - const intersectionChangesEventArgs = []; - let firstTimeSeenMetadata = {}; - let firstTimeFullySeenMetadata = {}; - - for (let entry of entries) { - const fingerprint = entry.target.dataset.ampBannerFingerprint; - const banner = bannerManager.getBannerByFingerprint(fingerprint); - - if (!banner) { - continue; - } - - const fingerprintMetadata = fingerprints[fingerprint]; - - if (!fingerprintMetadata) { - continue; - } - - const fingerprintArgs = { - fingerprint: fingerprintMetadata.fingerprint, - element: entry.target, - banner: banner, - } - - intersectionChangesEventArgs.push({ - ...fingerprintArgs, - entry, - }); - - if (!fingerprintMetadata.alreadySeen) { - const isIntersecting = entry.intersectionRatio >= resolveIntersectionRatio(entry.target); - - firstTimeSeenMetadata[fingerprint] = (!(fingerprint in firstTimeSeenMetadata) || (!firstTimeSeenMetadata[fingerprint].isIntersecting && isIntersecting)) - ? { fingerprintArgs, fingerprintMetadata, isIntersecting } - : firstTimeSeenMetadata[fingerprint]; - } - - if (!fingerprintMetadata.alreadyFullySeen) { - const isFullyIntersecting = 1 <= entry.intersectionRatio; - - firstTimeFullySeenMetadata[fingerprint] = (!(fingerprint in firstTimeFullySeenMetadata) || (!firstTimeFullySeenMetadata[fingerprint].isFullyIntersecting && isFullyIntersecting)) - ? { fingerprintArgs, fingerprintMetadata, isFullyIntersecting } - : firstTimeFullySeenMetadata[fingerprint]; - } - } - - for (let firstTimeSeenRow of Object.values(firstTimeSeenMetadata)) { - const { fingerprintArgs, fingerprintMetadata, isIntersecting } = firstTimeSeenRow; - - if (isIntersecting && !fingerprintMetadata.alreadySeen && null === fingerprintMetadata.firstTimeSeenTimeoutId) { - fingerprintMetadata.firstTimeSeenTimeoutId = setTimeout(() => { - fingerprintMetadata.alreadySeen = true; - eventBus.dispatch(Events.ON_BANNER_FIRST_TIME_SEEN, fingerprintArgs); - }, firstTimeSeenTimeout); - } else if (!isIntersecting && null !== fingerprintMetadata.firstTimeSeenTimeoutId) { - clearTimeout(fingerprintMetadata.firstTimeSeenTimeoutId); - fingerprintMetadata.firstTimeSeenTimeoutId = null; - } - } - - for (let firstTimeFullySeenRow of Object.values(firstTimeFullySeenMetadata)) { - const { fingerprintArgs, fingerprintMetadata, isFullyIntersecting } = firstTimeFullySeenRow; - - if (isFullyIntersecting && !fingerprintMetadata.alreadyFullySeen && null === fingerprintMetadata.firstTimeFullySeenTimeoutId) { - fingerprintMetadata.firstTimeFullySeenTimeoutId = setTimeout(() => { - fingerprintMetadata.alreadyFullySeen = true; - eventBus.dispatch(Events.ON_BANNER_FIRST_TIME_FULLY_SEEN, fingerprintArgs); - }, firstTimeSeenTimeout); - } else if (!isFullyIntersecting && null !== fingerprintMetadata.firstTimeFullySeenTimeoutId) { - clearTimeout(fingerprintMetadata.firstTimeFullySeenTimeoutId); - fingerprintMetadata.firstTimeFullySeenTimeoutId = null; - } - } - - for (let eventArgs of intersectionChangesEventArgs) { - eventBus.dispatch(Events.ON_BANNER_INTERSECTION_CHANGED, eventArgs); - } - }, { - threshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1], - }); -}; diff --git a/src/interaction/intersection-observer-factory.mjs b/src/interaction/intersection-observer-factory.mjs new file mode 100644 index 0000000..373b5bc --- /dev/null +++ b/src/interaction/intersection-observer-factory.mjs @@ -0,0 +1,121 @@ +import { Events } from '../event/events.mjs'; + +export class IntersectionObserverFactory { + /** + * @param {BannerManager} bannerManager + * @param {EventBus} eventBus + * @param {Object} fingerprints + * @param {Number} defaultIntersectionRatio + * @param {Object} intersectionRatioMap + * @param {Number} firstTimeSeenTimeout + */ + static create(bannerManager, eventBus, fingerprints, defaultIntersectionRatio, intersectionRatioMap, firstTimeSeenTimeout) { + let sortedIntersectionSet = []; + + for (let pixels in intersectionRatioMap) { + sortedIntersectionSet.push({ + pixels: parseInt(pixels), + ratio: intersectionRatioMap[pixels], + }); + } + + sortedIntersectionSet = sortedIntersectionSet.sort((a, b) => b.pixels - a.pixels); + + const resolveIntersectionRatio = element => { + const style = getComputedStyle(element); + const width = element.offsetWidth - (parseFloat(style.paddingLeft) + parseFloat(style.paddingRight)) - (parseFloat(style.borderLeftWidth) + parseFloat(style.borderRightWidth)); + const height = element.offsetHeight - (parseFloat(style.paddingTop) + parseFloat(style.paddingBottom)) - (parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth)); + const pixels = width * height; + + for (let item of sortedIntersectionSet) { + if (pixels >= item.pixels) { + return item.ratio; + } + } + + return defaultIntersectionRatio; + } + + return new IntersectionObserver(entries => { + const intersectionChangesEventArgs = []; + let firstTimeSeenMetadata = {}; + let firstTimeFullySeenMetadata = {}; + + for (let entry of entries) { + const fingerprint = entry.target.dataset.ampBannerFingerprint; + const banner = bannerManager.getBannerByFingerprint(fingerprint); + + if (!banner) { + continue; + } + + const fingerprintMetadata = fingerprints[fingerprint]; + + if (!fingerprintMetadata) { + continue; + } + + const fingerprintArgs = { + fingerprint: fingerprintMetadata.fingerprint, + element: entry.target, + banner: banner, + } + + intersectionChangesEventArgs.push({ + ...fingerprintArgs, + entry, + }); + + if (!fingerprintMetadata.alreadySeen) { + const isIntersecting = entry.intersectionRatio >= resolveIntersectionRatio(entry.target); + + firstTimeSeenMetadata[fingerprint] = (!(fingerprint in firstTimeSeenMetadata) || (!firstTimeSeenMetadata[fingerprint].isIntersecting && isIntersecting)) + ? { fingerprintArgs, fingerprintMetadata, isIntersecting } + : firstTimeSeenMetadata[fingerprint]; + } + + if (!fingerprintMetadata.alreadyFullySeen) { + const isFullyIntersecting = 1 <= entry.intersectionRatio; + + firstTimeFullySeenMetadata[fingerprint] = (!(fingerprint in firstTimeFullySeenMetadata) || (!firstTimeFullySeenMetadata[fingerprint].isFullyIntersecting && isFullyIntersecting)) + ? { fingerprintArgs, fingerprintMetadata, isFullyIntersecting } + : firstTimeFullySeenMetadata[fingerprint]; + } + } + + for (let firstTimeSeenRow of Object.values(firstTimeSeenMetadata)) { + const { fingerprintArgs, fingerprintMetadata, isIntersecting } = firstTimeSeenRow; + + if (isIntersecting && !fingerprintMetadata.alreadySeen && null === fingerprintMetadata.firstTimeSeenTimeoutId) { + fingerprintMetadata.firstTimeSeenTimeoutId = setTimeout(() => { + fingerprintMetadata.alreadySeen = true; + eventBus.dispatch(Events.ON_BANNER_FIRST_TIME_SEEN, fingerprintArgs); + }, firstTimeSeenTimeout); + } else if (!isIntersecting && null !== fingerprintMetadata.firstTimeSeenTimeoutId) { + clearTimeout(fingerprintMetadata.firstTimeSeenTimeoutId); + fingerprintMetadata.firstTimeSeenTimeoutId = null; + } + } + + for (let firstTimeFullySeenRow of Object.values(firstTimeFullySeenMetadata)) { + const { fingerprintArgs, fingerprintMetadata, isFullyIntersecting } = firstTimeFullySeenRow; + + if (isFullyIntersecting && !fingerprintMetadata.alreadyFullySeen && null === fingerprintMetadata.firstTimeFullySeenTimeoutId) { + fingerprintMetadata.firstTimeFullySeenTimeoutId = setTimeout(() => { + fingerprintMetadata.alreadyFullySeen = true; + eventBus.dispatch(Events.ON_BANNER_FIRST_TIME_FULLY_SEEN, fingerprintArgs); + }, firstTimeSeenTimeout); + } else if (!isFullyIntersecting && null !== fingerprintMetadata.firstTimeFullySeenTimeoutId) { + clearTimeout(fingerprintMetadata.firstTimeFullySeenTimeoutId); + fingerprintMetadata.firstTimeFullySeenTimeoutId = null; + } + } + + for (let eventArgs of intersectionChangesEventArgs) { + eventBus.dispatch(Events.ON_BANNER_INTERSECTION_CHANGED, eventArgs); + } + }, { + threshold: [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1], + }); + } +} diff --git a/src/metrics/debug-receiver.js b/src/metrics/debug-receiver.mjs similarity index 58% rename from src/metrics/debug-receiver.js rename to src/metrics/debug-receiver.mjs index bec200f..17d9f40 100644 --- a/src/metrics/debug-receiver.js +++ b/src/metrics/debug-receiver.mjs @@ -1,3 +1,3 @@ -module.exports = (eventName, eventArgs) => { +export default (eventName, eventArgs) => { console.log('Sending metrics.', {eventName, eventArgs}); }; diff --git a/src/metrics/events.js b/src/metrics/events.mjs similarity index 92% rename from src/metrics/events.js rename to src/metrics/events.mjs index d89be80..5295b98 100644 --- a/src/metrics/events.js +++ b/src/metrics/events.mjs @@ -1,4 +1,4 @@ -class Events { +export class Events { static get BANNER_LOADED() { return 'amp:banner:loaded'; } @@ -24,5 +24,3 @@ class Events { ] } } - -module.exports = Events; diff --git a/src/metrics/gtag-receiver.js b/src/metrics/gtag-receiver.mjs similarity index 90% rename from src/metrics/gtag-receiver.js rename to src/metrics/gtag-receiver.mjs index 4563b7f..75f9275 100644 --- a/src/metrics/gtag-receiver.js +++ b/src/metrics/gtag-receiver.mjs @@ -1,6 +1,6 @@ let warned = false; -module.exports = (eventName, eventArgs) => { +export default (eventName, eventArgs) => { if (!('gtag' in window) || 'function' !== typeof window.gtag) { !warned && console.warn('Unable to send metrics to Google Analytics because the function gtag() does not occur in the window.'); warned = true; diff --git a/src/metrics/gtm-receiver.js b/src/metrics/gtm-receiver.mjs similarity index 90% rename from src/metrics/gtm-receiver.js rename to src/metrics/gtm-receiver.mjs index fbc6d47..b505b77 100644 --- a/src/metrics/gtm-receiver.js +++ b/src/metrics/gtm-receiver.mjs @@ -1,6 +1,6 @@ let warned = false; -module.exports = (eventName, eventArgs) => { +export default (eventName, eventArgs) => { if (!('dataLayer' in window)) { !warned && console.warn('Unable to send metrics to GTM because the dataLayer does not occur in the window.'); warned = true; diff --git a/src/metrics/metrics-events-listener.js b/src/metrics/metrics-events-listener.mjs similarity index 94% rename from src/metrics/metrics-events-listener.js rename to src/metrics/metrics-events-listener.mjs index d3032c5..b8baa0a 100644 --- a/src/metrics/metrics-events-listener.js +++ b/src/metrics/metrics-events-listener.mjs @@ -1,8 +1,8 @@ -const MetricsEvents = require('./events'); -const Events = require('../event/events'); -const State = require('../banner/state'); +import { Events as MetricsEvents } from './events.mjs'; +import { Events } from '../event/events.mjs'; +import { State } from '../banner/state.mjs'; -class MetricsEventsListener { +export class MetricsEventsListener { #metricsSender; #eventBus; #channelCode; @@ -87,5 +87,3 @@ class MetricsEventsListener { } } } - -module.exports = MetricsEventsListener; diff --git a/src/metrics/metrics-sender.js b/src/metrics/metrics-sender.mjs similarity index 81% rename from src/metrics/metrics-sender.js rename to src/metrics/metrics-sender.mjs index 0504913..855154d 100644 --- a/src/metrics/metrics-sender.js +++ b/src/metrics/metrics-sender.mjs @@ -1,10 +1,10 @@ -const plausibleReceiver = require('./plausible-receiver'); -const gtagReceiver = require('./gtag-receiver'); -const gtmReceiver = require('./gtm-receiver'); -const debugReceiver = require('./debug-receiver'); -const MetricsEvents = require('./events'); +import { Events as MetricsEvents } from './events.mjs'; +import { default as plausibleReceiver } from './plausible-receiver.mjs'; +import { default as gtagReceiver } from './gtag-receiver.mjs'; +import { default as gtmReceiver } from './gtm-receiver.mjs'; +import { default as debugReceiver } from './debug-receiver.mjs'; -class MetricsSender { +export class MetricsSender { #callbacks; #disabledEvents; @@ -19,7 +19,7 @@ class MetricsSender { static createFromReceivers(receivers, disabledEvents) { if (!receivers) { - return new MetricsSender([]); + return new MetricsSender([], disabledEvents); } receivers = Array.isArray(receivers) ? receivers : [receivers]; @@ -70,5 +70,3 @@ class MetricsSender { } } } - -module.exports = MetricsSender; diff --git a/src/metrics/plausible-receiver.js b/src/metrics/plausible-receiver.mjs similarity index 90% rename from src/metrics/plausible-receiver.js rename to src/metrics/plausible-receiver.mjs index 77dbe22..4db5e41 100644 --- a/src/metrics/plausible-receiver.js +++ b/src/metrics/plausible-receiver.mjs @@ -1,6 +1,6 @@ let warned = false; -module.exports = (eventName, eventArgs) => { +export default (eventName, eventArgs) => { if (!('plausible' in window) || 'function' !== typeof window.plausible) { !warned && console.warn('Unable to send metrics to Plausible because the function plausible() does not occur in the window.'); warned = true; diff --git a/src/renderer/banner-renderer.js b/src/renderer/banner-renderer.js deleted file mode 100644 index fc09505..0000000 --- a/src/renderer/banner-renderer.js +++ /dev/null @@ -1,41 +0,0 @@ -const template = require('lodash/template'); -const internal = require('../utils/internal-state'); - -class TemplateLoader { - constructor (templates) { - internal(this).templates = templates; - internal(this).compiled = {}; - } - - getTemplate(displayType) { - const privateProperties = internal(this); - - if (displayType in privateProperties.compiled) { - return privateProperties.compiled[displayType]; - } - - if (!(displayType in privateProperties.templates)) { - throw new Error(`Template with type "${displayType}" not found.`); - } - - return privateProperties.compiled[displayType] = template(privateProperties.templates[displayType]); - } -} - -class BannerRenderer { - constructor (templates) { - internal(this).loader = new TemplateLoader(templates); - } - - /** - * @param {ManagedBanner} banner - */ - render(banner) { - return internal(this).loader.getTemplate(banner.positionData.displayType)({ - banner: banner, - data: banner.bannerData, - }); - } -} - -module.exports = BannerRenderer; diff --git a/src/renderer/banner-renderer.mjs b/src/renderer/banner-renderer.mjs new file mode 100644 index 0000000..712f60c --- /dev/null +++ b/src/renderer/banner-renderer.mjs @@ -0,0 +1,20 @@ +import { TemplateLoader } from './temnplate-loader.mjs'; + +export class BannerRenderer { + #loader; + + constructor (templates) { + this.#loader = new TemplateLoader(templates); + } + + /** + * @param {ManagedBanner} banner + */ + render(banner) { + return this.#loader.getTemplate(banner.positionData.displayType)({ + banner: banner, + data: banner.bannerData, + }); + } +} + diff --git a/src/renderer/temnplate-loader.mjs b/src/renderer/temnplate-loader.mjs new file mode 100644 index 0000000..d93a7a4 --- /dev/null +++ b/src/renderer/temnplate-loader.mjs @@ -0,0 +1,23 @@ +import template from 'lodash/template.js'; + +export class TemplateLoader { + #templates; + #compiled; + + constructor (templates) { + this.#templates = templates; + this.#compiled = {}; + } + + getTemplate(displayType) { + if (displayType in this.#compiled) { + return this.#compiled[displayType]; + } + + if (!(displayType in this.#templates)) { + throw new Error(`Template with type "${displayType}" not found.`); + } + + return this.#compiled[displayType] = template(this.#templates[displayType]); + } +} diff --git a/src/request/embed-url-factory.js b/src/request/embed-url-factory.mjs similarity index 66% rename from src/request/embed-url-factory.js rename to src/request/embed-url-factory.mjs index c75b19d..7f1eb6c 100644 --- a/src/request/embed-url-factory.js +++ b/src/request/embed-url-factory.mjs @@ -1,20 +1,23 @@ -const internal = require('../utils/internal-state'); -const Resource = require("./resource"); -const querystring = require('query-string').default; +import { Resource } from './resource.mjs'; +import { default as querystring } from 'query-string'; + +export class EmbedUrlFactory { + #endpoint; + #locale; + #defaultResources; -class EmbedUrlFactory { constructor (url, channel) { - internal(this).endpoint = `${url}/preview/position/${encodeURIComponent(channel)}`; - internal(this).locale = null; - internal(this).defaultResources = {}; + this.#endpoint = `${url}/preview/position/${encodeURIComponent(channel)}`; + this.#locale = null; + this.#defaultResources = {}; } set locale(locale) { - internal(this).locale = locale; + this.#locale = locale; } addDefaultResource(name, value) { - const defaultResources = internal(this).defaultResources; + const defaultResources = this.#defaultResources; const resource = new Resource(name, value); if (resource.name in defaultResources) { @@ -27,8 +30,7 @@ class EmbedUrlFactory { } create(position, resources = {}, options = {}) { - const props = internal(this); - const allResources = props.defaultResources; + const allResources = this.#defaultResources; for (let key in resources) { const resource = new Resource(key, resources[key]); @@ -60,14 +62,12 @@ class EmbedUrlFactory { params.options = optionsParam; } - if (null !== props.locale) { - params.locale = props.locale; + if (null !== this.#locale) { + params.locale = this.#locale; } const query = querystring.stringify(params); - return `${props.endpoint}/${encodeURIComponent(position)}${'' !== query ? ('?' + query) : ''}` + return `${this.#endpoint}/${encodeURIComponent(position)}${'' !== query ? ('?' + query) : ''}` } } - -module.exports = EmbedUrlFactory; diff --git a/src/request/request-factory.js b/src/request/request-factory.js deleted file mode 100644 index 4f71f6b..0000000 --- a/src/request/request-factory.js +++ /dev/null @@ -1,41 +0,0 @@ -const Resource = require('./resource'); -const Request = require('./request'); -const internal = require('../utils/internal-state'); - -class RequestFactory { - constructor (method, url, version, channel) { - internal(this).method = method; - internal(this).endpoint = `${url}/api/v${version}/content/${encodeURIComponent(channel)}`; - internal(this).locale = null; - internal(this).defaultResources = []; - internal(this).origin = null; - } - - set locale(locale) { - internal(this).locale = locale; - } - - set origin(origin) { - internal(this).origin = origin; - } - - addDefaultResource(name, value) { - internal(this).defaultResources.push(new Resource(name, value)); - } - - create() { - const _internal = internal(this); - const headers = []; - - if ('string' === typeof _internal.origin && '' !== _internal.origin) { - headers.push({ - name: 'X-Amp-Origin', - value: _internal.origin, - }); - } - - return new Request(_internal.method, _internal.endpoint, _internal.locale, _internal.defaultResources, headers); - } -} - -module.exports = RequestFactory; diff --git a/src/request/request-factory.mjs b/src/request/request-factory.mjs new file mode 100644 index 0000000..af95828 --- /dev/null +++ b/src/request/request-factory.mjs @@ -0,0 +1,43 @@ +import { Resource } from './resource.mjs'; +import { Request } from './request.mjs'; + +export class RequestFactory { + #method; + #endpoint; + #locale; + #defaultResources; + #origin; + + constructor (method, url, version, channel) { + this.#method = method; + this.#endpoint = `${url}/api/v${version}/content/${encodeURIComponent(channel)}`; + this.#locale = null; + this.#defaultResources = []; + this.#origin = null; + } + + set locale(locale) { + this.#locale = locale; + } + + set origin(origin) { + this.#origin = origin; + } + + addDefaultResource(name, value) { + this.#defaultResources.push(new Resource(name, value)); + } + + create() { + const headers = []; + + if ('string' === typeof this.#origin && '' !== this.#origin) { + headers.push({ + name: 'X-Amp-Origin', + value: this.#origin, + }); + } + + return new Request(this.#method, this.#endpoint, this.#locale, this.#defaultResources, headers); + } +} diff --git a/src/request/request.js b/src/request/request.mjs similarity index 58% rename from src/request/request.js rename to src/request/request.mjs index 3b6dc36..f9246aa 100644 --- a/src/request/request.js +++ b/src/request/request.mjs @@ -1,31 +1,24 @@ -const Resource = require('./resource'); -const internal = require('../utils/internal-state'); +import { Resource } from './resource.mjs'; -const parseQueryParameter = (query) => { - const json = Object.assign({}, query); - let position, resource; +export class Request { + #method; + #endpoint; + #locale; + #query; + #defaultResources; + #headers; - for (position in json) { - for (resource in json[position]) { - json[position][resource] = json[position][resource].value; - } - } - - return json; -}; - -class Request { constructor(method, endpoint, locale = null, defaultResources = [], headers = []) { - internal(this).method = method; - internal(this).endpoint = endpoint; - internal(this).locale = locale; - internal(this).query = {}; - internal(this).defaultResources = defaultResources; - internal(this).headers = headers; + this.#method = method; + this.#endpoint = endpoint; + this.#locale = locale; + this.#query = {}; + this.#defaultResources = defaultResources; + this.#headers = headers; } addPosition(position, resources = []) { - const query = internal(this).query; + const query = this.#query; if (position in query) { throw new Error('Position "' + position + '" already exists.'); @@ -33,7 +26,7 @@ class Request { query[position] = {}; - this.addPositionResources(position, internal(this).defaultResources); + this.addPositionResources(position, this.#defaultResources); this.addPositionResources(position, resources); } @@ -48,7 +41,7 @@ class Request { throw new TypeError('Argument resource must be instance of Resource class.'); } - const query = internal(this).query; + const query = this.#query; if (!(position in query)) { throw new Error('Missing position "' + position + '".'); @@ -66,19 +59,19 @@ class Request { } get method() { - return internal(this).method; + return this.#method; } get endpoint() { - return internal(this).endpoint; + return this.#endpoint; } get locale() { - return internal(this).locale; + return this.#locale; } get parameters() { - const queryParameter = parseQueryParameter(internal(this).query); + const queryParameter = this.#parseQueryParameter(this.#query); const params = { query: 'GET' === this.method ? JSON.stringify(queryParameter) : queryParameter, }; @@ -91,8 +84,19 @@ class Request { } get headers() { - return internal(this).headers; + return this.#headers; } -} -module.exports = Request; + #parseQueryParameter = (query) => { + const json = Object.assign({}, query); + let position, resource; + + for (position in json) { + for (resource in json[position]) { + json[position][resource] = json[position][resource].value; + } + } + + return json; + } +} diff --git a/src/request/resource.js b/src/request/resource.js deleted file mode 100644 index 938a9e5..0000000 --- a/src/request/resource.js +++ /dev/null @@ -1,28 +0,0 @@ -const internal = require('../utils/internal-state'); - -function getValueArray(value) { - return Array.isArray(value) ? value : [ value ]; -} - -class Resource { - constructor(name, value) { - internal(this).name = name; - internal(this).value = getValueArray(value); - } - - get name() { - return internal(this).name; - } - - get value() { - return internal(this).value; - } - - withValues(value) { - return new Resource(this.name, getValueArray(value).concat(this.value).filter((value, index, array) => { - return array.indexOf(value) === index; - })); - } -} - -module.exports = Resource; diff --git a/src/request/resource.mjs b/src/request/resource.mjs new file mode 100644 index 0000000..3808f61 --- /dev/null +++ b/src/request/resource.mjs @@ -0,0 +1,27 @@ +export class Resource { + #name; + #value; + + constructor(name, value) { + this.#name = name; + this.#value = this.#getValueArray(value); + } + + get name() { + return this.#name; + } + + get value() { + return this.#value; + } + + withValues(value) { + return new Resource(this.name, this.#getValueArray(value).concat(this.value).filter((value, index, array) => { + return array.indexOf(value) === index; + })); + } + + #getValueArray(value) { + return Array.isArray(value) ? value : [ value ]; + } +} diff --git a/src/template/index.js b/src/template/index.js deleted file mode 100644 index 2838e26..0000000 --- a/src/template/index.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - single: require('./single'), - random: require('./random'), - multiple: require('./multiple'), -}; diff --git a/src/template/index.mjs b/src/template/index.mjs new file mode 100644 index 0000000..a17f616 --- /dev/null +++ b/src/template/index.mjs @@ -0,0 +1,9 @@ +import { default as single } from './single.mjs'; +import { default as random } from './random.mjs'; +import { default as multiple } from './multiple.mjs'; + +export default { + single: single, + random: random, + multiple: multiple, +}; diff --git a/src/template/multiple.js b/src/template/multiple.mjs similarity index 99% rename from src/template/multiple.js rename to src/template/multiple.mjs index 9a78348..f6f26e7 100644 --- a/src/template/multiple.js +++ b/src/template/multiple.mjs @@ -2,7 +2,7 @@ * {ManagedBanner} banner * {Array} data */ -module.exports = ` +export default `
<% for (index in data) { var b = data[index]; %> diff --git a/src/template/random.js b/src/template/random.mjs similarity index 98% rename from src/template/random.js rename to src/template/random.mjs index 2501550..16a76f6 100644 --- a/src/template/random.js +++ b/src/template/random.mjs @@ -2,7 +2,7 @@ * {ManagedBanner} banner * {BannerData} data */ -module.exports = ` +export default `
diff --git a/src/template/single.js b/src/template/single.mjs similarity index 98% rename from src/template/single.js rename to src/template/single.mjs index 3cce6c9..c9dc0f3 100644 --- a/src/template/single.js +++ b/src/template/single.mjs @@ -2,7 +2,7 @@ * {ManagedBanner} banner * {BannerData} data */ -module.exports = ` +export default `
diff --git a/src/utils/internal-state.js b/src/utils/internal-state.js deleted file mode 100644 index 31d4f4b..0000000 --- a/src/utils/internal-state.js +++ /dev/null @@ -1,9 +0,0 @@ -const properties = new WeakMap(); - -module.exports = (key) => { - if (!properties.has(key)) { - properties.set(key, {}); - } - - return properties.get(key); -}; diff --git a/src/utils/randomizer.js b/src/utils/randomizer.mjs similarity index 92% rename from src/utils/randomizer.js rename to src/utils/randomizer.mjs index 48b01b6..2e6d4f1 100644 --- a/src/utils/randomizer.js +++ b/src/utils/randomizer.mjs @@ -1,4 +1,4 @@ -class Randomizer { +export class Randomizer { static randomByWeights(items, weightProperty = 'weight') { const distributions = {}; @@ -25,5 +25,3 @@ class Randomizer { return items[key] ? items[key] : items[0]; } } - -module.exports = Randomizer; diff --git a/src/utils/sequence-generator.js b/src/utils/sequence-generator.js deleted file mode 100644 index 5c5981d..0000000 --- a/src/utils/sequence-generator.js +++ /dev/null @@ -1,14 +0,0 @@ -const internal = require('./internal-state'); - -class SequenceGenerator { - - constructor (start = 1) { - internal(this).lastId = start -1; - } - - getNextIdentifier() { - return ++internal(this).lastId; - } -} - -module.exports = SequenceGenerator; diff --git a/src/utils/sequence-generator.mjs b/src/utils/sequence-generator.mjs new file mode 100644 index 0000000..e065f4f --- /dev/null +++ b/src/utils/sequence-generator.mjs @@ -0,0 +1,11 @@ +export class SequenceGenerator { + #lastId; + + constructor (start = 1) { + this.#lastId = start -1; + } + + getNextIdentifier() { + return ++this.#lastId; + } +} diff --git a/webpack.config.dev.js b/webpack.config.dev.js index de65823..ea1ea5f 100644 --- a/webpack.config.dev.js +++ b/webpack.config.dev.js @@ -4,7 +4,7 @@ module.exports = { mode: 'development', entry: { standard: { - import: './index.js', + import: './index.mjs', filename: 'amp-client.js', library: { type: 'var', @@ -13,7 +13,7 @@ module.exports = { } }, embed: { - import: './index.js', + import: './index.mjs', filename: 'amp-client.embed.js', library: { type: 'var', @@ -29,7 +29,7 @@ module.exports = { rules: [ { loader: 'babel-loader', - test: /\.js$/, + test: /\.mjs$/, include: [ path.resolve(__dirname, 'src'), ], diff --git a/webpack.config.prod.js b/webpack.config.prod.js index 2f6f874..d5fd5e5 100644 --- a/webpack.config.prod.js +++ b/webpack.config.prod.js @@ -3,12 +3,12 @@ const TerserWebpackPlugin = require('terser-webpack-plugin'); const config = { mode: 'production', - entry: './index.js', + entry: './index.mjs', module: { rules: [ { loader: 'babel-loader', - test: /\.js$/, + test: /\.mjs$/, include: [ path.resolve(__dirname, 'src') ], @@ -60,8 +60,8 @@ const standaloneConfig = Object.assign({}, config,{ }, }, externals: { - 'lodash/template': '_.template', - 'lodash/merge': '_.merge', + 'lodash/template.js': '_.template', + 'lodash/merge.js': '_.merge', } });