From a8508f741755bed928d57251ea3b524fd05dbe79 Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Thu, 28 Mar 2024 10:56:09 +0100 Subject: [PATCH 01/16] Add eslint-plugin package --- packages/eslint-plugin/.eslintrc.js | 22 + packages/eslint-plugin/.gitignore | 2 + packages/eslint-plugin/README.md | 48 + packages/eslint-plugin/docs/rules/opticks.md | 35 + packages/eslint-plugin/lib/index.js | 22 + packages/eslint-plugin/lib/rules/toggle.js | 127 ++ packages/eslint-plugin/package.json | 38 + .../eslint-plugin/tests/lib/rules/toggle.js | 91 ++ yarn.lock | 1425 ++++++++++++----- 9 files changed, 1405 insertions(+), 405 deletions(-) create mode 100644 packages/eslint-plugin/.eslintrc.js create mode 100644 packages/eslint-plugin/.gitignore create mode 100644 packages/eslint-plugin/README.md create mode 100644 packages/eslint-plugin/docs/rules/opticks.md create mode 100644 packages/eslint-plugin/lib/index.js create mode 100644 packages/eslint-plugin/lib/rules/toggle.js create mode 100644 packages/eslint-plugin/package.json create mode 100644 packages/eslint-plugin/tests/lib/rules/toggle.js diff --git a/packages/eslint-plugin/.eslintrc.js b/packages/eslint-plugin/.eslintrc.js new file mode 100644 index 0000000..c55c48e --- /dev/null +++ b/packages/eslint-plugin/.eslintrc.js @@ -0,0 +1,22 @@ +"use strict"; + +module.exports = { + root: true, + parserOptions: { + ecmaVersion: 'latest' + }, + extends: [ + "eslint:recommended", + "plugin:eslint-plugin/recommended", + "plugin:node/recommended", + ], + env: { + node: true, + }, + overrides: [ + { + files: ["tests/**/*.js"], + env: { mocha: true }, + }, + ] +}; diff --git a/packages/eslint-plugin/.gitignore b/packages/eslint-plugin/.gitignore new file mode 100644 index 0000000..e507da3 --- /dev/null +++ b/packages/eslint-plugin/.gitignore @@ -0,0 +1,2 @@ +/node_modules +dist \ No newline at end of file diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md new file mode 100644 index 0000000..84816fa --- /dev/null +++ b/packages/eslint-plugin/README.md @@ -0,0 +1,48 @@ +# eslint-plugin-opticks + +Opticks + +## Installation + +You'll first need to install [ESLint](https://eslint.org/): + +```sh +npm i eslint --save-dev +``` + +Next, install `eslint-plugin-opticks`: + +```sh +npm install eslint-plugin-opticks --save-dev +``` + +## Usage + +Add `opticks` to the plugins section of your `.eslintrc` configuration file. You can omit the `eslint-plugin-` prefix: + +```json +{ + "plugins": [ + "opticks" + ] +} +``` + + +Then configure the rules you want to use under the rules section. + +```json +{ + "rules": { + "opticks/rule-name": 2 + } +} +``` + +## Rules + + +TODO: Run eslint-doc-generator to generate the rules list. + + + diff --git a/packages/eslint-plugin/docs/rules/opticks.md b/packages/eslint-plugin/docs/rules/opticks.md new file mode 100644 index 0000000..8df2909 --- /dev/null +++ b/packages/eslint-plugin/docs/rules/opticks.md @@ -0,0 +1,35 @@ +# Opticks (`opticks`) + +Please describe the origin of the rule here. + +## Rule Details + +This rule aims to... + +Examples of **incorrect** code for this rule: + +```js + +// fill me in + +``` + +Examples of **correct** code for this rule: + +```js + +// fill me in + +``` + +### Options + +If there are any options, describe them here. Otherwise, delete this section. + +## When Not To Use It + +Give a short description of when it would be appropriate to turn off this rule. + +## Further Reading + +If there are other links that describe the issue this rule addresses, please include them here in a bulleted list. diff --git a/packages/eslint-plugin/lib/index.js b/packages/eslint-plugin/lib/index.js new file mode 100644 index 0000000..65f1822 --- /dev/null +++ b/packages/eslint-plugin/lib/index.js @@ -0,0 +1,22 @@ +/** + * @fileoverview Opticks + * @author Jop + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const requireIndex = require("requireindex"); + +//------------------------------------------------------------------------------ +// Plugin Definition +//------------------------------------------------------------------------------ + + +// import all rules in lib/rules +module.exports.rules = requireIndex(__dirname + "/rules"); + + + diff --git a/packages/eslint-plugin/lib/rules/toggle.js b/packages/eslint-plugin/lib/rules/toggle.js new file mode 100644 index 0000000..00621d3 --- /dev/null +++ b/packages/eslint-plugin/lib/rules/toggle.js @@ -0,0 +1,127 @@ +/** + * @fileoverview Opticks + * @author Jop + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Rule Definition +//------------------------------------------------------------------------------ + +/** @type {import('eslint').Rule.RuleModule} */ +module.exports = { + meta: { + type: "problem", + docs: { + description: "Detects stale code from expired Opticks experiments", + recommended: false, + url: null, // URL to the documentation page for this rule + }, + fixable: "code", + hasSuggestions: true, + schema: [], // Add a schema if the rule has options + messages: { + ExperimentNotConfigured: + "Looks like this experiment is not configured. Please make sure the experiment is added to the experiments config file.", + ExperimentConcluded: + "Looks like this experiment concluded, and can be cleaned up. The winning variant is {{winningVariant}}.", + AddWinningVariant: + "If the experiment is concluded, add the winning variant.", + VariableAssignment: + "It is okay to assign the result of a toggle to a variable, but you might be better off calling the toggle inline for automatic clean up.", + InvalidNrOfVariants: + "Invalid number of variants. Toggles require either 0, 2, or more variants.", + AddNullBVariant: + "If the b side is not supposed to do anything, add a null value.", + }, + }, + + create(context) { + // QUESTION it seems the test runner reads from `context.settings` + // while .eslintrc.js reads from `settings` + const settings = context.settings || settings; + const { opticks } = settings; + // variables should be defined here + + //---------------------------------------------------------------------- + // Helpers + //---------------------------------------------------------------------- + + // any helper functions should go here or else delete this section + + //---------------------------------------------------------------------- + // Public + //---------------------------------------------------------------------- + + return { + CallExpression: (node) => { + const { + callee: { name }, + } = node; + // TODO: look for imported toggles from opticks only + if (name === "toggle") { + if (node.arguments.length === 2) { + return context.report({ + messageId: "InvalidNrOfVariants", + node, + suggest: [ + { + messageId: "AddNullBVariant", + fix: (fixer) => { + const { range } = node; + // TODO: How to work with multilines + return fixer.insertTextBeforeRange( + [range[1] - 1], + ", null" + ); + }, + }, + ], + }); + } + // Clean up + const winningVariant = opticks.experiments[node.arguments[0].value]; + + if (typeof winningVariant === 'undefined') { + return context.report({ + messageId: "ExperimentNotConfigured", + node + }); + } + + // TODO: Support unlimited amount of arguments + // TODO: Support arrow function replacement + const winningVariantIndex = winningVariant === "a" ? 1 : 2; + const winningVariantContent = node.arguments[winningVariantIndex].raw; + + if (typeof winningVariant === "string") { + return context.report({ + messageId: "ExperimentConcluded", + data: { winningVariant }, + node, + suggests: [ + { + messageId: "AddWinningVariant", + fix: (fixer) => { + // TODO: Add tests + console.log(winningVariantContent); + return fixer.replaceText(node, winningVariantContent); + }, + } + ], + }); + } + + // Discourage variable assignment + if (node.parent.type === "VariableDeclarator") { + return context.report({ + messageId: "VariableAssignment", + node, + }); + } + } + }, + // visitor functions for different types of nodes + }; + }, +}; diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json new file mode 100644 index 0000000..798f034 --- /dev/null +++ b/packages/eslint-plugin/package.json @@ -0,0 +1,38 @@ +{ + "name": "eslint-plugin-opticks", + "version": "0.0.1", + "description": "Opticks", + "keywords": [ + "eslint", + "eslintplugin", + "eslint-plugin" + ], + "author": "Jop de Klein", + "main": "./lib/index.js", + "exports": "./lib/index.js", + "scripts": { + "lint": "npm-run-all \"lint:*\"", + "lint:eslint-docs": "npm-run-all \"update:eslint-docs -- --check\"", + "lint:js": "eslint .", + "test": "mocha tests --recursive", + "update:eslint-docs": "eslint-doc-generator" + }, + "dependencies": { + "requireindex": "^1.2.0" + }, + "devDependencies": { + "eslint": "^8.19.0", + "eslint-doc-generator": "^1.0.0", + "eslint-plugin-eslint-plugin": "^5.0.0", + "eslint-plugin-node": "^11.1.0", + "mocha": "^10.0.0", + "npm-run-all": "^4.1.5" + }, + "engines": { + "node": "^14.17.0 || ^16.0.0 || >= 18.0.0" + }, + "peerDependencies": { + "eslint": ">=7" + }, + "license": "ISC" +} diff --git a/packages/eslint-plugin/tests/lib/rules/toggle.js b/packages/eslint-plugin/tests/lib/rules/toggle.js new file mode 100644 index 0000000..bc941b1 --- /dev/null +++ b/packages/eslint-plugin/tests/lib/rules/toggle.js @@ -0,0 +1,91 @@ +/** + * @fileoverview Opticks + * @author Jop + */ +"use strict"; + +//------------------------------------------------------------------------------ +// Requirements +//------------------------------------------------------------------------------ + +const rule = require("../../../lib/rules/toggle"), + RuleTester = require("eslint").RuleTester; + +//------------------------------------------------------------------------------ +// Tests +//------------------------------------------------------------------------------ + +RuleTester.setDefaultConfig({ + settings: { + opticks: { experiments: { foo: "a", bar: undefined, baz: "b" } }, + }, +}); +const ruleTester = new RuleTester(); + +ruleTester.run("toggle", rule, { + valid: [ + { code: "toggle('bar', 'a', 'b')" }, + { code: "toggle('nonexistent', 'a', 'b')" }, + ], + invalid: [ + { + code: "toggle('foo', 'a', 'b')", + errors: [ + { + message: + "Looks like this experiment concluded, and can be cleaned. The winning variant is a.", + type: "CallExpression", + }, + ], + output: "'a'", + }, + { + code: "toggle('baz', 'a', 'b')", + errors: [ + { + messageId: "ExperimentConcluded", + type: "CallExpression", + }, + ], + output: "'b'", + }, + { + // TODO: make tests work with const too + code: "var intermediateVariable = toggle('bar', 'a', 'b')", + errors: [ + { + messageId: "VariableAssignment", + type: "CallExpression", + }, + ], + output: null, + }, + { + code: "toggle('bar', 'a')", + errors: [ + { + messageId: "InvalidNrOfVariants", + type: "CallExpression", + suggestions: [ + { + messageId: "AddNullBVariant", + output: "toggle('bar', 'a', null)", + }, + ], + }, + ], + output: null, + }, + { + code: `var Foo = styled('div')\` + display: flex; + \${toggle("foo", "a", "b")} + \` + `, + errors: [ + "This toggle is not called from a function, this might not be what you want to do because it might execute before Opticks received the user id. Is this intended?", + ], + output: null, + }, + ], +}); diff --git a/yarn.lock b/yarn.lock index 5f3c4c9..910e91e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -13,64 +13,64 @@ __metadata: linkType: hard "@ampproject/remapping@npm:^2.2.0": - version: 2.2.1 - resolution: "@ampproject/remapping@npm:2.2.1" + version: 2.3.0 + resolution: "@ampproject/remapping@npm:2.3.0" dependencies: - "@jridgewell/gen-mapping": "npm:^0.3.0" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: 92ce5915f8901d8c7cd4f4e6e2fe7b9fd335a29955b400caa52e0e5b12ca3796ada7c2f10e78c9c5b0f9c2539dff0ffea7b19850a56e1487aa083531e1e46d43 + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 81d63cca5443e0f0c72ae18b544cc28c7c0ec2cea46e7cb888bb0e0f411a1191d0d6b7af798d54e30777d8d1488b2ec0732aac2be342d3d7d3ffd271c6f489ed languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/code-frame@npm:7.23.5" +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.22.13, @babel/code-frame@npm:^7.23.5, @babel/code-frame@npm:^7.24.1, @babel/code-frame@npm:^7.24.2": + version: 7.24.2 + resolution: "@babel/code-frame@npm:7.24.2" dependencies: - "@babel/highlight": "npm:^7.23.4" - chalk: "npm:^2.4.2" - checksum: a10e843595ddd9f97faa99917414813c06214f4d9205294013e20c70fbdf4f943760da37dec1d998bf3e6fc20fa2918a47c0e987a7e458663feb7698063ad7c6 + "@babel/highlight": "npm:^7.24.2" + picocolors: "npm:^1.0.0" + checksum: d1d4cba89475ab6aab7a88242e1fd73b15ecb9f30c109b69752956434d10a26a52cbd37727c4eca104b6d45227bd1dfce39a6a6f4a14c9b2f07f871e968cf406 languageName: node linkType: hard "@babel/compat-data@npm:^7.23.5": - version: 7.23.5 - resolution: "@babel/compat-data@npm:7.23.5" - checksum: 081278ed46131a890ad566a59c61600a5f9557bd8ee5e535890c8548192532ea92590742fd74bd9db83d74c669ef8a04a7e1c85cdea27f960233e3b83c3a957c + version: 7.24.1 + resolution: "@babel/compat-data@npm:7.24.1" + checksum: 8a1935450345c326b14ea632174696566ef9b353bd0d6fb682456c0774342eeee7654877ced410f24a731d386fdcbf980b75083fc764964d6f816b65792af2f5 languageName: node linkType: hard "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.23.0, @babel/core@npm:^7.23.9": - version: 7.24.0 - resolution: "@babel/core@npm:7.24.0" + version: 7.24.3 + resolution: "@babel/core@npm:7.24.3" dependencies: "@ampproject/remapping": "npm:^2.2.0" - "@babel/code-frame": "npm:^7.23.5" - "@babel/generator": "npm:^7.23.6" + "@babel/code-frame": "npm:^7.24.2" + "@babel/generator": "npm:^7.24.1" "@babel/helper-compilation-targets": "npm:^7.23.6" "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helpers": "npm:^7.24.0" - "@babel/parser": "npm:^7.24.0" + "@babel/helpers": "npm:^7.24.1" + "@babel/parser": "npm:^7.24.1" "@babel/template": "npm:^7.24.0" - "@babel/traverse": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.1" "@babel/types": "npm:^7.24.0" convert-source-map: "npm:^2.0.0" debug: "npm:^4.1.0" gensync: "npm:^1.0.0-beta.2" json5: "npm:^2.2.3" semver: "npm:^6.3.1" - checksum: bb37cbf0bdfd676b246af0a3d9a7932d10573f2d45114fdda02a71889e35530ce13d8930177e78b065d6734b8d45a4fbf7c77f223b1d44b4a28cfe5fefee93ed + checksum: e6e756b6de27d0312514a005688fa1915c521ad4269a388913eff2120a546538078f8488d6d16e86f851872f263cb45a6bbae08738297afb9382600d2ac342a9 languageName: node linkType: hard -"@babel/generator@npm:^7.23.6, @babel/generator@npm:^7.7.2": - version: 7.23.6 - resolution: "@babel/generator@npm:7.23.6" +"@babel/generator@npm:^7.24.1, @babel/generator@npm:^7.7.2": + version: 7.24.1 + resolution: "@babel/generator@npm:7.24.1" dependencies: - "@babel/types": "npm:^7.23.6" - "@jridgewell/gen-mapping": "npm:^0.3.2" - "@jridgewell/trace-mapping": "npm:^0.3.17" + "@babel/types": "npm:^7.24.0" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" jsesc: "npm:^2.5.1" - checksum: 53540e905cd10db05d9aee0a5304e36927f455ce66f95d1253bb8a179f286b88fa7062ea0db354c566fe27f8bb96567566084ffd259f8feaae1de5eccc8afbda + checksum: f0eea7497657cdf68cfb4b7d181588e1498eefd1f303d73b0d8ca9b21a6db27136a6f5beb8f988b6bdcd4249870826080950450fd310951de42ecf36df274881 languageName: node linkType: hard @@ -96,22 +96,22 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.22.15, @babel/helper-create-class-features-plugin@npm:^7.23.6": - version: 7.24.0 - resolution: "@babel/helper-create-class-features-plugin@npm:7.24.0" +"@babel/helper-create-class-features-plugin@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/helper-create-class-features-plugin@npm:7.24.1" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-member-expression-to-functions": "npm:^7.23.0" "@babel/helper-optimise-call-expression": "npm:^7.22.5" - "@babel/helper-replace-supers": "npm:^7.22.20" + "@babel/helper-replace-supers": "npm:^7.24.1" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" "@babel/helper-split-export-declaration": "npm:^7.22.6" semver: "npm:^6.3.1" peerDependencies: "@babel/core": ^7.0.0 - checksum: 341548496df202805489422a160bba75b111d994c64d788a397c35f01784632af48bf06023af8aa2fe72c2c254f8c885b4e0f7f3df5ef17a37370f2feaf80328 + checksum: 45372890634c37deefc81f44b7d958fe210f7da7d8a2239c9849c6041a56536f74bf3aa2d115bc06d5680d0dc49c1303f74a045d76ae0dd1592c7d5c0c268ebc languageName: node linkType: hard @@ -141,7 +141,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.22.15, @babel/helper-member-expression-to-functions@npm:^7.23.0": +"@babel/helper-member-expression-to-functions@npm:^7.23.0": version: 7.23.0 resolution: "@babel/helper-member-expression-to-functions@npm:7.23.0" dependencies: @@ -151,11 +151,11 @@ __metadata: linkType: hard "@babel/helper-module-imports@npm:^7.22.15": - version: 7.22.15 - resolution: "@babel/helper-module-imports@npm:7.22.15" + version: 7.24.3 + resolution: "@babel/helper-module-imports@npm:7.24.3" dependencies: - "@babel/types": "npm:^7.22.15" - checksum: 4e0d7fc36d02c1b8c8b3006dfbfeedf7a367d3334a04934255de5128115ea0bafdeb3e5736a2559917f0653e4e437400d54542da0468e08d3cbc86d3bbfa8f30 + "@babel/types": "npm:^7.24.0" + checksum: 052c188adcd100f5e8b6ff0c9643ddaabc58b6700d3bbbc26804141ad68375a9f97d9d173658d373d31853019e65f62610239e3295cdd58e573bdcb2fded188d languageName: node linkType: hard @@ -183,23 +183,23 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.22.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0": +"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.24.0, @babel/helper-plugin-utils@npm:^7.8.0": version: 7.24.0 resolution: "@babel/helper-plugin-utils@npm:7.24.0" checksum: 90f41bd1b4dfe7226b1d33a4bb745844c5c63e400f9e4e8bf9103a7ceddd7d425d65333b564d9daba3cebd105985764d51b4bd4c95822b97c2e3ac1201a8a5da languageName: node linkType: hard -"@babel/helper-replace-supers@npm:^7.22.20": - version: 7.22.20 - resolution: "@babel/helper-replace-supers@npm:7.22.20" +"@babel/helper-replace-supers@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/helper-replace-supers@npm:7.24.1" dependencies: "@babel/helper-environment-visitor": "npm:^7.22.20" - "@babel/helper-member-expression-to-functions": "npm:^7.22.15" + "@babel/helper-member-expression-to-functions": "npm:^7.23.0" "@babel/helper-optimise-call-expression": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0 - checksum: 6b0858811ad46873817c90c805015d63300e003c5a85c147a17d9845fa2558a02047c3cc1f07767af59014b2dd0fa75b503e5bc36e917f360e9b67bb6f1e79f4 + checksum: d39a3df7892b7c3c0e307fb229646168a9bd35e26a72080c2530729322600e8cff5f738f44a14860a2358faffa741b6a6a0d6749f113387b03ddbfa0ec10e1a0 languageName: node linkType: hard @@ -231,9 +231,9 @@ __metadata: linkType: hard "@babel/helper-string-parser@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/helper-string-parser@npm:7.23.4" - checksum: f348d5637ad70b6b54b026d6544bd9040f78d24e7ec245a0fc42293968181f6ae9879c22d89744730d246ce8ec53588f716f102addd4df8bbc79b73ea10004ac + version: 7.24.1 + resolution: "@babel/helper-string-parser@npm:7.24.1" + checksum: 2f9bfcf8d2f9f083785df0501dbab92770111ece2f90d120352fda6dd2a7d47db11b807d111e6f32aa1ba6d763fe2dc6603d153068d672a5d0ad33ca802632b2 languageName: node linkType: hard @@ -244,41 +244,42 @@ __metadata: languageName: node linkType: hard -"@babel/helper-validator-option@npm:^7.22.15, @babel/helper-validator-option@npm:^7.23.5": +"@babel/helper-validator-option@npm:^7.23.5": version: 7.23.5 resolution: "@babel/helper-validator-option@npm:7.23.5" checksum: af45d5c0defb292ba6fd38979e8f13d7da63f9623d8ab9ededc394f67eb45857d2601278d151ae9affb6e03d5d608485806cd45af08b4468a0515cf506510e94 languageName: node linkType: hard -"@babel/helpers@npm:^7.24.0": - version: 7.24.0 - resolution: "@babel/helpers@npm:7.24.0" +"@babel/helpers@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/helpers@npm:7.24.1" dependencies: "@babel/template": "npm:^7.24.0" - "@babel/traverse": "npm:^7.24.0" + "@babel/traverse": "npm:^7.24.1" "@babel/types": "npm:^7.24.0" - checksum: dd27c9f11c1c5244ef312fae37636f2fcc69c541c46508017b846c4cf680af059f1922ce84e3f778f123a70d027ded75c96070ee8e906f3bc52dc26dc43df608 + checksum: b3445860ae749fc664682b291f092285e949114e8336784ae29f88eb4c176279b01cc6740005a017a0389ae4b4e928d5bbbc01de7da7e400c972e3d6f792063a languageName: node linkType: hard -"@babel/highlight@npm:^7.23.4": - version: 7.23.4 - resolution: "@babel/highlight@npm:7.23.4" +"@babel/highlight@npm:^7.24.2": + version: 7.24.2 + resolution: "@babel/highlight@npm:7.24.2" dependencies: "@babel/helper-validator-identifier": "npm:^7.22.20" chalk: "npm:^2.4.2" js-tokens: "npm:^4.0.0" - checksum: fbff9fcb2f5539289c3c097d130e852afd10d89a3a08ac0b5ebebbc055cc84a4bcc3dcfed463d488cde12dd0902ef1858279e31d7349b2e8cee43913744bda33 + picocolors: "npm:^1.0.0" + checksum: 98ce00321daedeed33a4ed9362dc089a70375ff1b3b91228b9f05e6591d387a81a8cba68886e207861b8871efa0bc997ceabdd9c90f6cce3ee1b2f7f941b42db languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.0": - version: 7.24.0 - resolution: "@babel/parser@npm:7.24.0" +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.0, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.24.0, @babel/parser@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/parser@npm:7.24.1" bin: parser: ./bin/babel-parser.js - checksum: 77593d0b9de9906823c4d653bb6cda1c7593837598516330f655f70cba6224a37def7dbe5b4dad0038482d407d8d209eb8be5f48ca9a13357d769f829c5adb8e + checksum: d2a8b99aa5f33182b69d5569367403a40e7c027ae3b03a1f81fd8ac9b06ceb85b31f6ee4267fb90726dc2ac99909c6bdaa9cf16c379efab73d8dfe85cee32c50 languageName: node linkType: hard @@ -315,14 +316,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-syntax-flow@npm:7.23.3" +"@babel/plugin-syntax-flow@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-syntax-flow@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8a5e1e8b6a3728a2c8fe6d70c09a43642e737d9c0485e1b041cd3a6021ef05376ec3c9137be3b118c622ba09b5770d26fdc525473f8d06d4ab9e46de2783dd0a + checksum: 618de04360a96111408abdaafaba2efbaef0d90faad029d50e0281eaad5d7c7bd2ce4420bbac0ee27ad84c2b7bbc3e48f782064f81ed5bc40c398637991004c7 languageName: node linkType: hard @@ -348,14 +349,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.23.3, @babel/plugin-syntax-jsx@npm:^7.7.2": - version: 7.23.3 - resolution: "@babel/plugin-syntax-jsx@npm:7.23.3" +"@babel/plugin-syntax-jsx@npm:^7.24.1, @babel/plugin-syntax-jsx@npm:^7.7.2": + version: 7.24.1 + resolution: "@babel/plugin-syntax-jsx@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 563bb7599b868773f1c7c1d441ecc9bc53aeb7832775da36752c926fc402a1fa5421505b39e724f71eb217c13e4b93117e081cac39723b0e11dac4c897f33c3e + checksum: 6cec76fbfe6ca81c9345c2904d8d9a8a0df222f9269f0962ed6eb2eb8f3f10c2f15e993d1ef09dbaf97726bf1792b5851cf5bd9a769f966a19448df6be95d19a languageName: node linkType: hard @@ -436,130 +437,130 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-typescript@npm:^7.23.3, @babel/plugin-syntax-typescript@npm:^7.7.2": - version: 7.23.3 - resolution: "@babel/plugin-syntax-typescript@npm:7.23.3" +"@babel/plugin-syntax-typescript@npm:^7.24.1, @babel/plugin-syntax-typescript@npm:^7.7.2": + version: 7.24.1 + resolution: "@babel/plugin-syntax-typescript@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4d6e9cdb9d0bfb9bd9b220fc951d937fce2ca69135ec121153572cebe81d86abc9a489208d6b69ee5f10cadcaeffa10d0425340a5029e40e14a6025021b90948 + checksum: 7a81e277dcfe3138847e8e5944e02a42ff3c2e864aea6f33fd9b70d1556d12b0e70f0d56cc1985d353c91bcbf8fe163e6cc17418da21129b7f7f1d8b9ac00c93 languageName: node linkType: hard "@babel/plugin-transform-class-properties@npm:^7.22.5": - version: 7.23.3 - resolution: "@babel/plugin-transform-class-properties@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-class-properties@npm:7.24.1" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.24.1" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bca30d576f539eef216494b56d610f1a64aa9375de4134bc021d9660f1fa735b1d7cc413029f22abc0b7cb737e3a57935c8ae9d8bd1730921ccb1deebce51bfd + checksum: 00dff042ac9df4ae67b5ef98b1137cc72e0a24e6d911dc200540a8cb1f00b4cff367a922aeb22da17da662079f0abcd46ee1c5f4cdf37ceebf6ff1639bb9af27 languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.23.3" +"@babel/plugin-transform-flow-strip-types@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-flow": "npm:^7.23.3" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/plugin-syntax-flow": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9ab627f9668fc1f95564b26bffd6706f86205960d9ccc168236752fbef65dbe10aa0ce74faae12f48bb3b72ec7f38ef2a78b4874c222c1e85754e981639f3b33 + checksum: e6aa9cbad0441867598d390d4df65bc8c6b797574673e4eedbdae0cc528e81e00f4b2cd38f7d138b0f04bcdd2540384a9812d5d76af5abfa06aee1c7fc20ca58 languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.23.0, @babel/plugin-transform-modules-commonjs@npm:^7.23.3": - version: 7.23.3 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.23.3" +"@babel/plugin-transform-modules-commonjs@npm:^7.23.0, @babel/plugin-transform-modules-commonjs@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.24.1" dependencies: "@babel/helper-module-transforms": "npm:^7.23.3" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-simple-access": "npm:^7.22.5" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 5c8840c5c9ecba39367ae17c973ed13dbc43234147b77ae780eec65010e2a9993c5d717721b23e8179f7cf49decdd325c509b241d69cfbf92aa647a1d8d5a37d + checksum: efb3ea2047604a7eb44a9289311ebb29842fe6510ff8b66a77a60440448c65e1312a60dc48191ed98246bdbd163b5b6f3348a0669bcc0e3809e69c7c776b20fa languageName: node linkType: hard "@babel/plugin-transform-nullish-coalescing-operator@npm:^7.22.11": - version: 7.23.4 - resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.23.4" + version: 7.24.1 + resolution: "@babel/plugin-transform-nullish-coalescing-operator@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/plugin-syntax-nullish-coalescing-operator": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: bce490d22da5c87ff27fffaff6ad5a4d4979b8d7b72e30857f191e9c1e1824ba73bb8d7081166289369e388f94f0ce5383a593b1fc84d09464a062c75f824b0b + checksum: c8532951506fb031287280cebeef10aa714f8a7cea2b62a13c805f0e0af945ba77a7c87e4bbbe4c37fe973e0e5d5e649cfac7f0374f57efc54cdf9656362a392 languageName: node linkType: hard "@babel/plugin-transform-optional-chaining@npm:^7.23.0": - version: 7.23.4 - resolution: "@babel/plugin-transform-optional-chaining@npm:7.23.4" + version: 7.24.1 + resolution: "@babel/plugin-transform-optional-chaining@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-skip-transparent-expression-wrappers": "npm:^7.22.5" "@babel/plugin-syntax-optional-chaining": "npm:^7.8.3" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 305b773c29ad61255b0e83ec1e92b2f7af6aa58be4cba1e3852bddaa14f7d2afd7b4438f41c28b179d6faac7eb8d4fb5530a17920294f25d459b8f84406bfbfb + checksum: b4688795229c9e9ce978eccf979fe515eb4e8d864d2dcd696baa937c8db13e3d46cff664a3cd6119dfe60e261f5d359b10c6783effab7cc91d75d03ad7f43d05 languageName: node linkType: hard "@babel/plugin-transform-private-methods@npm:^7.22.5": - version: 7.23.3 - resolution: "@babel/plugin-transform-private-methods@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/plugin-transform-private-methods@npm:7.24.1" dependencies: - "@babel/helper-create-class-features-plugin": "npm:^7.22.15" - "@babel/helper-plugin-utils": "npm:^7.22.5" + "@babel/helper-create-class-features-plugin": "npm:^7.24.1" + "@babel/helper-plugin-utils": "npm:^7.24.0" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 745a655edcd111b7f91882b921671ca0613079760d8c9befe336b8a9bc4ce6bb49c0c08941831c950afb1b225b4b2d3eaac8842e732db095b04db38efd8c34f4 + checksum: d8e18587d2a8b71a795da5e8841b0e64f1525a99ad73ea8b9caa331bc271d69646e2e1e749fd634321f3df9d126070208ddac22a27ccf070566b2efb74fecd99 languageName: node linkType: hard -"@babel/plugin-transform-typescript@npm:^7.23.3": - version: 7.23.6 - resolution: "@babel/plugin-transform-typescript@npm:7.23.6" +"@babel/plugin-transform-typescript@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/plugin-transform-typescript@npm:7.24.1" dependencies: "@babel/helper-annotate-as-pure": "npm:^7.22.5" - "@babel/helper-create-class-features-plugin": "npm:^7.23.6" - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/plugin-syntax-typescript": "npm:^7.23.3" + "@babel/helper-create-class-features-plugin": "npm:^7.24.1" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/plugin-syntax-typescript": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e08f7a981fe157e32031070b92cd77030018b002d063e4be3711ffb7ec04539478b240d8967a4748abb56eccc0ba376f094f30711ef6a028b2a89d15d6ddc01f + checksum: 9abce423ed2d3cb9398b09e3ed9efea661e92bd32e919f5c7942ac4bad4c5fd23a1d575bb7444d8c92261b68fb626552e0d9eea960372b6b6f54c2c9699a2649 languageName: node linkType: hard "@babel/preset-flow@npm:^7.22.15": - version: 7.24.0 - resolution: "@babel/preset-flow@npm:7.24.0" + version: 7.24.1 + resolution: "@babel/preset-flow@npm:7.24.1" dependencies: "@babel/helper-plugin-utils": "npm:^7.24.0" "@babel/helper-validator-option": "npm:^7.23.5" - "@babel/plugin-transform-flow-strip-types": "npm:^7.23.3" + "@babel/plugin-transform-flow-strip-types": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 8103b8273734298c15d497dcd44a0c9d5e12b3acc301178c4ec9098ead40c586f2fe13acfd855e30dffa0da42f76ee7a01df752e170af76207c90b40b32784c3 + checksum: e2209158d68a456b8f9d6cd6c810e692f3ab8ca28edba99afcecaacd657ace7cc905e566f84d6da06e537836a2f830bc6ddf4cb34006d57303ff9a40a94fa433 languageName: node linkType: hard "@babel/preset-typescript@npm:^7.23.0": - version: 7.23.3 - resolution: "@babel/preset-typescript@npm:7.23.3" + version: 7.24.1 + resolution: "@babel/preset-typescript@npm:7.24.1" dependencies: - "@babel/helper-plugin-utils": "npm:^7.22.5" - "@babel/helper-validator-option": "npm:^7.22.15" - "@babel/plugin-syntax-jsx": "npm:^7.23.3" - "@babel/plugin-transform-modules-commonjs": "npm:^7.23.3" - "@babel/plugin-transform-typescript": "npm:^7.23.3" + "@babel/helper-plugin-utils": "npm:^7.24.0" + "@babel/helper-validator-option": "npm:^7.23.5" + "@babel/plugin-syntax-jsx": "npm:^7.24.1" + "@babel/plugin-transform-modules-commonjs": "npm:^7.24.1" + "@babel/plugin-transform-typescript": "npm:^7.24.1" peerDependencies: "@babel/core": ^7.0.0-0 - checksum: e72b654c7f0f08b35d7e1c0e3a59c0c13037f295c425760b8b148aa7dde01e6ddd982efc525710f997a1494fafdd55cb525738c016609e7e4d703d02014152b7 + checksum: 0033dc6fbc898ed0d8017c83a2dd5e095c82909e2f83e48cf9f305e3e9287148758c179ad90f27912cf98ca68bfec3643c57c70c0ca34d3a6c50dc8243aef406 languageName: node linkType: hard @@ -579,11 +580,11 @@ __metadata: linkType: hard "@babel/runtime@npm:^7.20.1, @babel/runtime@npm:^7.5.5": - version: 7.24.0 - resolution: "@babel/runtime@npm:7.24.0" + version: 7.24.1 + resolution: "@babel/runtime@npm:7.24.1" dependencies: regenerator-runtime: "npm:^0.14.0" - checksum: 3495eed727bf4a4f84c35bb51ab53317ae38f4bbc3b1d0a8303751f9dfa0ce6f5fb2afced72b76c3dd0d8bb2ccb84787559a4dee9886291a36b26f02f0f759b4 + checksum: 500c6a99ddd84f37c7bc5dbc84777af47b1372b20e879941670451d55484faf18a673c5ebee9ca2b0f36208a729417873b35b1b92e76f811620f6adf7b8cb0f1 languageName: node linkType: hard @@ -598,25 +599,25 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.24.0": - version: 7.24.0 - resolution: "@babel/traverse@npm:7.24.0" +"@babel/traverse@npm:^7.24.1": + version: 7.24.1 + resolution: "@babel/traverse@npm:7.24.1" dependencies: - "@babel/code-frame": "npm:^7.23.5" - "@babel/generator": "npm:^7.23.6" + "@babel/code-frame": "npm:^7.24.1" + "@babel/generator": "npm:^7.24.1" "@babel/helper-environment-visitor": "npm:^7.22.20" "@babel/helper-function-name": "npm:^7.23.0" "@babel/helper-hoist-variables": "npm:^7.22.5" "@babel/helper-split-export-declaration": "npm:^7.22.6" - "@babel/parser": "npm:^7.24.0" + "@babel/parser": "npm:^7.24.1" "@babel/types": "npm:^7.24.0" debug: "npm:^4.3.1" globals: "npm:^11.1.0" - checksum: 55ffd2b0ce0fbd0a09051edc4def4fb1e96f35e0b100c0dc2a7429df569971ae312c290e980e423471f350961705698a257c7eea8c8304918024cc26f02468ba + checksum: c087b918f6823776537ba246136c70e7ce0719fc05361ebcbfd16f4e6f2f6f1f8f4f9167f1d9b675f27d12074839605189cc9d689de20b89a85e7c140f23daab languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.15, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.23.6, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.22.5, @babel/types@npm:^7.23.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.8.3": version: 7.24.0 resolution: "@babel/types@npm:7.24.0" dependencies: @@ -1363,14 +1364,14 @@ __metadata: languageName: node linkType: hard -"@jridgewell/gen-mapping@npm:^0.3.0, @jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.4 - resolution: "@jridgewell/gen-mapping@npm:0.3.4" +"@jridgewell/gen-mapping@npm:^0.3.2, @jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" dependencies: - "@jridgewell/set-array": "npm:^1.0.1" + "@jridgewell/set-array": "npm:^1.2.1" "@jridgewell/sourcemap-codec": "npm:^1.4.10" - "@jridgewell/trace-mapping": "npm:^0.3.9" - checksum: dd6c48341ad01a75bd93bae17fcc888120d063bdf927d4c496b663aa68e22b9e51e898ba38abe7457b28efd3fa5cde43723dba4dc5f94281119fa709cb5046be + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb languageName: node linkType: hard @@ -1381,10 +1382,10 @@ __metadata: languageName: node linkType: hard -"@jridgewell/set-array@npm:^1.0.1": - version: 1.1.2 - resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: bc7ab4c4c00470de4e7562ecac3c0c84f53e7ee8a711e546d67c47da7febe7c45cd67d4d84ee3c9b2c05ae8e872656cdded8a707a283d30bd54fbc65aef821ab +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 languageName: node linkType: hard @@ -1405,13 +1406,13 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.23 - resolution: "@jridgewell/trace-mapping@npm:0.3.23" +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" dependencies: "@jridgewell/resolve-uri": "npm:^3.1.0" "@jridgewell/sourcemap-codec": "npm:^1.4.14" - checksum: 26190e09129b184a41c83ce896ce41c0636ddc1285a22627a48ec7981829346ced655d5774bdca30446250baf0e4fb519c47732760d128edda51a6222b40397a + checksum: 3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 languageName: node linkType: hard @@ -1590,9 +1591,9 @@ __metadata: linkType: hard "@tsconfig/node10@npm:^1.0.7": - version: 1.0.9 - resolution: "@tsconfig/node10@npm:1.0.9" - checksum: c176a2c1e1b16be120c328300ea910df15fb9a5277010116d26818272341a11483c5a80059389d04edacf6fd2d03d4687ad3660870fdd1cc0b7109e160adb220 + version: 1.0.11 + resolution: "@tsconfig/node10@npm:1.0.11" + checksum: 28a0710e5d039e0de484bdf85fee883bfd3f6a8980601f4d44066b0a6bcd821d31c4e231d1117731c4e24268bd4cf2a788a6787c12fc7f8d11014c07d582783c languageName: node linkType: hard @@ -1717,11 +1718,11 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 20.11.21 - resolution: "@types/node@npm:20.11.21" + version: 20.11.30 + resolution: "@types/node@npm:20.11.30" dependencies: undici-types: "npm:~5.26.4" - checksum: 52b1cdfe8b14a67ab98c01b2e9621994b34a2537368e108fb925121a9d5958eb7344a2fb81ff36964932d5e5a093de8897f021bded10cad3536fd31e932b3000 + checksum: 867cfaf969c6d8850d8d7304e7ab739898a50ecb1395b61ff2335644f5f48d7a46fbc4a14cee967aed65ec134b61a746edae70d1f32f11321ccf29165e3bc4e6 languageName: node linkType: hard @@ -1862,7 +1863,7 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.62.0": +"@typescript-eslint/utils@npm:5.62.0, @typescript-eslint/utils@npm:^5.38.1": version: 5.62.0 resolution: "@typescript-eslint/utils@npm:5.62.0" dependencies: @@ -1967,6 +1968,25 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^8.11.2": + version: 8.12.0 + resolution: "ajv@npm:8.12.0" + dependencies: + fast-deep-equal: "npm:^3.1.1" + json-schema-traverse: "npm:^1.0.0" + require-from-string: "npm:^2.0.2" + uri-js: "npm:^4.2.2" + checksum: ac4f72adf727ee425e049bc9d8b31d4a57e1c90da8d28bcd23d60781b12fcd6fc3d68db5df16994c57b78b94eed7988f5a6b482fd376dc5b084125e20a0a622e + languageName: node + linkType: hard + +"ansi-colors@npm:4.1.1": + version: 4.1.1 + resolution: "ansi-colors@npm:4.1.1" + checksum: 6086ade4336b4250b6b25e144b83e5623bcaf654d3df0c3546ce09c9c5ff999cb6a6f00c87e802d05cf98aef79d92dc76ade2670a2493b8dcb80220bec457838 + languageName: node + linkType: hard + "ansi-colors@npm:^4.1.1, ansi-colors@npm:^4.1.3": version: 4.1.3 resolution: "ansi-colors@npm:4.1.3" @@ -2121,19 +2141,6 @@ __metadata: languageName: node linkType: hard -"assert@npm:^2.0.0": - version: 2.1.0 - resolution: "assert@npm:2.1.0" - dependencies: - call-bind: "npm:^1.0.2" - is-nan: "npm:^1.3.2" - object-is: "npm:^1.1.5" - object.assign: "npm:^4.1.4" - util: "npm:^0.12.5" - checksum: 7271a5da883c256a1fa690677bf1dd9d6aa882139f2bed1cd15da4f9e7459683e1da8e32a203d6cc6767e5e0f730c77a9532a87b896b4b0af0dd535f668775f0 - languageName: node - linkType: hard - "ast-types@npm:^0.16.1": version: 0.16.1 resolution: "ast-types@npm:0.16.1" @@ -2143,7 +2150,7 @@ __metadata: languageName: node linkType: hard -"available-typed-arrays@npm:^1.0.6, available-typed-arrays@npm:^1.0.7": +"available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" dependencies: @@ -2254,9 +2261,16 @@ __metadata: linkType: hard "binary-extensions@npm:^2.0.0": - version: 2.2.0 - resolution: "binary-extensions@npm:2.2.0" - checksum: d73d8b897238a2d3ffa5f59c0241870043aa7471335e89ea5e1ff48edb7c2d0bb471517a3e4c5c3f4c043615caa2717b5f80a5e61e07503d51dc85cb848e665d + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 + languageName: node + linkType: hard + +"boolean@npm:^3.2.0": + version: 3.2.0 + resolution: "boolean@npm:3.2.0" + checksum: 6a0dc9668f6f3dda42a53c181fcbdad223169c8d87b6c4011b87a8b14a21770efb2934a778f063d7ece17280f8c06d313c87f7b834bb1dd526a867ffcd00febf languageName: node linkType: hard @@ -2297,6 +2311,13 @@ __metadata: languageName: node linkType: hard +"browser-stdout@npm:1.3.1": + version: 1.3.1 + resolution: "browser-stdout@npm:1.3.1" + checksum: c40e482fd82be872b6ea7b9f7591beafbf6f5ba522fe3dade98ba1573a1c29a11101564993e4eb44e5488be8f44510af072df9a9637c739217eb155ceb639205 + languageName: node + linkType: hard + "browserslist@npm:^4.22.2": version: 4.23.0 resolution: "browserslist@npm:4.23.0" @@ -2374,7 +2395,7 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": version: 1.0.7 resolution: "call-bind@npm:1.0.7" dependencies: @@ -2412,7 +2433,7 @@ __metadata: languageName: node linkType: hard -"camelcase@npm:^6.2.0": +"camelcase@npm:^6.0.0, camelcase@npm:^6.2.0": version: 6.3.0 resolution: "camelcase@npm:6.3.0" checksum: 0d701658219bd3116d12da3eab31acddb3f9440790c0792e0d398f0a520a6a4058018e546862b6fba89d7ae990efaeb97da71e1913e9ebf5a8b5621a3d55c710 @@ -2420,13 +2441,13 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001587": - version: 1.0.30001591 - resolution: "caniuse-lite@npm:1.0.30001591" - checksum: 21937d341c3d75994504db21340f65573a1e847a8ab33ee4964ed493994d6552864c494ba144485459abd9c711c75c0708bc9fa19f2bff525bff75ffb0a42c3b + version: 1.0.30001600 + resolution: "caniuse-lite@npm:1.0.30001600" + checksum: b4f764db5d4f8cb3eb2827a170a20e6b2f4b8c3d80169efcf56bf3d6b8b3e6dd1c740141f0d0b10b2233f49ee8b496e2d1e044a36c54750a106bad2f6477f2db languageName: node linkType: hard -"chalk@npm:^2.1.0, chalk@npm:^2.4.2": +"chalk@npm:^2.1.0, chalk@npm:^2.4.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" dependencies: @@ -2437,7 +2458,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.2": +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.2": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -2468,6 +2489,25 @@ __metadata: languageName: node linkType: hard +"chokidar@npm:3.5.3": + version: 3.5.3 + resolution: "chokidar@npm:3.5.3" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 1076953093e0707c882a92c66c0f56ba6187831aa51bb4de878c1fec59ae611a3bf02898f190efec8e77a086b8df61c2b2a3ea324642a0558bdf8ee6c5dc9ca1 + languageName: node + linkType: hard + "chokidar@npm:^3.5.1, chokidar@npm:^3.5.2": version: 3.6.0 resolution: "chokidar@npm:3.6.0" @@ -2542,6 +2582,17 @@ __metadata: languageName: node linkType: hard +"cliui@npm:^7.0.2": + version: 7.0.4 + resolution: "cliui@npm:7.0.4" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.0" + wrap-ansi: "npm:^7.0.0" + checksum: 6035f5daf7383470cef82b3d3db00bec70afb3423538c50394386ffbbab135e26c3689c41791f911fa71b62d13d3863c712fdd70f0fbdffd938a1e6fd09aac00 + languageName: node + linkType: hard + "cliui@npm:^8.0.1": version: 8.0.1 resolution: "cliui@npm:8.0.1" @@ -2617,6 +2668,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^10.0.0": + version: 10.0.1 + resolution: "commander@npm:10.0.1" + checksum: 53f33d8927758a911094adadda4b2cbac111a5b377d8706700587650fd8f45b0bbe336de4b5c3fe47fd61f420a3d9bd452b6e0e6e5600a7e74d7bf0174f6efe3 + languageName: node + linkType: hard + "commander@npm:^4.0.0": version: 4.1.1 resolution: "commander@npm:4.1.1" @@ -2645,6 +2703,23 @@ __metadata: languageName: node linkType: hard +"cosmiconfig@npm:^8.0.0": + version: 8.3.6 + resolution: "cosmiconfig@npm:8.3.6" + dependencies: + import-fresh: "npm:^3.3.0" + js-yaml: "npm:^4.1.0" + parse-json: "npm:^5.2.0" + path-type: "npm:^4.0.0" + peerDependencies: + typescript: ">=4.9.5" + peerDependenciesMeta: + typescript: + optional: true + checksum: 0382a9ed13208f8bfc22ca2f62b364855207dffdb73dc26e150ade78c3093f1cf56172df2dd460c8caf2afa91c0ed4ec8a88c62f8f9cd1cf423d26506aa8797a + languageName: node + linkType: hard + "create-jest@npm:^29.7.0": version: 29.7.0 resolution: "create-jest@npm:29.7.0" @@ -2680,6 +2755,19 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^6.0.5": + version: 6.0.5 + resolution: "cross-spawn@npm:6.0.5" + dependencies: + nice-try: "npm:^1.0.4" + path-key: "npm:^2.0.1" + semver: "npm:^5.5.0" + shebang-command: "npm:^1.2.0" + which: "npm:^1.2.9" + checksum: e05544722e9d7189b4292c66e42b7abeb21db0d07c91b785f4ae5fefceb1f89e626da2703744657b287e86dcd4af57b54567cef75159957ff7a8a761d9055012 + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.2, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -2724,7 +2812,40 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 8984119e59dbed906a11fcfb417d7d861936f16697a0e7216fe2c6c810f6b5e8f4a5281e73f2c28e8e9259027190ac4a33e2a65fdd7fa86ac06b76e838918583 + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: b7d9e48a0cf5aefed9ab7d123559917b2d7e0d65531f43b2fd95b9d3a6b46042dd3fca597c42bba384e66b70d7ad66ff23932f8367b241f53d93af42cfe04ec2 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 21b0d2e53fd6e20cc4257c873bf6d36d77bd6185624b84076c0a1ddaa757b49aaf076254006341d35568e89f52eecd1ccb1a502cfb620f2beca04f48a6a62a8f + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:4.3.4, debug@npm:^4, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -2753,6 +2874,13 @@ __metadata: languageName: node linkType: hard +"decamelize@npm:^4.0.0": + version: 4.0.0 + resolution: "decamelize@npm:4.0.0" + checksum: e06da03fc05333e8cd2778c1487da67ffbea5b84e03ca80449519b8fa61f888714bbc6f459ea963d5641b4aa98832130eb5cd193d90ae9f0a27eee14be8e278d + languageName: node + linkType: hard + "decompress-response@npm:^4.2.1": version: 4.2.1 resolution: "decompress-response@npm:4.2.1" @@ -2797,7 +2925,7 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.2, define-data-property@npm:^1.1.4": +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" dependencies: @@ -2840,6 +2968,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:5.0.0": + version: 5.0.0 + resolution: "diff@npm:5.0.0" + checksum: 08c5904779bbababcd31f1707657b1ad57f8a9b65e6f88d3fb501d09a965d5f8d73066898a7d3f35981f9e4101892c61d99175d421f3b759533213c253d91134 + languageName: node + linkType: hard + "diff@npm:^4.0.1": version: 4.0.2 resolution: "diff@npm:4.0.2" @@ -2865,6 +3000,15 @@ __metadata: languageName: node linkType: hard +"dot-prop@npm:^7.2.0": + version: 7.2.0 + resolution: "dot-prop@npm:7.2.0" + dependencies: + type-fest: "npm:^2.11.2" + checksum: 2621702a01e7a47730e3a8e2938a406afc79b62fbb77bd1394e786ff13776673904bf0a4fc6b812eb9849ec71034e9fc1019a9e0bbe91f84010d8a8088cd41a9 + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -2873,9 +3017,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.4.668": - version: 1.4.685 - resolution: "electron-to-chromium@npm:1.4.685" - checksum: c9ce3907164c68aafe3667e9334dd41dadafdbbcb7dc6f6a53db4cafcafa107b664f54769c4ecb819b712695abf192cacde2d436c366cea1f75340cab05a5cb4 + version: 1.4.719 + resolution: "electron-to-chromium@npm:1.4.719" + checksum: 2122c89609f54c40aee932161edd2b1c84e0196e9f01ead023ef033b1b1c80a58ef79f43e7e7c32e0c52454299886ba62be275eefedd3f92003f46d94ae8a193 languageName: node linkType: hard @@ -2949,17 +3093,21 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3": - version: 1.22.4 - resolution: "es-abstract@npm:1.22.4" +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": + version: 1.23.2 + resolution: "es-abstract@npm:1.23.2" dependencies: array-buffer-byte-length: "npm:^1.0.1" arraybuffer.prototype.slice: "npm:^1.0.3" - available-typed-arrays: "npm:^1.0.6" + available-typed-arrays: "npm:^1.0.7" call-bind: "npm:^1.0.7" + data-view-buffer: "npm:^1.0.1" + data-view-byte-length: "npm:^1.0.1" + data-view-byte-offset: "npm:^1.0.0" es-define-property: "npm:^1.0.0" es-errors: "npm:^1.3.0" - es-set-tostringtag: "npm:^2.0.2" + es-object-atoms: "npm:^1.0.0" + es-set-tostringtag: "npm:^2.0.3" es-to-primitive: "npm:^1.2.1" function.prototype.name: "npm:^1.1.6" get-intrinsic: "npm:^1.2.4" @@ -2967,15 +3115,16 @@ __metadata: globalthis: "npm:^1.0.3" gopd: "npm:^1.0.1" has-property-descriptors: "npm:^1.0.2" - has-proto: "npm:^1.0.1" + has-proto: "npm:^1.0.3" has-symbols: "npm:^1.0.3" - hasown: "npm:^2.0.1" + hasown: "npm:^2.0.2" internal-slot: "npm:^1.0.7" is-array-buffer: "npm:^3.0.4" is-callable: "npm:^1.2.7" - is-negative-zero: "npm:^2.0.2" + is-data-view: "npm:^1.0.1" + is-negative-zero: "npm:^2.0.3" is-regex: "npm:^1.1.4" - is-shared-array-buffer: "npm:^1.0.2" + is-shared-array-buffer: "npm:^1.0.3" is-string: "npm:^1.0.7" is-typed-array: "npm:^1.1.13" is-weakref: "npm:^1.0.2" @@ -2983,18 +3132,18 @@ __metadata: object-keys: "npm:^1.1.1" object.assign: "npm:^4.1.5" regexp.prototype.flags: "npm:^1.5.2" - safe-array-concat: "npm:^1.1.0" + safe-array-concat: "npm:^1.1.2" safe-regex-test: "npm:^1.0.3" - string.prototype.trim: "npm:^1.2.8" - string.prototype.trimend: "npm:^1.0.7" + string.prototype.trim: "npm:^1.2.9" + string.prototype.trimend: "npm:^1.0.8" string.prototype.trimstart: "npm:^1.0.7" - typed-array-buffer: "npm:^1.0.1" - typed-array-byte-length: "npm:^1.0.0" - typed-array-byte-offset: "npm:^1.0.0" - typed-array-length: "npm:^1.0.4" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.5" unbox-primitive: "npm:^1.0.2" - which-typed-array: "npm:^1.1.14" - checksum: dc332c3a010c5e7b77b7ea8a4532ac455fa02e7bcabf996a47447165bafa72d0d99967407d0cf5dbbb5fbbf87f53cd8b706608ec70953523b8cd2b831b9a9d64 + which-typed-array: "npm:^1.1.15" + checksum: 1262ebb7cdb79f255fc7d1f4505c0de2d88d117a0b21d0c984c28a0126efa717ef011f07d502353987cbade39f12c0a5ae59aef0b1231a51ce1b991e4e87c8bb languageName: node linkType: hard @@ -3014,7 +3163,16 @@ __metadata: languageName: node linkType: hard -"es-set-tostringtag@npm:^2.0.2": +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 1fed3d102eb27ab8d983337bb7c8b159dd2a1e63ff833ec54eea1311c96d5b08223b433060ba240541ca8adba9eee6b0a60cdbf2f80634b784febc9cc8b687b4 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": version: 2.0.3 resolution: "es-set-tostringtag@npm:2.0.3" dependencies: @@ -3129,6 +3287,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:4.0.0, escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + "escape-string-regexp@npm:^1.0.5": version: 1.0.5 resolution: "escape-string-regexp@npm:1.0.5" @@ -3143,13 +3308,6 @@ __metadata: languageName: node linkType: hard -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 - languageName: node - linkType: hard - "eslint-config-prettier@npm:^8.6.0": version: 8.10.0 resolution: "eslint-config-prettier@npm:8.10.0" @@ -3161,6 +3319,86 @@ __metadata: languageName: node linkType: hard +"eslint-doc-generator@npm:^1.0.0": + version: 1.7.0 + resolution: "eslint-doc-generator@npm:1.7.0" + dependencies: + "@typescript-eslint/utils": "npm:^5.38.1" + ajv: "npm:^8.11.2" + boolean: "npm:^3.2.0" + commander: "npm:^10.0.0" + cosmiconfig: "npm:^8.0.0" + deepmerge: "npm:^4.2.2" + dot-prop: "npm:^7.2.0" + jest-diff: "npm:^29.2.1" + json-schema-traverse: "npm:^1.0.0" + markdown-table: "npm:^3.0.3" + no-case: "npm:^3.0.4" + type-fest: "npm:^3.0.0" + peerDependencies: + eslint: ">= 7" + bin: + eslint-doc-generator: dist/bin/eslint-doc-generator.js + checksum: 25a1c0cedbf663cf402264e2d42d3a207a040174e2f282a47d1989a2171ae04aafddcc8194daf636af77cb81e37f8b69cc190ed7fcee10fec994213d261573a2 + languageName: node + linkType: hard + +"eslint-plugin-es@npm:^3.0.0": + version: 3.0.1 + resolution: "eslint-plugin-es@npm:3.0.1" + dependencies: + eslint-utils: "npm:^2.0.0" + regexpp: "npm:^3.0.0" + peerDependencies: + eslint: ">=4.19.1" + checksum: 12ae730aa9603e680af048e1653aac15e529411b68b8d0da6e290700b17c695485af7c3f5360f531f80970786cab7288c2c1d4a58c35ec1bb89649897c016c4a + languageName: node + linkType: hard + +"eslint-plugin-eslint-plugin@npm:^5.0.0": + version: 5.4.1 + resolution: "eslint-plugin-eslint-plugin@npm:5.4.1" + dependencies: + eslint-utils: "npm:^3.0.0" + estraverse: "npm:^5.3.0" + peerDependencies: + eslint: ">=7.0.0" + checksum: 74b281d715146b92806beea441c0ba3e174867a55dae598ed8cfa284bd19030d60d34c1a0c6e9ec95fda73fc18ed18ce6c74da29e2090bf7c243022f9608679b + languageName: node + linkType: hard + +"eslint-plugin-node@npm:^11.1.0": + version: 11.1.0 + resolution: "eslint-plugin-node@npm:11.1.0" + dependencies: + eslint-plugin-es: "npm:^3.0.0" + eslint-utils: "npm:^2.0.0" + ignore: "npm:^5.1.1" + minimatch: "npm:^3.0.4" + resolve: "npm:^1.10.1" + semver: "npm:^6.1.0" + peerDependencies: + eslint: ">=5.16.0" + checksum: c7716adac4020cb852fd2410dcd8bdb13a227004de77f96d7f9806d0cf2274f24e0920a7ca73bcd72d90003696c1f17fdd9fe3ca218e64ee03dc2b840e4416fa + languageName: node + linkType: hard + +"eslint-plugin-opticks@workspace:packages/eslint-plugin": + version: 0.0.0-use.local + resolution: "eslint-plugin-opticks@workspace:packages/eslint-plugin" + dependencies: + eslint: "npm:^8.19.0" + eslint-doc-generator: "npm:^1.0.0" + eslint-plugin-eslint-plugin: "npm:^5.0.0" + eslint-plugin-node: "npm:^11.1.0" + mocha: "npm:^10.0.0" + npm-run-all: "npm:^4.1.5" + requireindex: "npm:^1.2.0" + peerDependencies: + eslint: ">=7" + languageName: unknown + linkType: soft + "eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" @@ -3181,6 +3419,40 @@ __metadata: languageName: node linkType: hard +"eslint-utils@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-utils@npm:2.1.0" + dependencies: + eslint-visitor-keys: "npm:^1.1.0" + checksum: 69521c5d6569384b24093125d037ba238d3d6e54367f7143af9928f5286369e912c26cad5016d730c0ffb9797ac9e83831059d7f1d863f7dc84330eb02414611 + languageName: node + linkType: hard + +"eslint-utils@npm:^3.0.0": + version: 3.0.0 + resolution: "eslint-utils@npm:3.0.0" + dependencies: + eslint-visitor-keys: "npm:^2.0.0" + peerDependencies: + eslint: ">=5" + checksum: 45aa2b63667a8d9b474c98c28af908d0a592bed1a4568f3145cd49fb5d9510f545327ec95561625290313fe126e6d7bdfe3fdbdb6f432689fab6b9497d3bfb52 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^1.1.0": + version: 1.3.0 + resolution: "eslint-visitor-keys@npm:1.3.0" + checksum: 10c91fdbbe36810dd4308e57f9a8bc7177188b2a70247e54e3af1fa05ebc66414ae6fd4ce3c6c6821591f43a556e9037bc6b071122e099b5f8b7d2f76df553e3 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-visitor-keys@npm:2.1.0" + checksum: 9f0e3a2db751d84067d15977ac4b4472efd6b303e369e6ff241a99feac04da758f46d5add022c33d06b53596038dbae4b4aceb27c7e68b8dfc1055b35e495787 + languageName: node + linkType: hard + "eslint-visitor-keys@npm:^3.3.0, eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": version: 3.4.3 resolution: "eslint-visitor-keys@npm:3.4.3" @@ -3188,7 +3460,7 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.32.0": +"eslint@npm:^8.19.0, eslint@npm:^8.32.0": version: 8.57.0 resolution: "eslint@npm:8.57.0" dependencies: @@ -3282,7 +3554,7 @@ __metadata: languageName: node linkType: hard -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": version: 5.3.0 resolution: "estraverse@npm:5.3.0" checksum: 1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 @@ -3439,6 +3711,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:5.0.0, find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + "find-up@npm:^3.0.0": version: 3.0.0 resolution: "find-up@npm:3.0.0" @@ -3458,16 +3740,6 @@ __metadata: languageName: node linkType: hard -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: "npm:^6.0.0" - path-exists: "npm:^4.0.0" - checksum: 062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a - languageName: node - linkType: hard - "find-yarn-workspace-root2@npm:1.2.16": version: 1.2.16 resolution: "find-yarn-workspace-root2@npm:1.2.16" @@ -3489,6 +3761,15 @@ __metadata: languageName: node linkType: hard +"flat@npm:^5.0.2": + version: 5.0.2 + resolution: "flat@npm:5.0.2" + bin: + flat: cli.js + checksum: f178b13482f0cd80c7fede05f4d10585b1f2fdebf26e12edc138e32d3150c6ea6482b7f12813a1091143bad52bb6d3596bca51a162257a21163c0ff438baa5fe + languageName: node + linkType: hard + "flatted@npm:^3.2.9": version: 3.3.1 resolution: "flatted@npm:3.3.1" @@ -3497,9 +3778,9 @@ __metadata: linkType: hard "flow-parser@npm:0.*": - version: 0.229.2 - resolution: "flow-parser@npm:0.229.2" - checksum: 6f2b0b393fb02ae6b839e7e13fd31e91872941843a805eb529b3e969cf0a8a6a0546fc2ab5c7d557eead8be3e2a3fe41c07276f826ba1f84702fcbefa7723fbc + version: 0.232.0 + resolution: "flow-parser@npm:0.232.0" + checksum: 9668d7cf8369b0b9464f35893f31757e42bb1092af715582e3d9b28adc4362cce8f6bc9a0cbd0a2159716b75e311bcd34cd615a142926aef4b9fed0cfd2b46ac languageName: node linkType: hard @@ -3635,7 +3916,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" dependencies: @@ -3691,14 +3972,27 @@ __metadata: languageName: node linkType: hard -"glob@npm:^10.2.2, glob@npm:^10.3.10": - version: 10.3.10 - resolution: "glob@npm:10.3.10" +"glob@npm:8.1.0": + version: 8.1.0 + resolution: "glob@npm:8.1.0" dependencies: - foreground-child: "npm:^3.1.0" - jackspeak: "npm:^2.3.5" - minimatch: "npm:^9.0.1" - minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^5.0.1" + once: "npm:^1.3.0" + checksum: cb0b5cab17a59c57299376abe5646c7070f8acb89df5595b492dba3bfb43d301a46c01e5695f01154e6553168207cb60d4eaf07d3be4bc3eb9b0457c5c561d0f + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.3.10 + resolution: "glob@npm:10.3.10" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^2.3.5" + minimatch: "npm:^9.0.1" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry: "npm:^1.10.1" bin: glob: dist/esm/bin.mjs @@ -3817,7 +4111,7 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.1, has-property-descriptors@npm:^1.0.2": +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": version: 1.0.2 resolution: "has-property-descriptors@npm:1.0.2" dependencies: @@ -3840,7 +4134,7 @@ __metadata: languageName: node linkType: hard -"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.1, has-tostringtag@npm:^1.0.2": +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": version: 1.0.2 resolution: "has-tostringtag@npm:1.0.2" dependencies: @@ -3849,12 +4143,21 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0, hasown@npm:^2.0.1": - version: 2.0.1 - resolution: "hasown@npm:2.0.1" +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" dependencies: function-bind: "npm:^1.1.2" - checksum: 9e27e70e8e4204f4124c8f99950d1ba2b1f5174864fd39ff26da190f9ea6488c1b3927dcc64981c26d1f637a971783c9489d62c829d393ea509e6f1ba20370bb + checksum: 3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"he@npm:1.2.0": + version: 1.2.0 + resolution: "he@npm:1.2.0" + bin: + he: bin/he + checksum: a27d478befe3c8192f006cdd0639a66798979dfa6e2125c6ac582a19a5ebfec62ad83e8382e6036170d873f46e4536a7e795bf8b95bf7c247f4cc0825ccc8c17 languageName: node linkType: hard @@ -3947,14 +4250,14 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0": +"ignore@npm:^5.1.1, ignore@npm:^5.2.0": version: 5.3.1 resolution: "ignore@npm:5.3.1" checksum: 703f7f45ffb2a27fb2c5a8db0c32e7dee66b33a225d28e8db4e1be6474795f606686a6e3bcc50e1aa12f2042db4c9d4a7d60af3250511de74620fbed052ea4cd languageName: node linkType: hard -"import-fresh@npm:^3.2.1": +"import-fresh@npm:^3.2.1, import-fresh@npm:^3.3.0": version: 3.3.0 resolution: "import-fresh@npm:3.3.0" dependencies: @@ -4007,7 +4310,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.3": +"inherits@npm:2": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -4035,16 +4338,6 @@ __metadata: languageName: node linkType: hard -"is-arguments@npm:^1.0.4": - version: 1.1.1 - resolution: "is-arguments@npm:1.1.1" - dependencies: - call-bind: "npm:^1.0.2" - has-tostringtag: "npm:^1.0.0" - checksum: 5ff1f341ee4475350adfc14b2328b38962564b7c2076be2f5bac7bd9b61779efba99b9f844a7b82ba7654adccf8e8eb19d1bb0cc6d1c1a085e498f6793d4328f - languageName: node - linkType: hard - "is-array-buffer@npm:^3.0.4": version: 3.0.4 resolution: "is-array-buffer@npm:3.0.4" @@ -4106,6 +4399,15 @@ __metadata: languageName: node linkType: hard +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: "npm:^1.1.13" + checksum: a3e6ec84efe303da859107aed9b970e018e2bee7ffcb48e2f8096921a493608134240e672a2072577e5f23a729846241d9634806e8a0e51d9129c56d5f65442d + languageName: node + linkType: hard + "is-date-object@npm:^1.0.1": version: 1.0.5 resolution: "is-date-object@npm:1.0.5" @@ -4136,15 +4438,6 @@ __metadata: languageName: node linkType: hard -"is-generator-function@npm:^1.0.7": - version: 1.0.10 - resolution: "is-generator-function@npm:1.0.10" - dependencies: - has-tostringtag: "npm:^1.0.0" - checksum: df03514df01a6098945b5a0cfa1abff715807c8e72f57c49a0686ad54b3b74d394e2d8714e6f709a71eb00c9630d48e73ca1796c1ccc84ac95092c1fecc0d98b - languageName: node - linkType: hard - "is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" @@ -4168,17 +4461,7 @@ __metadata: languageName: node linkType: hard -"is-nan@npm:^1.3.2": - version: 1.3.2 - resolution: "is-nan@npm:1.3.2" - dependencies: - call-bind: "npm:^1.0.0" - define-properties: "npm:^1.1.3" - checksum: 8bfb286f85763f9c2e28ea32e9127702fe980ffd15fa5d63ade3be7786559e6e21355d3625dd364c769c033c5aedf0a2ed3d4025d336abf1b9241e3d9eddc5b0 - languageName: node - linkType: hard - -"is-negative-zero@npm:^2.0.2": +"is-negative-zero@npm:^2.0.3": version: 2.0.3 resolution: "is-negative-zero@npm:2.0.3" checksum: bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e @@ -4215,6 +4498,13 @@ __metadata: languageName: node linkType: hard +"is-plain-obj@npm:^2.1.0": + version: 2.1.0 + resolution: "is-plain-obj@npm:2.1.0" + checksum: e5c9814cdaa627a9ad0a0964ded0e0491bfd9ace405c49a5d63c88b30a162f1512c069d5b80997893c4d0181eadc3fed02b4ab4b81059aba5620bfcdfdeb9c53 + languageName: node + linkType: hard + "is-plain-object@npm:^2.0.4": version: 2.0.4 resolution: "is-plain-object@npm:2.0.4" @@ -4234,7 +4524,7 @@ __metadata: languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.2": +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": version: 1.0.3 resolution: "is-shared-array-buffer@npm:1.0.3" dependencies: @@ -4277,7 +4567,7 @@ __metadata: languageName: node linkType: hard -"is-typed-array@npm:^1.1.13, is-typed-array@npm:^1.1.3": +"is-typed-array@npm:^1.1.13": version: 1.1.13 resolution: "is-typed-array@npm:1.1.13" dependencies: @@ -4286,6 +4576,13 @@ __metadata: languageName: node linkType: hard +"is-unicode-supported@npm:^0.1.0": + version: 0.1.0 + resolution: "is-unicode-supported@npm:0.1.0" + checksum: 00cbe3455c3756be68d2542c416cab888aebd5012781d6819749fefb15162ff23e38501fe681b3d751c73e8ff561ac09a5293eba6f58fdf0178462ce6dcb3453 + languageName: node + linkType: hard + "is-unicode-supported@npm:^1.3.0": version: 1.3.0 resolution: "is-unicode-supported@npm:1.3.0" @@ -4525,7 +4822,7 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.7.0": +"jest-diff@npm:^29.2.1, jest-diff@npm:^29.7.0": version: 29.7.0 resolution: "jest-diff@npm:29.7.0" dependencies: @@ -4875,26 +5172,26 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.6.1": - version: 3.14.1 - resolution: "js-yaml@npm:3.14.1" +"js-yaml@npm:4.1.0, js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" dependencies: - argparse: "npm:^1.0.7" - esprima: "npm:^4.0.0" + argparse: "npm:^2.0.1" bin: js-yaml: bin/js-yaml.js - checksum: 6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + checksum: 184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f languageName: node linkType: hard -"js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" +"js-yaml@npm:^3.13.0, js-yaml@npm:^3.13.1, js-yaml@npm:^3.6.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" dependencies: - argparse: "npm:^2.0.1" + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" bin: js-yaml: bin/js-yaml.js - checksum: 184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + checksum: 6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b languageName: node linkType: hard @@ -4956,6 +5253,13 @@ __metadata: languageName: node linkType: hard +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: 2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb + languageName: node + linkType: hard + "json-parse-even-better-errors@npm:^2.3.0": version: 2.3.1 resolution: "json-parse-even-better-errors@npm:2.3.1" @@ -4970,6 +5274,13 @@ __metadata: languageName: node linkType: hard +"json-schema-traverse@npm:^1.0.0": + version: 1.0.0 + resolution: "json-schema-traverse@npm:1.0.0" + checksum: 71e30015d7f3d6dc1c316d6298047c8ef98a06d31ad064919976583eb61e1018a60a0067338f0f79cabc00d84af3fcc489bd48ce8a46ea165d9541ba17fb30c6 + languageName: node + linkType: hard + "json-schema@npm:^0.2.3": version: 0.2.5 resolution: "json-schema@npm:0.2.5" @@ -5066,6 +5377,18 @@ __metadata: languageName: node linkType: hard +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.2" + parse-json: "npm:^4.0.0" + pify: "npm:^3.0.0" + strip-bom: "npm:^3.0.0" + checksum: 6b48f6a0256bdfcc8970be2c57f68f10acb2ee7e63709b386b2febb6ad3c86198f840889cdbe71d28f741cbaa2f23a7771206b138cd1bdd159564511ca37c1d5 + languageName: node + linkType: hard + "load-tsconfig@npm:^0.2.3": version: 0.2.5 resolution: "load-tsconfig@npm:0.2.5" @@ -5141,6 +5464,16 @@ __metadata: languageName: node linkType: hard +"log-symbols@npm:4.1.0": + version: 4.1.0 + resolution: "log-symbols@npm:4.1.0" + dependencies: + chalk: "npm:^4.1.0" + is-unicode-supported: "npm:^0.1.0" + checksum: 67f445a9ffa76db1989d0fa98586e5bc2fd5247260dafb8ad93d9f0ccd5896d53fb830b0e54dade5ad838b9de2006c826831a3c528913093af20dff8bd24aca6 + languageName: node + linkType: hard + "log-symbols@npm:^6.0.0": version: 6.0.0 resolution: "log-symbols@npm:6.0.0" @@ -5151,7 +5484,16 @@ __metadata: languageName: node linkType: hard -"lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": +"lower-case@npm:^2.0.2": + version: 2.0.2 + resolution: "lower-case@npm:2.0.2" + dependencies: + tslib: "npm:^2.0.3" + checksum: 3d925e090315cf7dc1caa358e0477e186ffa23947740e4314a7429b6e62d72742e0bbe7536a5ae56d19d7618ce998aba05caca53c2902bd5742fdca5fc57fd7b + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": version: 10.2.0 resolution: "lru-cache@npm:10.2.0" checksum: c9847612aa2daaef102d30542a8d6d9b2c2bb36581c1bf0dc3ebf5e5f3352c772a749e604afae2e46873b930a9e9523743faac4e5b937c576ab29196774712ee @@ -5254,6 +5596,20 @@ __metadata: languageName: node linkType: hard +"markdown-table@npm:^3.0.3": + version: 3.0.3 + resolution: "markdown-table@npm:3.0.3" + checksum: 47433a3f31e4637a184e38e873ab1d2fadfb0106a683d466fec329e99a2d8dfa09f091fa42202c6f13ec94aef0199f449a684b28042c636f2edbc1b7e1811dcd + languageName: node + linkType: hard + +"memorystream@npm:^0.3.1": + version: 0.3.1 + resolution: "memorystream@npm:0.3.1" + checksum: 4bd164657711d9747ff5edb0508b2944414da3464b7fe21ac5c67cf35bba975c4b446a0124bd0f9a8be54cfc18faf92e92bd77563a20328b1ccf2ff04e9f39b9 + languageName: node + linkType: hard + "meow@npm:^6.0.0": version: 6.1.1 resolution: "meow@npm:6.1.1" @@ -5318,6 +5674,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:5.0.1": + version: 5.0.1 + resolution: "minimatch@npm:5.0.1" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: baa60fc5839205f13d6c266d8ad4d160ae37c33f66b130b5640acac66deff84b934ac6307f5dc5e4b30362c51284817c12df7c9746ffb600b9009c581e0b1634 + languageName: node + linkType: hard + "minimatch@npm:^3.0.2, minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" @@ -5327,6 +5692,15 @@ __metadata: languageName: node linkType: hard +"minimatch@npm:^5.0.1": + version: 5.1.6 + resolution: "minimatch@npm:5.1.6" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 3defdfd230914f22a8da203747c42ee3c405c39d4d37ffda284dac5e45b7e1f6c49aa8be606509002898e73091ff2a3bbfc59c2c6c71d4660609f63aa92f98e3 + languageName: node + linkType: hard + "minimatch@npm:^9.0.1": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -5447,6 +5821,37 @@ __metadata: languageName: node linkType: hard +"mocha@npm:^10.0.0": + version: 10.4.0 + resolution: "mocha@npm:10.4.0" + dependencies: + ansi-colors: "npm:4.1.1" + browser-stdout: "npm:1.3.1" + chokidar: "npm:3.5.3" + debug: "npm:4.3.4" + diff: "npm:5.0.0" + escape-string-regexp: "npm:4.0.0" + find-up: "npm:5.0.0" + glob: "npm:8.1.0" + he: "npm:1.2.0" + js-yaml: "npm:4.1.0" + log-symbols: "npm:4.1.0" + minimatch: "npm:5.0.1" + ms: "npm:2.1.3" + serialize-javascript: "npm:6.0.0" + strip-json-comments: "npm:3.1.1" + supports-color: "npm:8.1.1" + workerpool: "npm:6.2.1" + yargs: "npm:16.2.0" + yargs-parser: "npm:20.2.4" + yargs-unparser: "npm:2.0.0" + bin: + _mocha: bin/_mocha + mocha: bin/mocha.js + checksum: e572e9d8c164e98f64de7e9498608de042fd841c6a7441f456a5e216e9aed2299e2c568d9dc27f2be2de06521e6b2d1dd774ab58a243b1c7697d14aec2f0f7f7 + languageName: node + linkType: hard + "ms@npm:2.1.2": version: 2.1.2 resolution: "ms@npm:2.1.2" @@ -5454,6 +5859,13 @@ __metadata: languageName: node linkType: hard +"ms@npm:2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + "murmurhash@npm:0.0.2": version: 0.0.2 resolution: "murmurhash@npm:0.0.2" @@ -5500,6 +5912,23 @@ __metadata: languageName: node linkType: hard +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 95568c1b73e1d0d4069a3e3061a2102d854513d37bcfda73300015b7ba4868d3b27c198d1dbbd8ebdef4112fc2ed9e895d4a0f2e1cce0bd334f2a1346dc9205f + languageName: node + linkType: hard + +"no-case@npm:^3.0.4": + version: 3.0.4 + resolution: "no-case@npm:3.0.4" + dependencies: + lower-case: "npm:^2.0.2" + tslib: "npm:^2.0.3" + checksum: 8ef545f0b3f8677c848f86ecbd42ca0ff3cd9dd71c158527b344c69ba14710d816d8489c746b6ca225e7b615108938a0bda0a54706f8c255933703ac1cf8e703 + languageName: node + linkType: hard + "node-dir@npm:^0.1.17": version: 0.1.17 resolution: "node-dir@npm:0.1.17" @@ -5510,8 +5939,8 @@ __metadata: linkType: hard "node-gyp@npm:latest": - version: 10.0.1 - resolution: "node-gyp@npm:10.0.1" + version: 10.1.0 + resolution: "node-gyp@npm:10.1.0" dependencies: env-paths: "npm:^2.2.0" exponential-backoff: "npm:^3.1.1" @@ -5525,7 +5954,7 @@ __metadata: which: "npm:^4.0.0" bin: node-gyp: bin/node-gyp.js - checksum: abddfff7d873312e4ed4a5fb75ce893a5c4fb69e7fcb1dfa71c28a6b92a7f1ef6b62790dffb39181b5a82728ba8f2f32d229cf8cbe66769fe02cea7db4a555aa + checksum: 9cc821111ca244a01fb7f054db7523ab0a0cd837f665267eb962eb87695d71fb1e681f9e21464cc2fd7c05530dc4c81b810bca1a88f7d7186909b74477491a3c languageName: node linkType: hard @@ -5585,7 +6014,7 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^2.5.0": +"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": version: 2.5.0 resolution: "normalize-package-data@npm:2.5.0" dependencies: @@ -5616,6 +6045,27 @@ __metadata: languageName: node linkType: hard +"npm-run-all@npm:^4.1.5": + version: 4.1.5 + resolution: "npm-run-all@npm:4.1.5" + dependencies: + ansi-styles: "npm:^3.2.1" + chalk: "npm:^2.4.1" + cross-spawn: "npm:^6.0.5" + memorystream: "npm:^0.3.1" + minimatch: "npm:^3.0.4" + pidtree: "npm:^0.3.0" + read-pkg: "npm:^3.0.0" + shell-quote: "npm:^1.6.1" + string.prototype.padend: "npm:^3.0.0" + bin: + npm-run-all: bin/npm-run-all/index.js + run-p: bin/run-p/index.js + run-s: bin/run-s/index.js + checksum: 736ee39bd35454d3efaa4a2e53eba6c523e2e17fba21a18edcce6b221f5cab62000bef16bb6ae8aff9e615831e6b0eb25ab51d52d60e6fa6f4ea880e4c6d31f4 + languageName: node + linkType: hard + "npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" @@ -5639,16 +6089,6 @@ __metadata: languageName: node linkType: hard -"object-is@npm:^1.1.5": - version: 1.1.6 - resolution: "object-is@npm:1.1.6" - dependencies: - call-bind: "npm:^1.0.7" - define-properties: "npm:^1.2.1" - checksum: 506af444c4dce7f8e31f34fc549e2fb8152d6b9c4a30c6e62852badd7f520b579c679af433e7a072f9d78eb7808d230dc12e1cf58da9154dfbf8813099ea0fe0 - languageName: node - linkType: hard - "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -5656,7 +6096,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.4, object.assign@npm:^4.1.5": +"object.assign@npm:^4.1.5": version: 4.1.5 resolution: "object.assign@npm:4.1.5" dependencies: @@ -5856,6 +6296,16 @@ __metadata: languageName: node linkType: hard +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: "npm:^1.3.1" + json-parse-better-errors: "npm:^1.0.1" + checksum: 8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 + languageName: node + linkType: hard + "parse-json@npm:^5.0.0, parse-json@npm:^5.2.0": version: 5.2.0 resolution: "parse-json@npm:5.2.0" @@ -5900,6 +6350,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: dd2044f029a8e58ac31d2bf34c34b93c3095c1481942960e84dd2faa95bbb71b9b762a106aead0646695330936414b31ca0bd862bf488a937ad17c8c5d73b32b + languageName: node + linkType: hard + "path-key@npm:^3.0.0, path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -5915,12 +6372,21 @@ __metadata: linkType: hard "path-scurry@npm:^1.10.1": - version: 1.10.1 - resolution: "path-scurry@npm:1.10.1" + version: 1.10.2 + resolution: "path-scurry@npm:1.10.2" dependencies: - lru-cache: "npm:^9.1.1 || ^10.0.0" + lru-cache: "npm:^10.2.0" minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" - checksum: e5dc78a7348d25eec61ab166317e9e9c7b46818aa2c2b9006c507a6ff48c672d011292d9662527213e558f5652ce0afcc788663a061d8b59ab495681840c0c1e + checksum: d723777fbf9627f201e64656680f66ebd940957eebacf780e6cce1c2919c29c116678b2d7dbf8821b3a2caa758d125f4444005ccec886a25c8f324504e48e601 + languageName: node + linkType: hard + +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: "npm:^3.0.0" + checksum: 1332c632f1cac15790ebab8dd729b67ba04fc96f81647496feb1c2975d862d046f41e4b975dbd893048999b2cc90721f72924ad820acc58c78507ba7141a8e56 languageName: node linkType: hard @@ -5945,6 +6411,22 @@ __metadata: languageName: node linkType: hard +"pidtree@npm:^0.3.0": + version: 0.3.1 + resolution: "pidtree@npm:0.3.1" + bin: + pidtree: bin/pidtree.js + checksum: cd69b0182f749f45ab48584e3442c48c5dc4512502c18d5b0147a33b042c41a4db4269b9ce2f7c48f11833ee5e79d81f5ebc6f7bf8372d4ea55726f60dc505a1 + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 + languageName: node + linkType: hard + "pify@npm:^4.0.1": version: 4.0.1 resolution: "pify@npm:4.0.1" @@ -6090,9 +6572,9 @@ __metadata: linkType: hard "pure-rand@npm:^6.0.0": - version: 6.0.4 - resolution: "pure-rand@npm:6.0.4" - checksum: 0fe7b12f25b10ea5b804598a6f37e4bcf645d2be6d44fe963741f014bf0095bdb6ff525106d6da6e76addc8142358fd380f1a9b8c62ea4d5516bf26a96a37c95 + version: 6.1.0 + resolution: "pure-rand@npm:6.1.0" + checksum: 1abe217897bf74dcb3a0c9aba3555fe975023147b48db540aa2faf507aee91c03bf54f6aef0eb2bf59cc259a16d06b28eca37f0dc426d94f4692aeff02fb0e65 languageName: node linkType: hard @@ -6110,6 +6592,15 @@ __metadata: languageName: node linkType: hard +"randombytes@npm:^2.1.0": + version: 2.1.0 + resolution: "randombytes@npm:2.1.0" + dependencies: + safe-buffer: "npm:^5.1.0" + checksum: 50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 + languageName: node + linkType: hard + "react-is@npm:^18.0.0": version: 18.2.0 resolution: "react-is@npm:18.2.0" @@ -6128,6 +6619,17 @@ __metadata: languageName: node linkType: hard +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: "npm:^4.0.0" + normalize-package-data: "npm:^2.3.2" + path-type: "npm:^3.0.0" + checksum: 65acf2df89fbcd506b48b7ced56a255ba00adf7ecaa2db759c86cc58212f6fd80f1f0b7a85c848551a5d0685232e9b64f45c1fd5b48d85df2761a160767eeb93 + languageName: node + linkType: hard + "read-pkg@npm:^5.2.0": version: 5.2.0 resolution: "read-pkg@npm:5.2.0" @@ -6175,15 +6677,15 @@ __metadata: linkType: hard "recast@npm:^0.23.3": - version: 0.23.4 - resolution: "recast@npm:0.23.4" + version: 0.23.6 + resolution: "recast@npm:0.23.6" dependencies: - assert: "npm:^2.0.0" ast-types: "npm:^0.16.1" esprima: "npm:~4.0.0" source-map: "npm:~0.6.1" + tiny-invariant: "npm:^1.3.3" tslib: "npm:^2.0.1" - checksum: d719633be8029e28f23b8191d4a525c5dbdac721792ab3cb5e9dfcf1694fb93f3c147b186916195a9c7fa0711f1e4990ba457cdcee02faed3899d4a80da1bd1f + checksum: 589c1a96aea7656a844f56278ffe99e3360717991955e9409221f2c1582a922f8179c803c8d35ca61743facfa0ad895acfe73dcc76076e0717db04c508166d44 languageName: node linkType: hard @@ -6216,6 +6718,13 @@ __metadata: languageName: node linkType: hard +"regexpp@npm:^3.0.0": + version: 3.2.0 + resolution: "regexpp@npm:3.2.0" + checksum: d1da82385c8754a1681416b90b9cca0e21b4a2babef159099b88f640637d789c69011d0bc94705dacab85b81133e929d027d85210e8b8b03f8035164dbc14710 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -6223,6 +6732,13 @@ __metadata: languageName: node linkType: hard +"require-from-string@npm:^2.0.2": + version: 2.0.2 + resolution: "require-from-string@npm:2.0.2" + checksum: aaa267e0c5b022fc5fd4eef49d8285086b15f2a1c54b28240fdf03599cbd9c26049fee3eab894f2e1f6ca65e513b030a7c264201e3f005601e80c49fb2937ce2 + languageName: node + linkType: hard + "require-main-filename@npm:^2.0.0": version: 2.0.0 resolution: "require-main-filename@npm:2.0.0" @@ -6230,6 +6746,13 @@ __metadata: languageName: node linkType: hard +"requireindex@npm:^1.2.0": + version: 1.2.0 + resolution: "requireindex@npm:1.2.0" + checksum: 7fb42aed73bf8de9acc4d6716cf07acc7fbe180e58729433bafcf702e76e7bb10e54f8266c06bfec62d752e0ac14d50e8758833de539e6f4e2cd642077866153 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -6260,7 +6783,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.10.0, resolve@npm:^1.20.0": +"resolve@npm:^1.10.0, resolve@npm:^1.10.1, resolve@npm:^1.20.0": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -6273,7 +6796,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.10.1#optional!builtin, resolve@patch:resolve@npm%3A^1.20.0#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -6368,15 +6891,22 @@ __metadata: languageName: node linkType: hard -"safe-array-concat@npm:^1.1.0": - version: 1.1.0 - resolution: "safe-array-concat@npm:1.1.0" +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" dependencies: - call-bind: "npm:^1.0.5" - get-intrinsic: "npm:^1.2.2" + call-bind: "npm:^1.0.7" + get-intrinsic: "npm:^1.2.4" has-symbols: "npm:^1.0.3" isarray: "npm:^2.0.5" - checksum: 833d3d950fc7507a60075f9bfaf41ec6dac7c50c7a9d62b1e6b071ecc162185881f92e594ff95c1a18301c881352dd6fd236d56999d5819559db7b92da9c28af + checksum: 12f9fdb01c8585e199a347eacc3bae7b5164ae805cdc8c6707199dbad5b9e30001a50a43c4ee24dc9ea32dbb7279397850e9208a7e217f4d8b1cf5d90129dec9 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.1.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 languageName: node linkType: hard @@ -6398,7 +6928,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.6.0": +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0, semver@npm:^5.6.0": version: 5.7.2 resolution: "semver@npm:5.7.2" bin: @@ -6407,7 +6937,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:^6.3.0, semver@npm:^6.3.1": +"semver@npm:^6.1.0, semver@npm:^6.3.0, semver@npm:^6.3.1": version: 6.3.1 resolution: "semver@npm:6.3.1" bin: @@ -6427,6 +6957,15 @@ __metadata: languageName: node linkType: hard +"serialize-javascript@npm:6.0.0": + version: 6.0.0 + resolution: "serialize-javascript@npm:6.0.0" + dependencies: + randombytes: "npm:^2.1.0" + checksum: 73104922ef0a919064346eea21caab99de1a019a1f5fb54a7daa7fcabc39e83b387a2a363e52a889598c3b1bcf507c4b2a7b26df76e991a310657af20eea2e7c + languageName: node + linkType: hard + "set-blocking@npm:^2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -6435,16 +6974,16 @@ __metadata: linkType: hard "set-function-length@npm:^1.2.1": - version: 1.2.1 - resolution: "set-function-length@npm:1.2.1" + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" dependencies: - define-data-property: "npm:^1.1.2" + define-data-property: "npm:^1.1.4" es-errors: "npm:^1.3.0" function-bind: "npm:^1.1.2" - get-intrinsic: "npm:^1.2.3" + get-intrinsic: "npm:^1.2.4" gopd: "npm:^1.0.1" - has-property-descriptors: "npm:^1.0.1" - checksum: 1927e296599f2c04d210c1911f1600430a5e49e04a6d8bb03dca5487b95a574da9968813a2ced9a774bd3e188d4a6208352c8f64b8d4674cdb021dca21e190ca + has-property-descriptors: "npm:^1.0.2" + checksum: 82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c languageName: node linkType: hard @@ -6501,15 +7040,22 @@ __metadata: languageName: node linkType: hard +"shell-quote@npm:^1.6.1": + version: 1.8.1 + resolution: "shell-quote@npm:1.8.1" + checksum: 8cec6fd827bad74d0a49347057d40dfea1e01f12a6123bf82c4649f3ef152fc2bc6d6176e6376bffcd205d9d0ccb4f1f9acae889384d20baff92186f01ea455a + languageName: node + linkType: hard + "side-channel@npm:^1.0.4": - version: 1.0.5 - resolution: "side-channel@npm:1.0.5" + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" dependencies: - call-bind: "npm:^1.0.6" + call-bind: "npm:^1.0.7" es-errors: "npm:^1.3.0" get-intrinsic: "npm:^1.2.4" object-inspect: "npm:^1.13.1" - checksum: 31312fecb68997ce2893b1f6d1fd07d6dd41e05cc938e82004f056f7de96dd9df599ef9418acdf730dda948e867e933114bd2efe4170c0146d1ed7009700c252 + checksum: d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f languageName: node linkType: hard @@ -6765,36 +7311,49 @@ __metadata: languageName: node linkType: hard -"string.prototype.trim@npm:^1.2.8": - version: 1.2.8 - resolution: "string.prototype.trim@npm:1.2.8" +"string.prototype.padend@npm:^3.0.0": + version: 3.1.6 + resolution: "string.prototype.padend@npm:3.1.6" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - checksum: 4f76c583908bcde9a71208ddff38f67f24c9ec8093631601666a0df8b52fad44dad2368c78895ce83eb2ae8e7068294cc96a02fc971ab234e4d5c9bb61ea4e34 + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 8f2c8c1f3db1efcdc210668c80c87f2cea1253d6029ff296a172b5e13edc9adebeed4942d023de8d31f9b13b69f3f5d73de7141959b1f09817fba5f527e83be1 languageName: node linkType: hard -"string.prototype.trimend@npm:^1.0.7": - version: 1.0.7 - resolution: "string.prototype.trimend@npm:1.0.7" +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - checksum: 53c24911c7c4d8d65f5ef5322de23a3d5b6b4db73273e05871d5ab4571ae5638f38f7f19d71d09116578fb060e5a145cc6a208af2d248c8baf7a34f44d32ce57 + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.0" + es-object-atoms: "npm:^1.0.0" + checksum: dcef1a0fb61d255778155006b372dff8cc6c4394bc39869117e4241f41a2c52899c0d263ffc7738a1f9e61488c490b05c0427faa15151efad721e1a9fb2663c2 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 0a0b54c17c070551b38e756ae271865ac6cc5f60dabf2e7e343cceae7d9b02e1a1120a824e090e79da1b041a74464e8477e2da43e2775c85392be30a6f60963c languageName: node linkType: hard "string.prototype.trimstart@npm:^1.0.7": - version: 1.0.7 - resolution: "string.prototype.trimstart@npm:1.0.7" + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" dependencies: - call-bind: "npm:^1.0.2" - define-properties: "npm:^1.2.0" - es-abstract: "npm:^1.22.1" - checksum: 0bcf391b41ea16d4fda9c9953d0a7075171fe090d33b4cf64849af94944c50862995672ac03e0c5dba2940a213ad7f53515a668dac859ce22a0276289ae5cf4f + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 languageName: node linkType: hard @@ -6846,7 +7405,7 @@ __metadata: languageName: node linkType: hard -"strip-json-comments@npm:^3.1.1": +"strip-json-comments@npm:3.1.1, strip-json-comments@npm:^3.1.1": version: 3.1.1 resolution: "strip-json-comments@npm:3.1.1" checksum: 9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd @@ -6871,6 +7430,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:8.1.1, supports-color@npm:^8.0.0": + version: 8.1.1 + resolution: "supports-color@npm:8.1.1" + dependencies: + has-flag: "npm:^4.0.0" + checksum: ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 + languageName: node + linkType: hard + "supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": version: 5.5.0 resolution: "supports-color@npm:5.5.0" @@ -6889,15 +7457,6 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0": - version: 8.1.1 - resolution: "supports-color@npm:8.1.1" - dependencies: - has-flag: "npm:^4.0.0" - checksum: ea1d3c275dd604c974670f63943ed9bd83623edc102430c05adb8efc56ba492746b6e95386e7831b872ec3807fd89dd8eb43f735195f37b5ec343e4234cc7e89 - languageName: node - linkType: hard - "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -6906,8 +7465,8 @@ __metadata: linkType: hard "tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.2.0 - resolution: "tar@npm:6.2.0" + version: 6.2.1 + resolution: "tar@npm:6.2.1" dependencies: chownr: "npm:^2.0.0" fs-minipass: "npm:^2.0.0" @@ -6915,7 +7474,7 @@ __metadata: minizlib: "npm:^2.1.1" mkdirp: "npm:^1.0.3" yallist: "npm:^4.0.0" - checksum: 02ca064a1a6b4521fef88c07d389ac0936730091f8c02d30ea60d472e0378768e870769ab9e986d87807bfee5654359cf29ff4372746cc65e30cbddc352660d8 + checksum: a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 languageName: node linkType: hard @@ -6971,6 +7530,13 @@ __metadata: languageName: node linkType: hard +"tiny-invariant@npm:^1.3.3": + version: 1.3.3 + resolution: "tiny-invariant@npm:1.3.3" + checksum: 65af4a07324b591a059b35269cd696aba21bef2107f29b9f5894d83cc143159a204b299553435b03874ebb5b94d019afa8b8eff241c8a4cfee95872c2e1c1c4a + languageName: node + linkType: hard + "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -7124,7 +7690,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2.0.1": +"tslib@npm:^2.0.1, tslib@npm:^2.0.3": version: 2.6.2 resolution: "tslib@npm:2.6.2" checksum: e03a8a4271152c8b26604ed45535954c0a45296e32445b4b87f8a5abdb2421f40b59b4ca437c4346af0f28179780d604094eb64546bee2019d903d01c6c19bdb @@ -7246,14 +7812,28 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^2.11.2": + version: 2.19.0 + resolution: "type-fest@npm:2.19.0" + checksum: a5a7ecf2e654251613218c215c7493574594951c08e52ab9881c9df6a6da0aeca7528c213c622bc374b4e0cb5c443aa3ab758da4e3c959783ce884c3194e12cb + languageName: node + linkType: hard + +"type-fest@npm:^3.0.0": + version: 3.13.1 + resolution: "type-fest@npm:3.13.1" + checksum: 547d22186f73a8c04590b70dcf63baff390078c75ea8acd366bbd510fd0646e348bd1970e47ecf795b7cff0b41d26e9c475c1fedd6ef5c45c82075fbf916b629 + languageName: node + linkType: hard + "type-fest@npm:^4.6.0, type-fest@npm:^4.7.1": - version: 4.10.3 - resolution: "type-fest@npm:4.10.3" - checksum: b6b1e22c40221fef3f5f03bcb06087731fe15a9d762863ab47af301d666a5957d02c4ea7f0f873a367797d3661a65bc2d210faa7288dacca53d9bc310973bcc3 + version: 4.14.0 + resolution: "type-fest@npm:4.14.0" + checksum: 97d03f8af58bf50b83016eb8178f19698ef930479e21fd4d4555ad4e3617d4aff0e4400f6ab2a350975f18fa6439e7248172f92dea9229cd5e9942a2daa48806 languageName: node linkType: hard -"typed-array-buffer@npm:^1.0.1": +"typed-array-buffer@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-buffer@npm:1.0.2" dependencies: @@ -7264,7 +7844,7 @@ __metadata: languageName: node linkType: hard -"typed-array-byte-length@npm:^1.0.0": +"typed-array-byte-length@npm:^1.0.1": version: 1.0.1 resolution: "typed-array-byte-length@npm:1.0.1" dependencies: @@ -7277,7 +7857,7 @@ __metadata: languageName: node linkType: hard -"typed-array-byte-offset@npm:^1.0.0": +"typed-array-byte-offset@npm:^1.0.2": version: 1.0.2 resolution: "typed-array-byte-offset@npm:1.0.2" dependencies: @@ -7291,9 +7871,9 @@ __metadata: languageName: node linkType: hard -"typed-array-length@npm:^1.0.4": - version: 1.0.5 - resolution: "typed-array-length@npm:1.0.5" +"typed-array-length@npm:^1.0.5": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" dependencies: call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" @@ -7301,27 +7881,27 @@ __metadata: has-proto: "npm:^1.0.3" is-typed-array: "npm:^1.1.13" possible-typed-array-names: "npm:^1.0.0" - checksum: 5cc0f79196e70a92f8f40846cfa62b3de6be51e83f73655e137116cf65e3c29a288502b18cc8faf33c943c2470a4569009e1d6da338441649a2db2f135761ad5 + checksum: 74253d7dc488eb28b6b2711cf31f5a9dcefc9c41b0681fd1c178ed0a1681b4468581a3626d39cd4df7aee3d3927ab62be06aa9ca74e5baf81827f61641445b77 languageName: node linkType: hard "typescript@npm:^5.0.4": - version: 5.3.3 - resolution: "typescript@npm:5.3.3" + version: 5.4.3 + resolution: "typescript@npm:5.4.3" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: e33cef99d82573624fc0f854a2980322714986bc35b9cb4d1ce736ed182aeab78e2cb32b385efa493b2a976ef52c53e20d6c6918312353a91850e2b76f1ea44f + checksum: 22443a8760c3668e256c0b34b6b45c359ef6cecc10c42558806177a7d500ab1a7d7aac1f976d712e26989ddf6731d2fbdd3212b7c73290a45127c1c43ba2005a languageName: node linkType: hard "typescript@patch:typescript@npm%3A^5.0.4#optional!builtin": - version: 5.3.3 - resolution: "typescript@patch:typescript@npm%3A5.3.3#optional!builtin::version=5.3.3&hash=e012d7" + version: 5.4.3 + resolution: "typescript@patch:typescript@npm%3A5.4.3#optional!builtin::version=5.4.3&hash=e012d7" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 1d0a5f4ce496c42caa9a30e659c467c5686eae15d54b027ee7866744952547f1be1262f2d40de911618c242b510029d51d43ff605dba8fb740ec85ca2d3f9500 + checksum: 1b50712759f1e4bf4bf6fe7e662235358b716972dec8aa9ca117dee531dbd7b417f5fe28f74d347b4447eec09a200c0372fe9cf1aad2e15a2bcf4a1a99db0820 languageName: node linkType: hard @@ -7406,19 +7986,6 @@ __metadata: languageName: node linkType: hard -"util@npm:^0.12.5": - version: 0.12.5 - resolution: "util@npm:0.12.5" - dependencies: - inherits: "npm:^2.0.3" - is-arguments: "npm:^1.0.4" - is-generator-function: "npm:^1.0.7" - is-typed-array: "npm:^1.1.3" - which-typed-array: "npm:^1.1.2" - checksum: c27054de2cea2229a66c09522d0fa1415fb12d861d08523a8846bf2e4cbf0079d4c3f725f09dcb87493549bcbf05f5798dce1688b53c6c17201a45759e7253f3 - languageName: node - linkType: hard - "uuid@npm:^3.3.2": version: 3.4.0 resolution: "uuid@npm:3.4.0" @@ -7522,16 +8089,16 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.2": - version: 1.1.14 - resolution: "which-typed-array@npm:1.1.14" +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" dependencies: - available-typed-arrays: "npm:^1.0.6" - call-bind: "npm:^1.0.5" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" for-each: "npm:^0.3.3" gopd: "npm:^1.0.1" - has-tostringtag: "npm:^1.0.1" - checksum: 0960f1e77807058819451b98c51d4cd72031593e8de990b24bd3fc22e176f5eee22921d68d852297c786aec117689f0423ed20aa4fde7ce2704d680677891f56 + has-tostringtag: "npm:^1.0.2" + checksum: 4465d5348c044032032251be54d8988270e69c6b7154f8fcb2a47ff706fe36f7624b3a24246b8d9089435a8f4ec48c1c1025c5d6b499456b9e5eff4f48212983 languageName: node linkType: hard @@ -7568,6 +8135,13 @@ __metadata: languageName: node linkType: hard +"workerpool@npm:6.2.1": + version: 6.2.1 + resolution: "workerpool@npm:6.2.1" + checksum: f0efd2d74eafd58eaeb36d7d85837d080f75c52b64893cff317b66257dd308e5c9f85ef0b12904f6c7f24ed2365bc3cfeba1f1d16aa736d84d6ef8156ae37c80 + languageName: node + linkType: hard + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -7671,6 +8245,13 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:20.2.4": + version: 20.2.4 + resolution: "yargs-parser@npm:20.2.4" + checksum: 08dc341f0b9f940c2fffc1d1decf3be00e28cabd2b578a694901eccc7dcd10577f10c6aa1b040fdd9a68b2042515a60f18476543bccacf9f3ce2c8534cd87435 + languageName: node + linkType: hard + "yargs-parser@npm:^18.1.2, yargs-parser@npm:^18.1.3": version: 18.1.3 resolution: "yargs-parser@npm:18.1.3" @@ -7681,6 +8262,13 @@ __metadata: languageName: node linkType: hard +"yargs-parser@npm:^20.2.2": + version: 20.2.9 + resolution: "yargs-parser@npm:20.2.9" + checksum: 0685a8e58bbfb57fab6aefe03c6da904a59769bd803a722bb098bd5b0f29d274a1357762c7258fb487512811b8063fb5d2824a3415a0a4540598335b3b086c72 + languageName: node + linkType: hard + "yargs-parser@npm:^21.0.1, yargs-parser@npm:^21.1.1": version: 21.1.1 resolution: "yargs-parser@npm:21.1.1" @@ -7688,6 +8276,33 @@ __metadata: languageName: node linkType: hard +"yargs-unparser@npm:2.0.0": + version: 2.0.0 + resolution: "yargs-unparser@npm:2.0.0" + dependencies: + camelcase: "npm:^6.0.0" + decamelize: "npm:^4.0.0" + flat: "npm:^5.0.2" + is-plain-obj: "npm:^2.1.0" + checksum: a5a7d6dc157efa95122e16780c019f40ed91d4af6d2bac066db8194ed0ec5c330abb115daa5a79ff07a9b80b8ea80c925baacf354c4c12edd878c0529927ff03 + languageName: node + linkType: hard + +"yargs@npm:16.2.0": + version: 16.2.0 + resolution: "yargs@npm:16.2.0" + dependencies: + cliui: "npm:^7.0.2" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.0" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^20.2.2" + checksum: b1dbfefa679848442454b60053a6c95d62f2d2e21dd28def92b647587f415969173c6e99a0f3bab4f1b67ee8283bf735ebe3544013f09491186ba9e8a9a2b651 + languageName: node + linkType: hard + "yargs@npm:^15.1.0": version: 15.4.1 resolution: "yargs@npm:15.4.1" From 11f107dfc7bbf688b1d02ba36d2e529d949601e3 Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Thu, 28 Mar 2024 12:05:30 +0100 Subject: [PATCH 02/16] Clean up rules --- packages/eslint-plugin/lib/rules/toggle.js | 20 ++++++-------------- 1 file changed, 6 insertions(+), 14 deletions(-) diff --git a/packages/eslint-plugin/lib/rules/toggle.js b/packages/eslint-plugin/lib/rules/toggle.js index 00621d3..ed5f256 100644 --- a/packages/eslint-plugin/lib/rules/toggle.js +++ b/packages/eslint-plugin/lib/rules/toggle.js @@ -41,17 +41,6 @@ module.exports = { // while .eslintrc.js reads from `settings` const settings = context.settings || settings; const { opticks } = settings; - // variables should be defined here - - //---------------------------------------------------------------------- - // Helpers - //---------------------------------------------------------------------- - - // any helper functions should go here or else delete this section - - //---------------------------------------------------------------------- - // Public - //---------------------------------------------------------------------- return { CallExpression: (node) => { @@ -60,6 +49,8 @@ module.exports = { } = node; // TODO: look for imported toggles from opticks only if (name === "toggle") { + + // Check for invalid number of variants if (node.arguments.length === 2) { return context.report({ messageId: "InvalidNrOfVariants", @@ -79,9 +70,10 @@ module.exports = { ], }); } - // Clean up + const winningVariant = opticks.experiments[node.arguments[0].value]; + // Check if the experiment is not configured if (typeof winningVariant === 'undefined') { return context.report({ messageId: "ExperimentNotConfigured", @@ -94,6 +86,7 @@ module.exports = { const winningVariantIndex = winningVariant === "a" ? 1 : 2; const winningVariantContent = node.arguments[winningVariantIndex].raw; + // Check if the experiment concluded if (typeof winningVariant === "string") { return context.report({ messageId: "ExperimentConcluded", @@ -120,8 +113,7 @@ module.exports = { }); } } - }, - // visitor functions for different types of nodes + } }; }, }; From 707f872783310aeb4fd74f515f90cf12a9b70410 Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Thu, 28 Mar 2024 12:06:06 +0100 Subject: [PATCH 03/16] Format JS files --- packages/eslint-plugin/lib/index.js | 10 +- packages/eslint-plugin/lib/rules/toggle.js | 98 +++++++++---------- .../eslint-plugin/tests/lib/rules/toggle.js | 70 ++++++------- 3 files changed, 85 insertions(+), 93 deletions(-) diff --git a/packages/eslint-plugin/lib/index.js b/packages/eslint-plugin/lib/index.js index 65f1822..90d28a0 100644 --- a/packages/eslint-plugin/lib/index.js +++ b/packages/eslint-plugin/lib/index.js @@ -2,21 +2,17 @@ * @fileoverview Opticks * @author Jop */ -"use strict"; +'use strict' //------------------------------------------------------------------------------ // Requirements //------------------------------------------------------------------------------ -const requireIndex = require("requireindex"); +const requireIndex = require('requireindex') //------------------------------------------------------------------------------ // Plugin Definition //------------------------------------------------------------------------------ - // import all rules in lib/rules -module.exports.rules = requireIndex(__dirname + "/rules"); - - - +module.exports.rules = requireIndex(__dirname + '/rules') diff --git a/packages/eslint-plugin/lib/rules/toggle.js b/packages/eslint-plugin/lib/rules/toggle.js index ed5f256..aae4d7a 100644 --- a/packages/eslint-plugin/lib/rules/toggle.js +++ b/packages/eslint-plugin/lib/rules/toggle.js @@ -2,7 +2,7 @@ * @fileoverview Opticks * @author Jop */ -"use strict"; +'use strict' //------------------------------------------------------------------------------ // Rule Definition @@ -11,109 +11,105 @@ /** @type {import('eslint').Rule.RuleModule} */ module.exports = { meta: { - type: "problem", + type: 'problem', docs: { - description: "Detects stale code from expired Opticks experiments", + description: 'Detects stale code from expired Opticks experiments', recommended: false, - url: null, // URL to the documentation page for this rule + url: null // URL to the documentation page for this rule }, - fixable: "code", + fixable: 'code', hasSuggestions: true, schema: [], // Add a schema if the rule has options messages: { ExperimentNotConfigured: - "Looks like this experiment is not configured. Please make sure the experiment is added to the experiments config file.", + 'Looks like this experiment is not configured. Please make sure the experiment is added to the experiments config file.', ExperimentConcluded: - "Looks like this experiment concluded, and can be cleaned up. The winning variant is {{winningVariant}}.", + 'Looks like this experiment concluded, and can be cleaned up. The winning variant is {{winningVariant}}.', AddWinningVariant: - "If the experiment is concluded, add the winning variant.", + 'If the experiment is concluded, add the winning variant.', VariableAssignment: - "It is okay to assign the result of a toggle to a variable, but you might be better off calling the toggle inline for automatic clean up.", + 'It is okay to assign the result of a toggle to a variable, but you might be better off calling the toggle inline for automatic clean up.', InvalidNrOfVariants: - "Invalid number of variants. Toggles require either 0, 2, or more variants.", + 'Invalid number of variants. Toggles require either 0, 2, or more variants.', AddNullBVariant: - "If the b side is not supposed to do anything, add a null value.", - }, + 'If the b side is not supposed to do anything, add a null value.' + } }, create(context) { // QUESTION it seems the test runner reads from `context.settings` // while .eslintrc.js reads from `settings` - const settings = context.settings || settings; - const { opticks } = settings; + const settings = context.settings || settings + const {opticks} = settings return { CallExpression: (node) => { const { - callee: { name }, - } = node; + callee: {name} + } = node // TODO: look for imported toggles from opticks only - if (name === "toggle") { - + if (name === 'toggle') { // Check for invalid number of variants if (node.arguments.length === 2) { return context.report({ - messageId: "InvalidNrOfVariants", + messageId: 'InvalidNrOfVariants', node, suggest: [ { - messageId: "AddNullBVariant", + messageId: 'AddNullBVariant', fix: (fixer) => { - const { range } = node; + const {range} = node // TODO: How to work with multilines - return fixer.insertTextBeforeRange( - [range[1] - 1], - ", null" - ); - }, - }, - ], - }); + return fixer.insertTextBeforeRange([range[1] - 1], ', null') + } + } + ] + }) } - - const winningVariant = opticks.experiments[node.arguments[0].value]; + + const winningVariant = opticks.experiments[node.arguments[0].value] // Check if the experiment is not configured if (typeof winningVariant === 'undefined') { return context.report({ - messageId: "ExperimentNotConfigured", + messageId: 'ExperimentNotConfigured', node - }); + }) } // TODO: Support unlimited amount of arguments // TODO: Support arrow function replacement - const winningVariantIndex = winningVariant === "a" ? 1 : 2; - const winningVariantContent = node.arguments[winningVariantIndex].raw; + const winningVariantIndex = winningVariant === 'a' ? 1 : 2 + const winningVariantContent = node.arguments[winningVariantIndex].raw // Check if the experiment concluded - if (typeof winningVariant === "string") { + if (typeof winningVariant === 'string') { return context.report({ - messageId: "ExperimentConcluded", - data: { winningVariant }, + messageId: 'ExperimentConcluded', + data: {winningVariant}, node, suggests: [ { - messageId: "AddWinningVariant", + messageId: 'AddWinningVariant', fix: (fixer) => { // TODO: Add tests - console.log(winningVariantContent); - return fixer.replaceText(node, winningVariantContent); - }, + console.log(winningVariantContent) + return fixer.replaceText(node, winningVariantContent) + } } - ], - }); + ] + }) } // Discourage variable assignment - if (node.parent.type === "VariableDeclarator") { + if (node.parent.type === 'VariableDeclarator') { return context.report({ - messageId: "VariableAssignment", - node, - }); + messageId: 'VariableAssignment', + node + }) } } } - }; - }, -}; + } + } +} diff --git a/packages/eslint-plugin/tests/lib/rules/toggle.js b/packages/eslint-plugin/tests/lib/rules/toggle.js index bc941b1..8d2d22b 100644 --- a/packages/eslint-plugin/tests/lib/rules/toggle.js +++ b/packages/eslint-plugin/tests/lib/rules/toggle.js @@ -2,14 +2,14 @@ * @fileoverview Opticks * @author Jop */ -"use strict"; +'use strict' //------------------------------------------------------------------------------ // Requirements //------------------------------------------------------------------------------ -const rule = require("../../../lib/rules/toggle"), - RuleTester = require("eslint").RuleTester; +const rule = require('../../../lib/rules/toggle'), + RuleTester = require('eslint').RuleTester //------------------------------------------------------------------------------ // Tests @@ -17,15 +17,15 @@ const rule = require("../../../lib/rules/toggle"), RuleTester.setDefaultConfig({ settings: { - opticks: { experiments: { foo: "a", bar: undefined, baz: "b" } }, - }, -}); -const ruleTester = new RuleTester(); + opticks: {experiments: {foo: 'a', bar: undefined, baz: 'b'}} + } +}) +const ruleTester = new RuleTester() -ruleTester.run("toggle", rule, { +ruleTester.run('toggle', rule, { valid: [ - { code: "toggle('bar', 'a', 'b')" }, - { code: "toggle('nonexistent', 'a', 'b')" }, + {code: "toggle('bar', 'a', 'b')"}, + {code: "toggle('nonexistent', 'a', 'b')"} ], invalid: [ { @@ -33,48 +33,48 @@ ruleTester.run("toggle", rule, { errors: [ { message: - "Looks like this experiment concluded, and can be cleaned. The winning variant is a.", - type: "CallExpression", - }, + 'Looks like this experiment concluded, and can be cleaned. The winning variant is a.', + type: 'CallExpression' + } ], - output: "'a'", + output: "'a'" }, { code: "toggle('baz', 'a', 'b')", errors: [ { - messageId: "ExperimentConcluded", - type: "CallExpression", - }, + messageId: 'ExperimentConcluded', + type: 'CallExpression' + } ], - output: "'b'", + output: "'b'" }, { // TODO: make tests work with const too code: "var intermediateVariable = toggle('bar', 'a', 'b')", errors: [ { - messageId: "VariableAssignment", - type: "CallExpression", - }, + messageId: 'VariableAssignment', + type: 'CallExpression' + } ], - output: null, + output: null }, { code: "toggle('bar', 'a')", errors: [ { - messageId: "InvalidNrOfVariants", - type: "CallExpression", + messageId: 'InvalidNrOfVariants', + type: 'CallExpression', suggestions: [ { - messageId: "AddNullBVariant", - output: "toggle('bar', 'a', null)", - }, - ], - }, + messageId: 'AddNullBVariant', + output: "toggle('bar', 'a', null)" + } + ] + } ], - output: null, + output: null }, { code: `var Foo = styled('div')\` @@ -83,9 +83,9 @@ ruleTester.run("toggle", rule, { \` `, errors: [ - "This toggle is not called from a function, this might not be what you want to do because it might execute before Opticks received the user id. Is this intended?", + 'This toggle is not called from a function, this might not be what you want to do because it might execute before Opticks received the user id. Is this intended?' ], - output: null, - }, - ], -}); + output: null + } + ] +}) From 48dc0b795f3f286978a7a4a43b048965f064968a Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Thu, 28 Mar 2024 13:53:11 +0100 Subject: [PATCH 04/16] Add meta data to lib export --- packages/eslint-plugin/lib/index.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/lib/index.js b/packages/eslint-plugin/lib/index.js index 90d28a0..b2be669 100644 --- a/packages/eslint-plugin/lib/index.js +++ b/packages/eslint-plugin/lib/index.js @@ -15,4 +15,10 @@ const requireIndex = require('requireindex') //------------------------------------------------------------------------------ // import all rules in lib/rules -module.exports.rules = requireIndex(__dirname + '/rules') +module.exports = { + meta: { + name: 'eslint-plugin-opticks', + version: '0.0.1' + }, + rules: requireIndex(__dirname + '/rules') +} From b82961475cb4e33e2d16bb7e02572ac9044b8886 Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Thu, 28 Mar 2024 13:54:56 +0100 Subject: [PATCH 05/16] Only consider toggle expressions imported from opticks --- packages/eslint-plugin/lib/rules/toggle.js | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/lib/rules/toggle.js b/packages/eslint-plugin/lib/rules/toggle.js index aae4d7a..b59a1c1 100644 --- a/packages/eslint-plugin/lib/rules/toggle.js +++ b/packages/eslint-plugin/lib/rules/toggle.js @@ -42,13 +42,26 @@ module.exports = { const settings = context.settings || settings const {opticks} = settings + let isToggleImportedFromOpticks = false + return { + ImportDeclaration: (node) => { + const importPath = node.source.value + + if (importPath === 'opticks') { + node.specifiers.forEach((specifier) => { + if (specifier.imported.name === 'toggle') { + isToggleImportedFromOpticks = true + } + }) + } + }, CallExpression: (node) => { const { callee: {name} } = node - // TODO: look for imported toggles from opticks only - if (name === 'toggle') { + + if (name === 'toggle' && isToggleImportedFromOpticks) { // Check for invalid number of variants if (node.arguments.length === 2) { return context.report({ From 268ca10c4e3560d53606a0a7e0c19478d5f93dcb Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Thu, 28 Mar 2024 15:29:16 +0100 Subject: [PATCH 06/16] Update toggle tests --- packages/eslint-plugin/.gitignore | 3 +- packages/eslint-plugin/lib/rules/toggle.js | 7 +- .../eslint-plugin/tests/lib/rules/toggle.js | 65 +++++++++++-------- 3 files changed, 42 insertions(+), 33 deletions(-) diff --git a/packages/eslint-plugin/.gitignore b/packages/eslint-plugin/.gitignore index e507da3..6f463b0 100644 --- a/packages/eslint-plugin/.gitignore +++ b/packages/eslint-plugin/.gitignore @@ -1,2 +1,3 @@ /node_modules -dist \ No newline at end of file +dist +*.log \ No newline at end of file diff --git a/packages/eslint-plugin/lib/rules/toggle.js b/packages/eslint-plugin/lib/rules/toggle.js index b59a1c1..b000103 100644 --- a/packages/eslint-plugin/lib/rules/toggle.js +++ b/packages/eslint-plugin/lib/rules/toggle.js @@ -13,7 +13,8 @@ module.exports = { meta: { type: 'problem', docs: { - description: 'Detects stale code from expired Opticks experiments', + description: + 'Detects stale code from expired Opticks experiments, and other common mistakes', recommended: false, url: null // URL to the documentation page for this rule }, @@ -101,12 +102,10 @@ module.exports = { messageId: 'ExperimentConcluded', data: {winningVariant}, node, - suggests: [ + suggest: [ { messageId: 'AddWinningVariant', fix: (fixer) => { - // TODO: Add tests - console.log(winningVariantContent) return fixer.replaceText(node, winningVariantContent) } } diff --git a/packages/eslint-plugin/tests/lib/rules/toggle.js b/packages/eslint-plugin/tests/lib/rules/toggle.js index 8d2d22b..ff3c20e 100644 --- a/packages/eslint-plugin/tests/lib/rules/toggle.js +++ b/packages/eslint-plugin/tests/lib/rules/toggle.js @@ -1,6 +1,8 @@ /** * @fileoverview Opticks - * @author Jop + * @author Gerrit + * @warning These test do not work with the isToggleImportedFromOpticks logic in the rules. + * To run the test, set isToggleImportedFromOpticks to "true" in the rule. */ 'use strict' @@ -17,59 +19,67 @@ const rule = require('../../../lib/rules/toggle'), RuleTester.setDefaultConfig({ settings: { - opticks: {experiments: {foo: 'a', bar: undefined, baz: 'b'}} + opticks: {experiments: {foo: 'a', bar: null, baz: 'b'}} } }) const ruleTester = new RuleTester() ruleTester.run('toggle', rule, { - valid: [ - {code: "toggle('bar', 'a', 'b')"}, - {code: "toggle('nonexistent', 'a', 'b')"} - ], + valid: [{code: "toggle('bar', 'a', 'b')"}], invalid: [ { - code: "toggle('foo', 'a', 'b')", + code: "toggle('bar', 'a')", errors: [ { - message: - 'Looks like this experiment concluded, and can be cleaned. The winning variant is a.', - type: 'CallExpression' + messageId: 'InvalidNrOfVariants', + type: 'CallExpression', + suggestions: [ + { + messageId: 'AddNullBVariant', + output: "toggle('bar', 'a', null)" + } + ] } ], - output: "'a'" + output: null }, { - code: "toggle('baz', 'a', 'b')", + code: "toggle('nonexistent', 'a', 'b')", errors: [ { - messageId: 'ExperimentConcluded', + messageId: 'ExperimentNotConfigured', type: 'CallExpression' } ], - output: "'b'" + output: null }, { - // TODO: make tests work with const too - code: "var intermediateVariable = toggle('bar', 'a', 'b')", + code: "toggle('foo', 'a', 'b')", errors: [ { - messageId: 'VariableAssignment', - type: 'CallExpression' + message: + 'Looks like this experiment concluded, and can be cleaned up. The winning variant is a.', + type: 'CallExpression', + suggestions: [ + { + messageId: 'AddWinningVariant', + output: "'a'" + } + ] } ], output: null }, { - code: "toggle('bar', 'a')", + code: "toggle('baz', 'a', 'b')", errors: [ { - messageId: 'InvalidNrOfVariants', + messageId: 'ExperimentConcluded', type: 'CallExpression', suggestions: [ { - messageId: 'AddNullBVariant', - output: "toggle('bar', 'a', null)" + messageId: 'AddWinningVariant', + output: "'b'" } ] } @@ -77,13 +87,12 @@ ruleTester.run('toggle', rule, { output: null }, { - code: `var Foo = styled('div')\` - display: flex; - \${toggle("foo", "a", "b")} - \` - `, + code: "var intermediateVariable = toggle('bar', 'a', 'b')", errors: [ - 'This toggle is not called from a function, this might not be what you want to do because it might execute before Opticks received the user id. Is this intended?' + { + messageId: 'VariableAssignment', + type: 'CallExpression' + } ], output: null } From 58d67265eec1dcc7aa8eeb2c3e2a7b344124cee2 Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Thu, 28 Mar 2024 15:55:33 +0100 Subject: [PATCH 07/16] Update README with further installation instructions and available rules --- packages/eslint-plugin/README.md | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md index 84816fa..61b7c0d 100644 --- a/packages/eslint-plugin/README.md +++ b/packages/eslint-plugin/README.md @@ -34,15 +34,28 @@ Then configure the rules you want to use under the rules section. ```json { "rules": { - "opticks/rule-name": 2 + "opticks/toggle": "warn", } } ``` -## Rules - -TODO: Run eslint-doc-generator to generate the rules list. - +For the opticks rules to work, you also need to add your `experiments` configuration settings section. + +```json +{ + "settings": { + "opticks": { + "experiments": { + "foo": "a", + "bar": null, + "baz": "b" + } + } + } +} +``` +## Rules +* `opticks/toggle`: Detects stale code from expired Opticks experiments, and other common mistakes From 8e7f26f207c174ed25211c8d98e22a0a0b2be334 Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Thu, 28 Mar 2024 17:30:12 +0100 Subject: [PATCH 08/16] Apply suggestions to authors Co-authored-by: Jop de Klein --- packages/eslint-plugin/lib/index.js | 3 ++- packages/eslint-plugin/lib/rules/toggle.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/lib/index.js b/packages/eslint-plugin/lib/index.js index b2be669..2b2a6ad 100644 --- a/packages/eslint-plugin/lib/index.js +++ b/packages/eslint-plugin/lib/index.js @@ -1,6 +1,7 @@ /** * @fileoverview Opticks - * @author Jop + * @author Jop de Klein + * @author Gerrit Burger */ 'use strict' diff --git a/packages/eslint-plugin/lib/rules/toggle.js b/packages/eslint-plugin/lib/rules/toggle.js index b000103..57998db 100644 --- a/packages/eslint-plugin/lib/rules/toggle.js +++ b/packages/eslint-plugin/lib/rules/toggle.js @@ -1,6 +1,7 @@ /** * @fileoverview Opticks - * @author Jop + * @author Jop de Klein + * @author Gerrit Burger */ 'use strict' From 7e593e2a60e1ac62b1edc50c5b80260ffd383d11 Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Thu, 28 Mar 2024 17:36:41 +0100 Subject: [PATCH 09/16] Create rule docs for toggle based on PR feedback --- packages/eslint-plugin/docs/rules/opticks.md | 35 -------------------- packages/eslint-plugin/docs/rules/toggle.md | 31 +++++++++++++++++ 2 files changed, 31 insertions(+), 35 deletions(-) delete mode 100644 packages/eslint-plugin/docs/rules/opticks.md create mode 100644 packages/eslint-plugin/docs/rules/toggle.md diff --git a/packages/eslint-plugin/docs/rules/opticks.md b/packages/eslint-plugin/docs/rules/opticks.md deleted file mode 100644 index 8df2909..0000000 --- a/packages/eslint-plugin/docs/rules/opticks.md +++ /dev/null @@ -1,35 +0,0 @@ -# Opticks (`opticks`) - -Please describe the origin of the rule here. - -## Rule Details - -This rule aims to... - -Examples of **incorrect** code for this rule: - -```js - -// fill me in - -``` - -Examples of **correct** code for this rule: - -```js - -// fill me in - -``` - -### Options - -If there are any options, describe them here. Otherwise, delete this section. - -## When Not To Use It - -Give a short description of when it would be appropriate to turn off this rule. - -## Further Reading - -If there are other links that describe the issue this rule addresses, please include them here in a bulleted list. diff --git a/packages/eslint-plugin/docs/rules/toggle.md b/packages/eslint-plugin/docs/rules/toggle.md new file mode 100644 index 0000000..bf38987 --- /dev/null +++ b/packages/eslint-plugin/docs/rules/toggle.md @@ -0,0 +1,31 @@ +# Toggle (`opticks/toggle`) + +Detects stale code from expired Opticks experiments, and other common mistakes related to toggles. + +## Rule Details + +This rule aims to to guide users of Opticks to correct use of the library, as well as indicate which experiments in the code should be considered for clean up. + +### Options + +This rule expects a configuration to be present in order to detect experiments to be cleaned up. + +```json +{ + "settings": { + "opticks": { + "experiments": { + "foo": "a", + "bar": null, + "baz": "b" + } + } + } +} +``` + +By convention, the value of an experiment of `null` means the experiment is still running, and a string value such as `a` or `b` means it's concluded to the side specified and the other sides can be cleaned up. + +## When Not To Use It + +If you don't use Opticks. From f7e2c79c0f2986130d9320da46d16728f9190314 Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Tue, 2 Apr 2024 10:55:20 +0200 Subject: [PATCH 10/16] Set isToggleImportedFromOpticks in the settings object to allow mocking in the tests --- packages/eslint-plugin/lib/rules/toggle.js | 9 +++------ packages/eslint-plugin/tests/lib/rules/toggle.js | 8 ++++---- 2 files changed, 7 insertions(+), 10 deletions(-) diff --git a/packages/eslint-plugin/lib/rules/toggle.js b/packages/eslint-plugin/lib/rules/toggle.js index 57998db..0ce12c8 100644 --- a/packages/eslint-plugin/lib/rules/toggle.js +++ b/packages/eslint-plugin/lib/rules/toggle.js @@ -39,13 +39,10 @@ module.exports = { }, create(context) { - // QUESTION it seems the test runner reads from `context.settings` - // while .eslintrc.js reads from `settings` + // The test runner reads from `context.settings`, while .eslintrc.js reads from `settings` const settings = context.settings || settings const {opticks} = settings - let isToggleImportedFromOpticks = false - return { ImportDeclaration: (node) => { const importPath = node.source.value @@ -53,7 +50,7 @@ module.exports = { if (importPath === 'opticks') { node.specifiers.forEach((specifier) => { if (specifier.imported.name === 'toggle') { - isToggleImportedFromOpticks = true + settings.isToggleImportedFromOpticks = true } }) } @@ -63,7 +60,7 @@ module.exports = { callee: {name} } = node - if (name === 'toggle' && isToggleImportedFromOpticks) { + if (name === 'toggle' && settings.isToggleImportedFromOpticks) { // Check for invalid number of variants if (node.arguments.length === 2) { return context.report({ diff --git a/packages/eslint-plugin/tests/lib/rules/toggle.js b/packages/eslint-plugin/tests/lib/rules/toggle.js index ff3c20e..0dfadd8 100644 --- a/packages/eslint-plugin/tests/lib/rules/toggle.js +++ b/packages/eslint-plugin/tests/lib/rules/toggle.js @@ -1,8 +1,6 @@ /** * @fileoverview Opticks - * @author Gerrit - * @warning These test do not work with the isToggleImportedFromOpticks logic in the rules. - * To run the test, set isToggleImportedFromOpticks to "true" in the rule. + * @author Gerrit Burger */ 'use strict' @@ -19,7 +17,9 @@ const rule = require('../../../lib/rules/toggle'), RuleTester.setDefaultConfig({ settings: { - opticks: {experiments: {foo: 'a', bar: null, baz: 'b'}} + opticks: {experiments: {foo: 'a', bar: null, baz: 'b'}}, + // Mock the import of the toggle function from the opticks package + isToggleImportedFromOpticks: true } }) const ruleTester = new RuleTester() From 1145c1305041d2294cf3b3255462deb7b3ac4fa1 Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Tue, 2 Apr 2024 11:24:30 +0200 Subject: [PATCH 11/16] Remove suggestion support for Concluded Experiment rule --- packages/eslint-plugin/lib/rules/toggle.js | 19 +++---------------- .../eslint-plugin/tests/lib/rules/toggle.js | 16 ++-------------- 2 files changed, 5 insertions(+), 30 deletions(-) diff --git a/packages/eslint-plugin/lib/rules/toggle.js b/packages/eslint-plugin/lib/rules/toggle.js index 0ce12c8..81e8aca 100644 --- a/packages/eslint-plugin/lib/rules/toggle.js +++ b/packages/eslint-plugin/lib/rules/toggle.js @@ -27,8 +27,6 @@ module.exports = { 'Looks like this experiment is not configured. Please make sure the experiment is added to the experiments config file.', ExperimentConcluded: 'Looks like this experiment concluded, and can be cleaned up. The winning variant is {{winningVariant}}.', - AddWinningVariant: - 'If the experiment is concluded, add the winning variant.', VariableAssignment: 'It is okay to assign the result of a toggle to a variable, but you might be better off calling the toggle inline for automatic clean up.', InvalidNrOfVariants: @@ -89,25 +87,14 @@ module.exports = { }) } - // TODO: Support unlimited amount of arguments - // TODO: Support arrow function replacement - const winningVariantIndex = winningVariant === 'a' ? 1 : 2 - const winningVariantContent = node.arguments[winningVariantIndex].raw - // Check if the experiment concluded + // TODO: Support unlimited amount of arguments + // TODO: Support replacement, including arrow functions if (typeof winningVariant === 'string') { return context.report({ messageId: 'ExperimentConcluded', data: {winningVariant}, - node, - suggest: [ - { - messageId: 'AddWinningVariant', - fix: (fixer) => { - return fixer.replaceText(node, winningVariantContent) - } - } - ] + node }) } diff --git a/packages/eslint-plugin/tests/lib/rules/toggle.js b/packages/eslint-plugin/tests/lib/rules/toggle.js index 0dfadd8..b9ab67d 100644 --- a/packages/eslint-plugin/tests/lib/rules/toggle.js +++ b/packages/eslint-plugin/tests/lib/rules/toggle.js @@ -59,13 +59,7 @@ ruleTester.run('toggle', rule, { { message: 'Looks like this experiment concluded, and can be cleaned up. The winning variant is a.', - type: 'CallExpression', - suggestions: [ - { - messageId: 'AddWinningVariant', - output: "'a'" - } - ] + type: 'CallExpression' } ], output: null @@ -75,13 +69,7 @@ ruleTester.run('toggle', rule, { errors: [ { messageId: 'ExperimentConcluded', - type: 'CallExpression', - suggestions: [ - { - messageId: 'AddWinningVariant', - output: "'b'" - } - ] + type: 'CallExpression' } ], output: null From 0e6fe8677e3f8c3f684b2d47bb697a5803c6eeb5 Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Tue, 2 Apr 2024 11:27:10 +0200 Subject: [PATCH 12/16] Add link to Opticks in documentation --- packages/eslint-plugin/docs/rules/toggle.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/docs/rules/toggle.md b/packages/eslint-plugin/docs/rules/toggle.md index bf38987..4d8008c 100644 --- a/packages/eslint-plugin/docs/rules/toggle.md +++ b/packages/eslint-plugin/docs/rules/toggle.md @@ -1,6 +1,6 @@ # Toggle (`opticks/toggle`) -Detects stale code from expired Opticks experiments, and other common mistakes related to toggles. +Detects stale code from expired [Opticks](https://www.npmjs.com/package/opticks) experiments, and other common mistakes related to toggles. ## Rule Details From 4a39c1d38278a6f9824ae72949056f23b841ce0c Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Tue, 2 Apr 2024 11:29:41 +0200 Subject: [PATCH 13/16] Update ExperimentConcluded message based on review suggestion Co-authored-by: Dale French --- packages/eslint-plugin/lib/rules/toggle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/lib/rules/toggle.js b/packages/eslint-plugin/lib/rules/toggle.js index 81e8aca..307d755 100644 --- a/packages/eslint-plugin/lib/rules/toggle.js +++ b/packages/eslint-plugin/lib/rules/toggle.js @@ -26,7 +26,7 @@ module.exports = { ExperimentNotConfigured: 'Looks like this experiment is not configured. Please make sure the experiment is added to the experiments config file.', ExperimentConcluded: - 'Looks like this experiment concluded, and can be cleaned up. The winning variant is {{winningVariant}}.', + 'Looks like this experiment has concluded, and can be cleaned up. The winning variant is {{winningVariant}}.', VariableAssignment: 'It is okay to assign the result of a toggle to a variable, but you might be better off calling the toggle inline for automatic clean up.', InvalidNrOfVariants: From 1459655300703d9d85c34c0a000839d525417fbf Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Tue, 2 Apr 2024 11:39:46 +0200 Subject: [PATCH 14/16] Use messageId in test --- packages/eslint-plugin/tests/lib/rules/toggle.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/eslint-plugin/tests/lib/rules/toggle.js b/packages/eslint-plugin/tests/lib/rules/toggle.js index b9ab67d..68152e0 100644 --- a/packages/eslint-plugin/tests/lib/rules/toggle.js +++ b/packages/eslint-plugin/tests/lib/rules/toggle.js @@ -57,8 +57,7 @@ ruleTester.run('toggle', rule, { code: "toggle('foo', 'a', 'b')", errors: [ { - message: - 'Looks like this experiment concluded, and can be cleaned up. The winning variant is a.', + messageId: 'ExperimentConcluded', type: 'CallExpression' } ], From a06b5d35459691e5065392724539cca2b5409479 Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Tue, 2 Apr 2024 12:13:10 +0200 Subject: [PATCH 15/16] Update packages.json to prepare for publishing --- packages/eslint-plugin/package.json | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 798f034..9f9477d 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,15 +1,22 @@ { "name": "eslint-plugin-opticks", "version": "0.0.1", - "description": "Opticks", + "description": "An ESLint plugin for Opticks", "keywords": [ "eslint", "eslintplugin", "eslint-plugin" ], - "author": "Jop de Klein", "main": "./lib/index.js", "exports": "./lib/index.js", + "files": [ + "lib/" + ], + "engines": { + "node": "20.8.0" + }, + "license": "ISC", + "author": "Jop de Klein", "scripts": { "lint": "npm-run-all \"lint:*\"", "lint:eslint-docs": "npm-run-all \"update:eslint-docs -- --check\"", @@ -28,11 +35,7 @@ "mocha": "^10.0.0", "npm-run-all": "^4.1.5" }, - "engines": { - "node": "^14.17.0 || ^16.0.0 || >= 18.0.0" - }, "peerDependencies": { "eslint": ">=7" - }, - "license": "ISC" + } } From e9f9d5429c03935e31e67fec4128f52d277fd85a Mon Sep 17 00:00:00 2001 From: Gerrit Burger Date: Tue, 2 Apr 2024 12:20:11 +0200 Subject: [PATCH 16/16] Use substring check for opticks importPath --- packages/eslint-plugin/lib/rules/toggle.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/eslint-plugin/lib/rules/toggle.js b/packages/eslint-plugin/lib/rules/toggle.js index 307d755..ee9491d 100644 --- a/packages/eslint-plugin/lib/rules/toggle.js +++ b/packages/eslint-plugin/lib/rules/toggle.js @@ -45,7 +45,7 @@ module.exports = { ImportDeclaration: (node) => { const importPath = node.source.value - if (importPath === 'opticks') { + if (importPath.includes('opticks')) { node.specifiers.forEach((specifier) => { if (specifier.imported.name === 'toggle') { settings.isToggleImportedFromOpticks = true